1. 引言
MicroPython 和 CircuitPython 是专门为嵌入式系统优化的 Python 版本,支持在微控制器(MCU)上运行 Python 代码,使得开发者能够使用 Python 轻松编写嵌入式程序,而不需要掌握复杂的 C 语言。
在本篇博客中,我们将介绍:
- MicroPython 和 CircuitPython 的特点
- 适用的硬件平台
- 开发环境的搭建
- 通过一个实际项目(使用 ESP32 控制 LED 和读取传感器数据)展示如何使用它们
2. MicroPython vs CircuitPython
MicroPython 和 CircuitPython 都是针对嵌入式开发的 Python 解释器,但它们有一些不同点:
特性 | MicroPython | CircuitPython |
---|---|---|
开发者 | Damien George | Adafruit |
适用平台 | ESP32, STM32, RP2040, nRF52 等 | Adafruit 开发板(如 Feather、Trinket、Metro)、Raspberry Pi Pico |
文件系统 | 需要手动创建 boot.py 、main.py | 自动创建 code.py |
库支持 | 更接近标准 Python(支持 asyncio) | 适用于 Adafruit 生态系统 |
适用场景 | 适用于大部分 MCU | 适用于 Adafruit 硬件,易上手 |
总结:
- 如果你的硬件是 ESP32、STM32 或其他非 Adafruit 设备 → 选择 MicroPython。
- 如果你使用 Adafruit 开发板或 Raspberry Pi Pico → 选择 CircuitPython。
3. 开发环境搭建
3.1 准备工作
硬件
- 开发板(ESP32、ESP8266、Raspberry Pi Pico、STM32、Adafruit Feather)
- USB 数据线
- 传感器或外设(如 DHT11 温湿度传感器、OLED 显示屏)
软件
- Thonny(适用于 MicroPython & CircuitPython)
- mu Editor(适用于 CircuitPython)
- esptool.py(用于烧录 MicroPython)
3.2 安装 MicroPython
如果你使用 ESP32/ESP8266,需要先刷入 MicroPython 固件:
- 下载 MicroPython 固件:MicroPython 官方下载
- 连接开发板到电脑,使用 esptool 烧录固件:
esptool.py --port /dev/ttyUSB0 erase_flash esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 firmware.bin
- 重新连接开发板,并使用 Thonny 进行代码编写。
3.3 安装 CircuitPython
- 进入 CircuitPython 官网 下载适合开发板的固件。
- 将开发板连接电脑,进入“Bootloader 模式”:
- 按住
BOOT
或RESET
按钮,直到进入 USB 设备模式。 - 在电脑上会显示一个新的磁盘驱动器(如
CIRCUITPY
)。
- 按住
- 拖拽
.uf2
固件到CIRCUITPY
盘,自动重启后即可运行。
4. 示例项目:使用 MicroPython/CircuitPython 控制 LED 和读取传感器
本项目演示:
- 控制 LED 亮灭
- 读取 DHT11 温湿度传感器数据
- 在 OLED 屏上显示信息
4.1 硬件连接
设备 | ESP32 引脚 | Raspberry Pi Pico 引脚 |
---|---|---|
LED | GPIO2 | GP2 |
DHT11 | GPIO4 | GP4 |
OLED (SSD1306) | I2C (SDA=21, SCL=22) | I2C (SDA=GP0, SCL=GP1) |
4.2 代码实现(MicroPython)
控制 LED
from machine import Pin
import time
led = Pin(2, Pin.OUT) # GPIO2 控制 LED
while True:
led.value(1) # LED 亮
time.sleep(1)
led.value(0) # LED 灭
time.sleep(1)
读取 DHT11 传感器
from machine import Pin
import dht
import time
sensor = dht.DHT11(Pin(4))
while True:
sensor.measure()
temp = sensor.temperature()
humidity = sensor.humidity()
print(f"温度: {temp}°C, 湿度: {humidity}%")
time.sleep(2)
在 OLED 屏上显示信息
from machine import Pin, I2C
import ssd1306
i2c = I2C(-1, scl=Pin(22), sda=Pin(21)) # ESP32 I2C
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
oled.text("Hello, MicroPython!", 0, 0)
oled.show()
4.3 代码实现(CircuitPython)
CircuitPython 代码稍有不同:
控制 LED
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.D2)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(1)
led.value = False
time.sleep(1)
读取 DHT11 传感器
import board
import adafruit_dht
dht11 = adafruit_dht.DHT11(board.D4)
while True:
print(f"温度: {dht11.temperature}°C, 湿度: {dht11.humidity}%")
在 OLED 屏上显示信息
import board
import busio
import adafruit_ssd1306
i2c = busio.I2C(board.SCL, board.SDA)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)
oled.text("Hello, CircuitPython!", 0, 0)
oled.show()
5. 项目拓展
- 增加 WiFi 连接(ESP32 可使用
network
库) - 数据上传至云端(如 MQTT、Firebase)
- 使用按键控制 LED 或屏幕显示内容
- 改进 UI,增加交互性
6. 总结
- MicroPython 适用于 ESP32/STM32/RP2040,功能更接近标准 Python
- CircuitPython 适用于 Adafruit 生态,更易用
- 嵌入式项目可以轻松实现 LED 控制、传感器读取、OLED 显示
- Python 让嵌入式开发更加高效,无需繁琐的 C 语言编写
无论是物联网、机器人控制还是自动化系统,MicroPython 和 CircuitPython 都为 Python 开发者打开了一扇新的大门!