使用 MicroPython 和 CircuitPython 开发嵌入式项目

1. 引言

MicroPython 和 CircuitPython 是专门为嵌入式系统优化的 Python 版本,支持在微控制器(MCU)上运行 Python 代码,使得开发者能够使用 Python 轻松编写嵌入式程序,而不需要掌握复杂的 C 语言。

在本篇博客中,我们将介绍:

  • MicroPython 和 CircuitPython 的特点
  • 适用的硬件平台
  • 开发环境的搭建
  • 通过一个实际项目(使用 ESP32 控制 LED 和读取传感器数据)展示如何使用它们

2. MicroPython vs CircuitPython

MicroPython 和 CircuitPython 都是针对嵌入式开发的 Python 解释器,但它们有一些不同点:

特性MicroPythonCircuitPython
开发者Damien GeorgeAdafruit
适用平台ESP32, STM32, RP2040, nRF52 等Adafruit 开发板(如 Feather、Trinket、Metro)、Raspberry Pi Pico
文件系统需要手动创建 boot.pymain.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 固件:

  1. 下载 MicroPython 固件:MicroPython 官方下载
  2. 连接开发板到电脑,使用 esptool 烧录固件:
    esptool.py --port /dev/ttyUSB0 erase_flash
    esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 firmware.bin
    
  3. 重新连接开发板,并使用 Thonny 进行代码编写。

3.3 安装 CircuitPython

  1. 进入 CircuitPython 官网 下载适合开发板的固件。
  2. 将开发板连接电脑,进入“Bootloader 模式”:
    • 按住 BOOTRESET 按钮,直到进入 USB 设备模式。
    • 在电脑上会显示一个新的磁盘驱动器(如 CIRCUITPY)。
  3. 拖拽 .uf2 固件到 CIRCUITPY 盘,自动重启后即可运行。

4. 示例项目:使用 MicroPython/CircuitPython 控制 LED 和读取传感器

本项目演示:

  1. 控制 LED 亮灭
  2. 读取 DHT11 温湿度传感器数据
  3. 在 OLED 屏上显示信息

4.1 硬件连接

设备ESP32 引脚Raspberry Pi Pico 引脚
LEDGPIO2GP2
DHT11GPIO4GP4
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 开发者打开了一扇新的大门!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值