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文件系统移植,中文字库和图片显示