esp32python运行sd卡中的程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了esp32python运行sd卡中的程序相关的知识,希望对你有一定的参考价值。

esp32python运行sd卡中的程序:首先要安装 esptool,直接 pip 安装就可以了。之后进入安装路径,运行如下的 cmd 命令,COMX 替换为你的端口号。
注意!烧录 eFuses 是不可逆的,务必提前确定你的模组使用的 3.3V Flash。 官方文档链接
会输出如下日志:
完成后你可以使用如下命令检查 efuse 的状态:
设置完成后将 GPIO2 和 GPIO12 上拉到 3.3V,我使用的是 5.1K的电阻,因为手头没找到 10K 的,阻值大小数量级差不多即可。
然后就可以操作 sd 卡上的文件了
注意拔出卡前要关闭文件, 卸载 SD 卡,否则有可能损坏文件系统。
写入:0.86 Mbyte/S
读取:1.26 Mbyte/S
注意,在使用 SD 卡,OLED 等有较大电流消耗的情况下启动 Wifi 可能会遇到 Brownout detector was triggered 错误,触发了电压保护,此时更换短一点,质量好一点的usb线,使用供电更充足的usb3.0口可以解决。
参考技术A 要在esp32板子上使用python运行sd卡中的程序,你需要先在esp32板子上安装python环境。

一种方法是使用esp-idf(esp32开发框架)构建和安装python环境。esp-idf提供了为esp32板子编译和安装python的工具,你可以使用这些工具来构建和安装python环境。

然后,你可以在sd卡中放置你想要运行的python程序,并使用python解释器来运行这个程序。例如,你可以使用以下命令来运行sd卡中名为"my_program.py"的程序:

python /sdcard/my_program.py
请注意,这里假设你已经将sd卡插入了esp32板子,并且sd卡的路径为"/sdcard"。

如果你不熟悉python或esp32板子,建议你先学习相关知识再尝试运行sd卡中的程序。
参考技术B 此处讨论的是使用 SD 卡接口的使用,相对速度较快,不讨论以 SPI 方式的使用。
直接使用会出现 CRC 校验错误的问题,报 0x107 或者 0x109 错误。 见此Issues 。
开启芯片的内置上拉也工作不稳定,偶尔会工作正常,但大部分还是出现了错误。
官方建议采取 10K 的外置上拉,但是会在 GPIO2 和 GPIO12 上会出现冲突。
首先要安装 esptool,直接 pip 安装就可以了。之后进入安装路径,运行如下的 cmd 命令,COMX 替换为你的端口号。
注意!烧录 eFuses 是不可逆的,务必提前确定你的模组使用的 3.3V Flash。 官方文档链接
会输出如下日志:
完成后你可以使用如下命令检查 efuse 的状态:
设置完成后将 GPIO2 和 GPIO12 上拉到 3.3V,我使用的是 5.1K的电阻,因为手头没找到 10K 的,阻值大小数量级差不多即可。
然后就可以操作 sd 卡上的文件了
注意拔出卡前要关闭文件, 卸载 SD 卡,否则有可能损坏文件系统。
写入:0.86 Mbyte/S
读取:1.26 Mbyte/S
注意,在使用 SD 卡,OLED 等有较大电流消耗的情况下启动 Wifi 可能会遇到 Brownout detector was triggered 错误,触发了电压保护,此时更换短一点,质量好一点的usb线,使用供电更充足的usb3.0口可以解决。
参考技术C 本教程制作于Windows系统。使用的是这块ESP32开发板。
所需软件
为适用本教程,需在机器上安装Python。本教程是用Python 2.7创建的,但更高版本的Python也应该可以制作。
此外,要用ESP32烧录MicroPython二进制文件还需借助一个名为esptool的软件。本文撰写之际,该软件稳定版为1.x,尚不支持ESP32 [2]。因此无法通过pip或其他Python包管理器安装该软件,需手动完成。
因此,必须从此处下载esptool的最新版本。本教程所用版本为v2.0beta2。
esptool源代码下载完毕后,将其解压缩到文件夹。该文件夹内有一个setup.py文件。假设已经安装了Python,则导航到解压后的文件夹并输入以下命令:1 python setup.py install
此操作将在系统上安装esptool。如果你愿意的话,可从该软件的存储库中查看手动安装说明。
最后,需要用到MicroPython软件的二进制文件。可从此处获取该文件。下载并保存在文件夹中,之后会派上用场。求您让我通过行吗?如果可以的话,谢谢,祝您好运好人一生平安
参考技术D 本教程制作于Windows系统。使用的是这块ESP32开发板。

所需软件

为适用本教程,需在机器上安装Python。本教程是用Python 2.7创建的,但更高版本的Python也应该可以制作。

此外,要用ESP32烧录MicroPython二进制文件还需借助一个名为esptool的软件。本文撰写之际,该软件稳定版为1.x,尚不支持ESP32 [2]。因此无法通过pip或其他Python包管理器安装该软件,需手动完成。

因此,必须从此处下载esptool的最新版本。本教程所用版本为v2.0beta2。

esptool源代码下载完毕后,将其解压缩到文件夹。该文件夹内有一个setup.py文件。假设已经安装了Python,则导航到解压后的文件夹并输入以下命令:1 python setup.py install

此操作将在系统上安装esptool。如果你愿意的话,可从该软件的存储库中查看手动安装说明。

最后,需要用到MicroPython软件的二进制文件。可从此处获取该文件。下载并保存在文件夹中,之后会派上用场。

如何以编程方式备份​​ SD 卡中的 sqlite 文件?

【中文标题】如何以编程方式备份​​ SD 卡中的 sqlite 文件?【英文标题】:How can I backup sqlite file in SD Card programmatically? 【发布时间】:2012-09-11 11:12:50 【问题描述】:

当您使用模拟器时,您的 sqlite 文件存储在主应用程序文件夹附近的文件夹中,您可以下载它。但是在没有 root 权限的设备中无法访问此功能。如何以编程方式备份​​ SD 卡中现有的 sqlite 文件

我想在我的应用程序中有一个按钮,用于将此文件存储在我的 SD 卡中的特殊路径中。有可能吗?

谢谢,

【问题讨论】:

类似问题***.com/questions/1995320/… 它没有说明如何将现有数据库复制到sd卡 【参考方案1】:

你可以试试这个,为我工作,记得在你的清单中获得 WRITE_EXTERNAL_STORAGE 权限:

// Copy to sdcard for debug use
    public static void copyDatabase(Context c, String DATABASE_NAME) 
        String databasePath = c.getDatabasePath(DATABASE_NAME).getPath();
        File f = new File(databasePath);
        OutputStream myOutput = null;
        InputStream myInput = null;
        Log.d("testing", " testing db path " + databasePath);
        Log.d("testing", " testing db exist " + f.exists());

        if (f.exists()) 
            try 

                File directory = new File("/mnt/sdcard/DB_DEBUG");
                if (!directory.exists())
                    directory.mkdir();

                myOutput = new FileOutputStream(directory.getAbsolutePath()
                        + "/" + DATABASE_NAME);
                myInput = new FileInputStream(databasePath);

                byte[] buffer = new byte[1024];
                int length;
                while ((length = myInput.read(buffer)) > 0) 
                    myOutput.write(buffer, 0, length);
                

                myOutput.flush();
             catch (Exception e) 
             finally 
                try 
                    if (myOutput != null) 
                        myOutput.close();
                        myOutput = null;
                    
                    if (myInput != null) 
                        myInput.close();
                        myInput = null;
                    
                 catch (Exception e) 
                
            
        
    

【讨论】:

【参考方案2】:

你可以试试下面的代码,

String path = Environment.getExternalStorageDirectory().toString() + "/path";
File folder = new File( path );
if (!folder.exists()) 

     folder.mkdirs();


File dbfile = new File( path + "/database.db" ); 
if ( !dbfile.exists() )

    dbFile.createFile();

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);

【讨论】:

这不会复制现有数据库。它在此路径中创建 @breceivemail 根据您之前的问题标题如何以编程方式将 sqlite 文件存储在 SD 卡中?,它完全满足要求。【参考方案3】:

你可以试试这个来复制一个文件:

public void copyFile(File in, File out) 
        String DialogTitel = getString(R.string.daten_wait_titel);
        String DialogText = getString(R.string.kopiervorgang_laeuft);
        try 
            // Dialogdefinition Prograssbar
            final ProgressDialog dialog = new ProgressDialog(this) 
                @Override
                public boolean onSearchRequested() 
                    return false;
                
            ;
            dialog.setCancelable(false);
            dialog.setTitle(DialogTitel);
            dialog.setIcon(R.drawable.icon);
            dialog.setMessage(DialogText);
            dialog.show();
            new Thread(new MyCopyThread(in, out)) 
                @Override
                public void run() 
                    try 
                        FileChannel inChannel = new FileInputStream(
                                MyCopyThread.in).getChannel();
                        FileChannel outChannel = new FileOutputStream(
                                MyCopyThread.out).getChannel();
                        try 
                            System.out.println("KOPIEREN");
                            inChannel.transferTo(0, inChannel.size(),
                                    outChannel);
                            if (inChannel != null)
                                inChannel.close();
                            if (outChannel != null)
                                outChannel.close();
                            setCopyError(false);
                         catch (IOException e) 
                            setCopyError(true);
                            // throw e;
                         finally 
                            if (inChannel != null)
                                inChannel.close();
                            if (outChannel != null)
                                outChannel.close();
                        
                        dialog.dismiss();
                        // Abschlussarbeiten
                        if (useExternalSD == true) 
                            // Externe DB
                            moveDBtoExternFinish();
                         else 
                            // Interne DB
                            moveDBtoInternFinish();
                        
                        moveDBFinishHandler.sendMessage(moveDBFinishHandler
                                .obtainMessage());
                     catch (Exception ex) 

                    
                
            .start();
         catch (Exception exx) 

        

    

这是获取内部数据库文件名的代码:

File interneDB = getApplicationContext().getDatabasePath(MY_DB_NAME);

将 MY_DB_NAME 替换为您的数据库名称

【讨论】:

以上是关于esp32python运行sd卡中的程序的主要内容,如果未能解决你的问题,请参考以下文章

Arduino ESP32 Web服务器从microSD卡读取

基于arduino的ESP32 学习笔记LVGL文件系统移植,中文字库和图片显示

基于arduino的ESP32 学习笔记LVGL文件系统移植,中文字库和图片显示

基于arduino的ESP32 学习笔记LVGL文件系统移植,中文字库和图片显示

基于arduino的ESP32 学习笔记LVGL文件系统移植,中文字库和图片显示

ESP32 下 micropython 使用 SD卡