MicroPython 是 Python 编程语言的轻量级版本,专为编程微控制器、SOC 和其他嵌入式系统设备而开发。它的创建是为了使开发人员能够利用Python的“易于学习和使用”的特性进行嵌入式系统开发。使用Python现在是大多数学校的主要介绍性语言,并且它是世界上最流行和广泛使用的编程语言之一,通过 micro-python,许多 Python 用户能够规避与使用 C 和 C++ 相关的压力陡峭的学习曲线对微控制器进行编程。他们可以立即开始使用他们多年来获得的知识来访问低级硬件,就像使用其他语言一样。Micro-python 特别是 Python 3 的精简实现,因此与 python 3 的语法兼容。
虽然 MicroPython 在嵌入式系统开发方面的普及程度还不如 C 和 C++,但随着越来越多的微控制器、IDE 和开发板支持它的使用,它的普及程度一直在增加。在今天的教程中,我们将研究可以使用 MicroPython 为其开发固件的此类板之一。
对于今天的教程,我们将研究使用 MicroPython 开发 ESP32 的代码。
我们将首先看看为什么 MicroPython 对 ESP32 有好处,并通过为 MicroPython 设置 ESP32 并在 ESP32 上使用 MicroPython 上传闪烁草图来工作。
为什么选择 MicroPython?(MicroPython 与 Arduino C)
对 ESP32 进行编程的一种经过充分验证、最简单的方法是使用 Arduino IDE这意味着使用 Arduino 版本的 C 或 C++。几十年来,C 和 C++ 一直是嵌入式系统开发中最流行的两种语言,而 Arduino 版本的语言使它变得更加简单,由于易于开发代码,因此它在制造商和爱好者中很受欢迎。除此之外,Arduino 拥有世界上最大的技术社区之一,社区每天都会发布新库、软件修复、新板支持等。所有这些使它成为编程嵌入式系统板的强大工具。可以附加到 Arduino C 的唯一真正限制是它只能在 Arduino IDE 中工作。由于 IDE 受到限制并且缺少一些在开发大型代码库时可能真正有用的功能,因此 Arduino C 并不是最有效的。
另一方面,MicroPython相对较新。虽然它的用户社区正在增长,随着对更多平台的支持被发布,它的实力无法与 Arduino 相提并论。从好的方面来说,MicroPython 本质上是 Python 的精简版本,Python 是世界上最流行的编程语言之一,因此,任何 MicroPython 社区无法解决的问题都可以从一般的 Python 社区中汲取灵感。
除了社区支持外,MicroPython 还具有某些功能,使其高于 Arduino 类。REPL就是其中一项功能。REPL 代表读取-评估-打印。此功能允许您连接到板并快速执行代码,而无需编译或上传整个代码。因此,您可以在开发代码时测试代码的每个部分。
无论您为您的项目选择这两个中的哪一个,请确保最适合您的。有了这些,让我们开始使用 ESP32 和 MicroPython 构建 Blink 示例。
所需组件
要构建眨眼示例,我们将需要以下组件;
DOIT ESP32 DevKit v1 (1)
一个 LED (1)
100 欧姆电阻 (1)
跳线
面包板 (1)
您可以使用任何其他基于 ESP32 的开发板代替 DOIT ESP32 DevKit V1,并且您可以选择使用板载 LED,这意味着您只需要 ESP32 开发板即可完成本教程。以前,我们使用 Arduino IDE 编程使 ESP32 LED 闪烁。
除了硬件组件,我们还需要像 Thonny IDE这样的软件
有关此软件的更多信息将在本文后面讨论。
原理图
使用ESP32 和 MicroPython 来闪烁 LED项目的原理图很简单。你已经在 Blink 项目中看到过无数次了。如下图所示连接组件。
后面的部分包含我们需要做的一些安装和设置,以便能够使用 MicroPython 轻松编程 ESP32。
使用 MicroPython 固件刷新 ESP32 板
我们需要做的第一件事是使用 MicroPython 固件刷新我们的 ESP32。此过程类似于使用 NodeMCU 固件刷新基于 ESP-12e 的板。
步骤1:
我们首先从MicroPython 下载页面下载最新 MicroPython 固件的 bin 文件。您将不得不根据适合您的方式在 3 个主要选项之间进行选择。
稳定的固件版本
每日固件构建
支持 SPIRAM 的每日固件构建
如果您刚开始使用 MicroPython,最好的选择是使用稳定的固件版本。如果您是一名高级、经验丰富的 MicroPython ESP32 用户,并且希望密切关注开发并帮助测试新功能,那么我们提供每日构建。如果您的开发板支持 SPIRAM,您可以使用标准固件或支持 SPIRAM 的固件,在后一种情况下,您将可以访问更多用于 Python 对象的 RAM。
一直向下滚动到您拥有 ESP32 板固件的位置,然后根据您使用的板类型选择您想要的那个。
第2步:
下载完成后,下一步是使用固件刷新您的电路板。为此,您需要将主板置于引导加载程序模式,然后使用工具将固件从 PC 复制到主板。
将您的电路板置于引导加载程序模式的确切过程在很大程度上取决于特定的电路板,您需要参考其文档了解详细信息。幸运的是,大多数电路板都有一个 USB 连接器、一个 USB 串行转换器以及以特殊方式连接的 DTR 和 RTS 引脚,因此部署固件应该很容易,因为所有步骤都可以自动完成。
对于 DOIT DevKit,您只需要在即将刷机时按下启动按钮即可。
要使用 MicroPython 固件刷新 ESP32,我们将使用esptool.py作为我们的复制工具。
esptool.py 需要在您的计算机上安装 Python 2.7、Python 3.4 或更新的 Python。我们推荐使用Python 3.7.X,可以从Python 的网站下载。
安装 Python 3 后,您可以转到官方 esp存储库并下载最新的稳定版本 esptool.py 或打开终端窗口通过 pip 安装它。
要通过 pip 安装,请打开终端窗口并运行:
点安装 esptool
如果上述方法不起作用,请将其修改为以下任何命令,然后重试。
pip3 install esptool
python -m pip install esptool
pip3 install esptool为我工作。安装完成后,您的终端应如下图所示。
您现在应该能够通过在终端中输入命令esptool.py来启动 esptool。跑:
esptool.py
如果您的安装顺利,您应该会看到如下图所示的一堆消息。
第 3 步:
为获得最佳效果,建议先擦除设备的整个闪存,然后再安装新的 MicroPython 固件。为此,请按住 ESP32 上的启动/闪存按钮并运行命令;
esptool.py --chip esp32 擦除闪存
一旦该过程开始,您就可以移开您的手。ESPtool将自动识别您的ESP32所在的端口。
完成后,您现在应该会看到与此类似的屏幕。
如果连接后卡在点上,则表示您的主板未处于启动/闪存模式,您需要重试。
第4步:
擦除完成后,您现在可以通过运行命令用新固件刷新电路板;
esptool.py --chip esp32 --port 《enter_the_serial_port_to_which_your_board_is_connected》 write_flash -z 0x1000 《location_of_the_bin_file》
用您的串行端口和我们之前下载的 bin 文件的位置填充固件中的位置。为方便起见,您可以将目录更改为与 bin 文件相同的文件夹,因此您只需输入文件名作为位置。例如
esptool.py --chip esp8266 --port COM4 write_flash --flash_mode dio --flash_size 检测0x0 esp32-ppp-fix.bin
完成此操作后,您应该会看到说明您的开发板已成功刷入 MicroPython 固件,并且您应该能够使用任何 python IDE 对开发板进行编程。
安装 Thonny IDE 以编程 ESP32
固件启动后,我们需要做的下一件事是安装 Python IDE。
IDE 提供了一种为您的项目开发和管理代码的简单方法。存在相当多的支持 MicroPython 的 python IDE,包括 Mu、thonny、UPyCraft 等 IDE,您可以为您的项目选择其中任何一个。对于今天的教程,我们将使用Thonny。Thonny在制造商中非常受欢迎,它作为 Raspberry Pi 的 Raspbian 操作系统上的 Python 开发环境之一而获得了额外的分数。我假设大多数人都会因为这个因素而熟悉它,因此它在本教程中的用途。从这里的官方网页下载 thorny 。
要在棘手的嵌入式系统设备上编程,需要将解释器设置为 MicroPython。您可以通过转到工具 》 选项 》 并选择一个解释器来执行此操作。您应该会看到一个类似于下图中的窗口。选择要用于运行代码的 MicroPython,然后选择您的开发板所连接的端口。
完成此操作后,您现在就可以使用 IDE 对电路板进行编程了。
带有 MicroPython 的 ESP32 闪烁 LED 程序
Blink 被认为是硬件的 hello world,其想法基本上是通过时间延迟来“打开”和“关闭” LED,因此,我无法向您展示 MicroPython 的强大功能,但是我相信这是一个足够好的第一个 MicroPython 项目。
虽然 MicroPython 没有像 Python 中通常提到的那样提供完整的 Python 库或模块,但它提供了额外的库,允许它在低级别与硬件交互以控制 GPIO 并与通信接口交互。这些模块之一是机器模块。机器模块中的功能允许对嵌入式系统上的 CPU、定时器、总线等硬件块进行直接且不受限制的访问和控制。它是您肯定会在所有 micropython 项目中使用的一个模块。
要跳入代码,请创建一个新文件,并将其保存为main.py。每次打开运行 MicroPython 的电路板时都会加载 main.py。就像 Arduino Sketch 中的循环函数一样。使用任何其他名称保存它是可以的,因为当您指示它上传到设备时,IDE 会自动将其重命名为main.py 。
我们首先导入要用于脚本的模块,在我们的例子中是机器和时间模块。
从机器导入 Pin 从时间导入睡眠
Pin 帮助我们处理特定的 GPIO,而 sleep 帮助我们引入暂停,例如 Arduino 中的delay()函数。
完成后,我们将引脚状态设置为类似于我们使用 Arduino pinMode() 函数所做的输出。
LED = 引脚(2,引脚.OUT)
接下来,我们编写while 循环。MicroPython 中 while 循环的配置类似于 Arduino 上的 void loop() 函数。在这里,我们将 LED “打开”0.5 秒,然后将其“关闭”0.5 秒。
while True: led.high() sleep(0.5) led.low() sleep(0.5)
就这样。该示例的完整代码如下所示。
从机器导入 Pin 从时间导入睡眠 LED = 引脚(2,引脚.OUT) while True: led.high() sleep(0.5) led.low() sleep(0.5)
代码完成。通过转到标题栏上的“设备”并选择“将当前脚本作为 main.py 脚本上传”选项将其上传到您的开发板。
您应该看到您的电路板出现 LED 间歇性闪烁。
与 Arduino C 相比,MicroPython 可以说更容易使用,但它可能需要一段时间才能充分发挥其潜力,因为它仍未达到与 C 和 C++ 相关的嵌入式系统开发支持水平。然而,考虑到最近将机器学习、计算机视觉和其他深度技术与固件开发相结合的趋势,MicroPython 可能只是嵌入式系统开发的未来。
从机器导入 Pin
从时间导入睡眠
LED = 引脚(2,引脚.OUT)
while True:
led.high()
sleep(0.5)
led.low()
sleep(0.5)
评论
查看更多