1. 什么是 MicroPython
    MicroPython 是一种适用于微控制器和嵌入式系统的精简版 Python 语言,实现了大部分标准 Python 3 功能,同时专为资源有限的硬件平台设计。
  2. MicroPython 的主要特点
  • 轻量级和快速:MicroPython 在资源有限的设备(如微控制器)上运行,占用内存少。
  • 兼容性强:大部分语法和库与 Python 3 兼容。
  • 硬件控制:支持 GPIO、I2C、SPI 等接口,适用于硬件开发。
  • REPL 交互式环境:支持实时执行代码和调试。
  1. MicroPython 的应用场景
  • 物联网(IoT)设备
  • 教育和教学
  • 原型开发
  • 小型电子项目
  1. 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 主要区别

  1. MicroPython 更轻量级,专为嵌入式设备设计,去掉了标准 Python 中的一些大模块,如 os 的部分功能。
  2. 硬件访问接口:MicroPython 提供 machine 模块直接访问硬件,标准 Python 则使用第三方库控制硬件。
  3. 性能优化:MicroPython 针对内存和处理能力较低的设备优化,牺牲了一些灵活性。
  4. 库的限制:MicroPython 仅包含常用核心库,如 ujson 代替 json

在 ESP32 上安装 MicroPython 固件

  1. 下载 MicroPython 固件:从 MicroPython 官网 获取适用于 ESP32 的固件。
  2. 安装工具:使用 esptool.py 刷入固件。
  3. 步骤:
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()  # 释放未使用的内存

优化内存使用的技巧

  1. 使用生成器和内存视图。
  2. 避免不必要的全局变量。
  3. 定期调用 gc.collect()

异步编程支持

MicroPython 支持 uasyncio 模块。

import uasyncio as asyncio

async def blink():
    while True:
        print("Blinking")
        await asyncio.sleep(1)

asyncio.run(blink())

实现 HTTP 客户端和服务器

使用 urequestssocket 模块。
客户端示例:

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 配置与调试

  1. 烧录 MicroPython 固件。
  2. 使用 Thonny IDE 或 rshell 连接。

性能与 C 语言实现对比

MicroPython 性能较 C 语言低,但开发速度更快,适用于原型设计和教育。


管理外部库和依赖

MicroPython 提供 upip 进行库管理:

import upip
upip.install('micropython-urequests')