- MicroPython 可以在许多现代 Arduino 类开发板(ESP32、RP2040、STM32、Renesas RA)上运行,但实际上无法在经典的基于 AVR 的 Uno 设备上运行。
- MicroPython GitHub 和服务器上的官方固件、端口和每日构建版本简化了兼容的 Arduino 和 NodeMCU 板的烧录。
- 丰富的 MicroPython 包索引提供了经过测试的传感器、显示器、IO 扩展器和 Arduino 专用模块(如 Modulinos 和 Nicla Sense Env)的驱动程序。
- 将 MicroPython 和 Arduino 硬件结合起来,可以实现快速的、基于 REPL 的原型设计,并通过 Arduino IoT Cloud Python 客户端实现云集成。
如果你已经熟悉“常规”Python,而刚刚接触到MicroPython,那么你并不孤单。许多开发者在开始接触 Arduino、ESP32 或 Raspberry Pi Pico 等微控制器时,都会有同样的发现。乍一看,它们的语法几乎与 CPython 完全相同,但实际上却出现了新的模块、硬件专用类,以及在开发板上烧录和运行代码的不同方式。
本指南汇集了排名靠前的英文资源中关于 MicroPython 和 Arduino 的关键信息,并将其与实际应用场景相结合。您将看到官方 MicroPython 代码的存放位置,哪些 Arduino 兼容板可以实际运行 MicroPython,有哪些驱动程序和库可用,以及如果您拥有 Arduino 风格的板(例如基于 ESP 的 NodeMCU、Nano ESP32、Nano RP2040 Connect 或 Portenta),该如何入门。
什么是 MicroPython 以及它与 Arduino 的关系
MicroPython 是 Python 语言的一个精简实现,旨在直接在微控制器上运行。MicroPython 并非运行在完整的桌面操作系统上,而是运行在内存和闪存有限的小型芯片上,直接在设备上提供 Python 提示符。其语言核心与 CPython 非常接近,因此您现有的 Python 知识大部分都能沿用,同时您还可以使用一些额外的模块,例如: , 网络 or s 与引脚、传感器、总线和存储设备通信。
与 Arduino 的关系主要体现在硬件和 API 上,而不是传统的 Arduino“C++ 草图”环境。MicroPython 针对特定的开发板和芯片(端口),例如 ESP32, ESP8266, RP2040, nRF51/nRF52, STM32, 三星, 瑞萨电子等等。许多现代的 Arduino 品牌开发板正是基于这些微控制器构建的,这使得它们与 MicroPython 兼容。
基于 ATmega328P 8 位 AVR 微控制器的经典 Arduino Uno 没有官方的 MicroPython 移植版。Arduino Uno 的闪存和内存容量实在有限,MicroPython 虚拟机也不是为这种小型芯片设计的。这就是为什么你会看到社区里有人问“如何在 Arduino Uno 上运行 MicroPython?”,而简短而诚实的答案是:通常情况下你做不到,即使你设法做到了,功能也会非常有限,而且不会得到官方支持。
Arduino 和 MicroPython 真正交汇的地方在于那些使用 32 位 MCU 且资源充足的新型“Arduino”开发板。诸如此类的电路板 Arduino Nano ESP32, Arduino Nano RP2040 连接, Arduino Nano 33 BLE感应, Arduino Giga, 波塔塔H7, Portenta C33, 尼克拉视觉, Nicla Sense Env 和 Opta WiFi 它们运行在 ESP32、RP2040、STM32H7、瑞萨 RA6M5 等类似芯片上。这些 MCU 都有官方或正在积极开发的 MicroPython 移植版本。
官方 MicroPython 源代码、构建和支持的移植版本
MicroPython 采用开源开发模式,使用 Git 进行版本控制,其官方代码库位于 GitHub 上,网址为 github.com/micropython/micropython该代码库包含了完整的解释器源代码、核心库以及适用于各种微控制器系列的移植版本。如果您需要查看内部结构或构建自己的固件镜像,这里就是您应该访问的地方。
该项目提供最新稳定版本的完整源代码,以可下载压缩包的形式分发。这些版本将解释器、库和端口打包在一个快照中,您可以自行编译。对于那些想要更进一步的用户,还有…… GitHub 仓库的每日快照 可从 MicroPython 服务器获取。这些快照通常会省略 Git 子模块,但会跟踪当前的开发状态,如果您正在测试新功能或提交补丁,这将非常有用。
除了源代码之外,MicroPython 还提供适用于各种开发板和架构的自动构建固件镜像。这些固件每天都会针对不同的端口生成,包括:
- 处女地
- cc3200
- ESP32 (包括 esp32c2、esp32c3、esp32c5、esp32c6、esp32p4、esp32s2、esp32s3 等变体)
- ESP8266
- mimxrt (i.MX RT)
- NRF (nRF51、nRF52、nRF91)
- 瑞萨电子 (RA4M1、RA4W1、RA6M1、RA6M2、RA6M5 等)
- rp2 (RP2040、RP2350)
- samd (SAMD21,SAMD51)
- stm32 (STM32F0、F4、F411、F7、G0、G4、H5、H7、L0、L1、L4、U5、WB、WL)
这些每日构建版本通常会按功能、供应商和MCU进行分组和筛选,因此您可以快速找到与您的开发板匹配的固件映像。功能筛选器包括以下功能: 音频编解码器, BLE, 电池充电, CAN, 相机, DAC, 展示, 双核, 环境传感器, 以太网(EtherNet), 外部Flash, 外部内存, 羽毛, IMU, JST‑PH/JST‑SH, 洛拉, 全向麦, 供电, RGB LED, SD卡, 安全元素, USB/USB-C, WiFi, 的microSD和 mikroBUS此外,还有一个供应商筛选器,例如,您可以将结果范围缩小到特定供应商。 Arduino品牌的电路板.
一些Arduino开发板被明确列出,或者通过它们的MCU被隐式涵盖。在与 MicroPython 构建相关的 Arduino 名称中,你会发现:
- GIGA
- Arduino Nano 33 BLE感应
- Arduino Nano ESP32
- Arduino Nano RP2040 连接
- Arduino Nicla Vision
- Arduino Nicla Sense 环境 (通过特定库提供服务)
- Arduino Opta WiFi
- Arduino Portenta C33
- Arduino Portenta H7 (通常被称为 envie_m7 变体)
由于固件镜像针对每个端口和开发板进行构建,因此第一步始终是确定您的 Arduino 开发板所使用的确切 MCU 及其版本。例如,Arduino Nano ESP32 映射到 ESP32 端口,而 Nano RP2040 Connect 则使用端口。 rp2 港口。 Portenta H7 属于 stm32 高端家庭,而 Portenta C33 则倚靠在 瑞萨电子 端口。匹配这些信息可以确保您刷入正确的 MicroPython 二进制文件。
MicroPython 能在所有 Arduino 开发板上运行吗?
这是那些在使用 Arduino 生态系统之后才接触 MicroPython 的人最常问的问题之一。简而言之: MicroPython 并非支持所有 Arduino 开发板但它确实支持许多使用 32 位 MCU 且具有足够内存和闪存的新型设备。
对于像 Uno、Nano(经典款)、Mega 或 Leonardo 这样的老式 AVR Arduino 开发板来说,MicroPython 实际上并不适用。这些开发板依赖于资源有限的 8 位 AVR 微控制器。虽然社区中已经出现了一些实验性的移植版本和极其精简的分支,但官方的 MicroPython 项目专注于功能更强大的 32 位架构,因此您不应期望能获得适用于 Uno 的完善且由官方维护的 MicroPython 固件。
相比之下,NodeMCU 和类似的 ESP8266/ESP32 开发板与 MicroPython 非常匹配,并且有积极的技术支持。NodeMCU 通常使用 ESP8266 or ESP32 这两款芯片都有稳定且流行的 MicroPython 移植版本。将 MicroPython 烧录到 NodeMCU 中,可以让你以非常友好的方式使用 Python 语法进行支持 WiFi 的物联网开发,而无需使用 Arduino 的 C++ 方言。
对于 Arduino 品牌的硬件,请重点关注那些与主流 MicroPython 开发板使用相同 MCU 的型号。这涵盖了一个广泛的家族:
- Arduino Nano ESP32 — 基于 ESP32;使用 esp32 端口。
- Arduino Nano RP2040 连接 — 基于 Raspberry Pi RP2040;使用 rp2 端口。
- Arduino Nano 33 BLE感应 — Nordic nRF52;通过 nrf 端口支持。
- Arduino Giga — 高端 STM32H7 MCU;通过 stm32 端口供电。
- Arduino Portenta H7 — STM32H7 双核;通过 stm32 提供支持。
- Arduino Portenta C33 — Renesas RA 微控制器;连接到 renesas-ra 端口。
- Arduino Nicla Vision 以及相关的 Nicla 板——围绕受支持的 MCU 构建,并使用专门的 MicroPython 驱动程序进行处理。
- Arduino Opta WiFi —面向工业领域,但基于受支持的STM32部件构建。
如果你同时拿着 Arduino Uno 和 NodeMCU,那么只有 NodeMCU 才是真正适合运行 MicroPython 的首选设备。对于 Uno 来说,更务实的做法是继续使用 Arduino C++,或者升级到更现代、对 MicroPython 友好的开发板,这些开发板仍然可以很好地融入 Arduino 生态系统,例如 Nano ESP32 或 Nano RP2040 Connect。
您是否需要新的 IDE 或额外的 MicroPython 工具?
MicroPython 开发与编译 Arduino 程序的感觉截然不同,但你并不一定需要一个重量级的全新 IDE。由于 MicroPython 在板上运行解释器,因此您通常使用纯文本 .py 文件和串行 REPL,而不是编译后的 .hex 或 .bin 草图。
基本需求包括:一种将固件刷写到开发板的方法,以及一个用于上传 Python 文件并与 REPL 交互的工具。对于刷机操作,通常需要依赖厂商提供的工具或命令行实用程序,例如 esptool.py (适用于 ESP8266/ESP32),或者您可以使用开发板的引导加载程序支持(例如,RP2040 使用 UF2,STM32 使用 DFU 等)。许多 MicroPython 网页和文档都提供了每个端口的具体烧录说明。
对于编辑和文件传输,您可以继续使用您喜欢的代码编辑器,只需添加一个支持 MicroPython 的辅助函数即可。常见选项包括:
- Thonny — 一个简单的 Python IDE,内置 MicroPython 支持、串行 REPL 和文件管理功能。
- 穆编辑器 — 一款对初学者友好的编辑器,支持 MicroPython 和 CircuitPython。
- VS代码 通过扩展——您可以将常规 Python 支持与处理 MicroPython 上传/REPL 的插件一起使用。
- ampy / rshell / mpremote — 用于上传脚本、列出文件以及与设备上的 REPL 进行交互的命令行工具。
在某些 Arduino 品牌的开发板上,你还会发现一些集成方案,让你在编写 MicroPython 代码的同时,也能与 Arduino 世界保持紧密联系。某些工具和库允许您: 使用 Arduino 式结构来构建你的 MicroPython 程序 建立() 和 循环()并公开熟悉的功能,例如 数字写入 or 模拟读取 在幕后,这让长期使用 Arduino 的用户感到更加熟悉,即使其底层运行时环境是 MicroPython。
实际上,切换到 MicroPython 通常意味着您将停止使用传统的 Arduino IDE 来进行这些项目,转而采用面向 Python 的工作流程。也就是说,你“电路板 + 引脚 + 库 + 示例”的思维模型仍然保持不变,经过一两天的摸索,MicroPython 编辑器 + REPL 的组合感觉非常自然。
入门指南:从 Arduino Uno 和 NodeMCU 到 MicroPython
如果你的目标是在 Arduino Uno 上运行 MicroPython,你很可能会遇到很大的阻碍。对于 Uno 的 ATmega328P 来说,MicroPython 解释器体积过大,而且官方项目也没有提供维护的移植版本。你或许能找到一些实验性的分支或高度精简的衍生版本,但它们无法像标准的 MicroPython 环境那样运行,许多库也无法兼容。对大多数人来说,务实的做法是接受 Uno 是一款“经典的 Arduino C++”开发板,并选择其他设备进行 MicroPython 实验。
然而,使用NodeMCU(ESP8266或ESP32系列),您可以轻松上手MicroPython。具体步骤因芯片而异,但总体流程如下:
- 1. 下载相应的 MicroPython 固件 请从 MicroPython 下载页面或每日构建服务器下载适用于 ESP8266 或 ESP32 的移植版本。请确保构建版本与您的闪存容量和开发板系列相匹配。
- 2. 擦除并刷新电路板 使用 esptool.py 从您的计算机中执行(或等效操作)。这将清除现有的固件(通常是 NodeMCU Lua 或 Arduino 程序),并安装 MicroPython。
- 3. 连接串口终端或 REPL 工具 (例如 Thonny、Mu、mpremote 或通用串口控制台)以正确的波特率连接。您应该会看到熟悉的画面。 >>> 如果一切顺利,Python 会弹出提示。
- 4. 创建并上传脚本 命名 启动.py 和 主文件或者您想要导入的任何其他模块。这些模块将自动运行,或者可以交互式导入。
同样的模式也适用于许多兼容 MicroPython 的 Arduino 品牌开发板,唯一的真正区别在于具体的烧录工具和引导加载程序行为。例如,基于 RP2040 的 Arduino 将使用 UF2 引导加载程序(拖放 .uf2 文件),而 Portenta H7 将依赖于 STM32 引导机制或制造商提供的实用程序。烧录完成后,Python 部分看起来非常相似: 机器.引脚 对于 GPIO, 机器.I2C 例如传感器等等。
Arduino 生态系统中另一个便利之处在于它提供了一个 MicroPython 辅助库,让你能够以类似草图的方式编写代码。该库提供类似 Arduino 的 API,甚至还提供了 MicroPython 实现。 建立() 和 循环()例如,你可以编写一些概念上类似于 Arduino 程序的代码,但其底层运行在 MicroPython 运行时环境中,并使用 Python 的语法和语义。这使得那些拥有多年 Arduino 使用习惯的人能够更顺畅地过渡到 MicroPython。
适用于 Arduino 兼容板的 MicroPython 软件包和库
MicroPython 在 Arduino 类开发板上的最大优势之一是其不断壮大的硬件驱动程序和辅助库生态系统。MicroPython 社区维护着一个 MicroPython 包索引 列出了可重复使用的模块,这些模块可以安装或复制到支持的电路板上,其中许多模块在 Arduino 产品上经过了明确的验证。
本索引的贡献指南描述了如何提交新软件包、如何正确记录软件包信息以及如何使用相关功能对其进行标记。这样一来,当您搜索传感器或显示器时,就可以快速找到已知可与特定微控制器端口甚至特定 Arduino 板配合使用的驱动程序。
在众多可用的库中,有些是专门为 Arduino 硬件设计的,而另一些则是通用驱动程序,恰好也能在 Arduino 品牌的开发板上完美运行。例如,有一个 用于控制 Arduino Modulinos 的 MicroPython 库这些模块化插件可以与 Arduino 硬件紧密集成。另一个值得注意的软件包是…… 适用于 Arduino Nicla Sense 环境的 MicroPython 库重点研究了该电路板的环境感知能力。
此外,还有一个出色的辅助工具,它使用户能够轻松地使用类似 Arduino 的模式(例如 setup/loop)和熟悉的 API 编写代码,同时仍然使用 MicroPython。该软件包有效地弥合了“Arduino 草图”和 Python 模块之间的概念鸿沟,使用户能够保留诸如调用之类的肌肉记忆。 数字写入 同时实际利用了 MicroPython 的运行时和 REPL。
除了这些 Arduino 特有的库之外,该生态系统还包含大量传感器、显示、存储和实用程序驱动程序,这些驱动程序支持在常见的 MCU 和开发板上使用 MicroPython。其中许多产品已经在诸如以下电路板上进行了测试: arduino:esp32:nano_nora,各种 ESP32S3 设备和高端设备 mbed_portenta 变体。验证说明通常会具体说明所使用的 MicroPython 版本和开发板 ID,因此您可以确定该库并非理论上的。
您可以使用的值得注意的 MicroPython 驱动程序和实用程序
MicroPython 包索引包含丰富的驱动程序,涵盖环境传感器、显示控制器、I/O 扩展器、存储、通信协议等等。如果您在兼容的 Arduino 开发板上构建项目,那么您所需的硬件很可能已经有现成的驱动程序。
环境传感器和气体传感器得到了充分体现。你会找到一个适用于 MicroPython 的驱动程序。 BME280 传感器(通常与 Pycom 设备一起作为目标设备提及)和另一个用于 BME680 突破,通过沟通 I²C这些驱动程序可以处理温度、湿度、压力和气体读数,让您只需几行 Python 代码即可将 Nano ESP32 或 Nano RP2040 等板连接到环境传感器。
显示控制方面也同样做得非常出色。有适用于 Python 的驱动程序 Holtek HT16K33 该控制器为 Adafruit 0.8 英寸 8×16 LED 矩阵 FeatherWing 或某些 Raspberry Pi Pico 显示屏等设备供电。这些驱动程序同时支持这两种方案。 电路Python 和 微型Python 通过 I²C 接口,它们具有通用性和跨生态系统的可重用性。此外,您还可以获得适用于显示控制器的 MicroPython 驱动程序,例如 SH1106 和 SH1107用于各种OLED面板以及封装中 HD44780基于 I²C 驱动的字符液晶显示器(1602 和 2004 型号)。
对于模数转换和 I/O 扩展,有多种功能强大的软件包可供选择。有一个适用于 MicroPython 的驱动程序 ADS1x15 一系列ADC,广泛用于增加更高分辨率的模拟输入。另一个库支持该系列ADC。 MCP23017 16 位 I/O 扩展器,带 I2C 接口,可大幅增加 Arduino 类板暴露的数字引脚数量,所有引脚均可通过 MicroPython 控制。
各种LED驱动器封装涵盖视觉反馈和显示功能。你会找到一个用于此的 MicroPython 库。 MAX7219 一款使用SPI和帧缓冲区的8×8 LED矩阵驱动器,以及一款用于……的驱动程序 四段式7段LED显示屏 基于该 TM1637 芯片。还有一个库用于 10段式LED条形图 使用 MY9221 驱动程序,以及用于可寻址 LED 的独立 MicroPython 模块,例如 WS2812B 和 SK6812 树莓派 Pico 上可以使用(通常统称为 NeoPixel)像素。这些像素都能与使用相同 MCU 系列的 Arduino 品牌开发板完美搭配。
通过专用模块支持实时时钟和数据记录等应用场景。一名司机瞄准了 DS3231 RTC 与 AT24C32 EEPROM 结合使用这样一来,即使重启设备,也能轻松保持精确的时间记录,并存储配置信息或小型日志。结合特定端口提供的 SD 卡和 microSD 卡功能,您只需编写 MicroPython 脚本即可搭建强大的数据记录系统。
得益于专用驱动器,非接触式温度传感和电容式输入也变得简单易行。有一个用于此的 MicroPython 库 迈来芯 MLX90614 红外温度传感器,可实现远程温度测量;另一个用于…… MPR121 电容式触摸键盘和扩展板,适用于触摸式用户界面。两者均可通过 I²C 接口无缝集成,并可与兼容 Arduino 的 MicroPython 开发板配合使用。
对于生物识别和音频相关硬件,您可以找到专门的 MicroPython 端口。存在一个用于此的软件包 MAX30102 传感器,一个流行的脉搏血氧仪/心率模块,最初由 SparkFun 的驱动程序支持,现在已适配 MicroPython。音频播放模块由……涵盖。 使用 MicroPython 实现通过 UART 控制 DFPlayer。无需编写大量代码即可轻松播放 MP3。
时序、运动和输入设备都有各自强大的实现方式。一个用于 MicroPython 的驱动程序 旋转编码器 它利用 GPIO 中断和消抖技术,在 Pyboard、Raspberry Pi Pico、ESP8266 和 ESP32 等开发板上提供精确、无抖动的读数。Raspberry Pi Pico 上的伺服控制是通过驱动程序实现的。 脉冲密度调制 (PDM) 或者更简单的基于PWM的封装器,以及一些专注于此的小型辅助类 控制9g舵机 来自 MicroPython。
红外通信由接收器和发射器的一对无阻塞驱动器处理。其中一个库专注于接收红外遥控代码,另一个库则处理“发射器”应用的红外发射。这两个库都设计为非阻塞式运行,因此可以与其他 MicroPython 任务并行运行。
对于热敏打印和显示输出,可以使用 Adafruit 的 Python 热敏打印机库的 MicroPython 版本。该软件包允许您使用 MicroPython 作为控制环境,通过 ESP32 或 RP2040 等开发板驱动热敏收据打印机。
除了硬件驱动程序之外,还有一些实用工具可以大大简化基于 Arduino 的物联网项目。其中一个突出的例子是…… Arduino IoT 云的 Python 客户端 该软件包同时支持 CPython 和 MicroPython。它托管在 GitHub 的 Arduino 组织下,并采用 Mozilla 公共许可证 2.0 授权,允许 MicroPython 设备连接到 Arduino IoT 云平台,以实现遥测、仪表盘和远程控制。该软件包已在以下平台上验证: arduino:mbed_portenta:envie_m7 运行 MicroPython 的平台表明,高端 Arduino 板可以从 Python 运行时无缝集成到 Arduino 的云服务中。
一些显示和输入库最初是围绕 MicroPython 的 Pycom 版本设计的,但仍然能很好地应用于许多 Arduino 类开发板。例如,有一个专为 Pycom 定制的 I2C LCD 字符屏幕接口软件包,以及一个 MicroPython 移植版的…… ucPack 这两个库通常都可以在其他 MicroPython 端口中重复使用或进行调整,前提是底层总线和引脚配置匹配。
为什么值得探索在 Arduino 类硬件上运行 MicroPython
将 MicroPython 的动态、高级特性与种类繁多的 Arduino 兼容硬件相结合,就能得到一个非常灵活的原型开发平台。与其不断重新编译程序,不如进行交互式迭代:打开 REPL(交互式解释器),操作引脚,读取传感器数据,调整逻辑,并立即查看反馈。仅此一项就能大幅缩短业余项目、快速演示甚至专业原型开发的时间。
MicroPython 包生态系统,以及对 Arduino 开发板的明确支持和验证,意味着您几乎无需从头开始编写原始寄存器或复杂的 C 驱动程序。. 诸如 BME280/BME680 之类的传感器库、由 HT16K33、SH1106 或 HD44780 驱动的显示器、MCP23017 之类的 IO 扩展器以及 ModBus TCP/RTU 客户端和主机之类的基础设施组件,所有这些都能帮助你站在社区的肩膀上。
与此同时,Arduino 生态系统也贡献了云集成和精心设计的电路板。. 敬业的 Arduino IoT 云 Python 客户端 这很好地展现了这两个生态系统的交集:你可以在 Portenta 系列开发板上编写 MicroPython 代码,同时还能利用 Arduino 的仪表盘和物联网工具。像 Giga 或 Portenta H7 这样的高端开发板将双核 MCU、以太网、WiFi、BLE、USB-C 等功能集成于一体,所有这些功能都可以通过 MicroPython 固件进行控制。
当然,凡事都有利弊。一些对时序要求极高的底层应用,用 C/C++ 编写经典的 Arduino 程序可能仍然更合适;而像初代 Uno 这样资源非常有限的开发板,也根本不适合 MicroPython。但对于涉及传感器、显示器、连接以及中等实时性需求的众多项目而言,在兼容的 Arduino 硬件上使用 MicroPython,则是一种快速、易用且功能强大的组合。
对于任何熟悉标准 Python 的人来说,在像 ESP32 Nano、RP2040 Connect 或 Portenta 这样的现代 Arduino 类开发板上使用 MicroPython,可以让他们顺利地进入嵌入式开发领域。同时,他们还可以重用自己的语言技能,利用丰富的软件包索引,并充分利用 Arduino 强大且文档齐全的硬件——正是这些硬件最初让 Arduino 如此受欢迎。.