- 什么是 MicroPython
MicroPython 是一种适用于微控制器和嵌入式系统的精简版 Python 语言,实现了大部分标准 Python 3 功能,同时专为资源有限的硬件平台设计。 - MicroPython 的主要特点
- 轻量级和快速:MicroPython 在资源有限的设备(如微控制器)上运行,占用内存少。
- 兼容性强:大部分语法和库与 Python 3 兼容。
- 硬件控制:支持 GPIO、I2C、SPI 等接口,适用于硬件开发。
- REPL 交互式环境:支持实时执行代码和调试。
- MicroPython 的应用场景
- 物联网(IoT)设备
- 教育和教学
- 原型开发
- 小型电子项目
- MicroPython 的硬件支持
- ESP8266、ESP32
- Raspberry Pi Pico
- STM32
- Pyboard
示例代码
控制 LED 灯闪烁
from machine import Pin
import time
led = Pin(2, Pin.OUT) # 适用于 ESP32
while True:
led.on()
time.sleep(1)
led.off()
time.sleep(1)
读取温度传感器数据(DS18B20)
import machine, onewire, ds18x20, time
dat = machine.Pin(4) # 数据引脚
ds = ds18x20.DS18X20(onewire.OneWire(dat))
roms = ds.scan() # 扫描设备
print('Found devices:', roms)
while True:
ds.convert_temp()
time.sleep(1)
for rom in roms:
print(ds.read_temp(rom))
MicroPython 与标准 Python 主要区别
- MicroPython 更轻量级,专为嵌入式设备设计,去掉了标准 Python 中的一些大模块,如
os
的部分功能。 - 硬件访问接口:MicroPython 提供
machine
模块直接访问硬件,标准 Python 则使用第三方库控制硬件。 - 性能优化:MicroPython 针对内存和处理能力较低的设备优化,牺牲了一些灵活性。
- 库的限制:MicroPython 仅包含常用核心库,如
ujson
代替json
。
在 ESP32 上安装 MicroPython 固件
- 下载 MicroPython 固件:从 MicroPython 官网 获取适用于 ESP32 的固件。
- 安装工具:使用
esptool.py
刷入固件。 - 步骤:
esptool.py --chip esp32 erase_flash # 清除现有固件
esptool.py --chip esp32 write_flash -z 0x1000 firmware.bin # 写入固件
MicroPython 支持的流行开发板
- ESP32 和 ESP8266
- Raspberry Pi Pico
- STM32 系列
- Pyboard
- Arduino Portenta H7
处理 GPIO 引脚
from machine import Pin
led = Pin(2, Pin.OUT) # 初始化 GPIO 2 为输出模式
led.on() # 打开 LED
led.off() # 关闭 LED
存储管理和垃圾回收机制
MicroPython 使用自动垃圾回收 (GC),调用 gc
模块可手动触发。
import gc
gc.collect() # 释放未使用的内存
优化内存使用的技巧
- 使用生成器和内存视图。
- 避免不必要的全局变量。
- 定期调用
gc.collect()
。
异步编程支持
MicroPython 支持 uasyncio
模块。
import uasyncio as asyncio
async def blink():
while True:
print("Blinking")
await asyncio.sleep(1)
asyncio.run(blink())
实现 HTTP 客户端和服务器
使用 urequests
和 socket
模块。
客户端示例:
import urequests
response = urequests.get('http://example.com')
print(response.text)
服务器示例:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 80))
s.listen(5)
使用 MQTT 进行 IoT 通信
from umqtt.simple import MQTTClient
client = MQTTClient("device_id", "broker_address")
client.connect()
client.publish(b"topic", b"Hello world")
client.disconnect()
多线程或协程支持
MicroPython 支持协程但不完全支持多线程。
连接 Wi-Fi 网络
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('SSID', 'PASSWORD')
扩展自定义模块
通过 C 语言编写扩展模块或直接修改 MicroPython 源代码。
Raspberry Pi Pico 配置与调试
- 烧录 MicroPython 固件。
- 使用
Thonny
IDE 或rshell
连接。
性能与 C 语言实现对比
MicroPython 性能较 C 语言低,但开发速度更快,适用于原型设计和教育。
管理外部库和依赖
MicroPython 提供 upip
进行库管理:
import upip
upip.install('micropython-urequests')