一、MicroPython 简介与核心特点
MicroPython 是一款专门为微控制器、嵌入式硬件、物联网设备量身定制的精简版 Python 3 解释器,由剑桥大学教授 Damien George 主导开发,采用 MIT License 开源许可,可自由商用、修改与分发。

它完整保留了 Python 简洁易用、语法清晰的核心特性,同时深度裁剪了不必要的功能,专门适配内存极小、算力有限的嵌入式硬件,能够直接运行在 ESP32、ESP8266、STM32、RP2040(树莓派 Pico)等主流单片机上。
1.1 工作原理
MicroPython 本质是一个可烧录到硬件 Flash 中的固件。将固件刷入开发板后,开发板就拥有了 Python 运行环境,用户可以通过串口、WebREPL 等方式直接输入 Python 代码,由板载的 MicroPython 解释器实时解释执行,无需像传统嵌入式开发那样经过复杂的编译、链接、下载过程,极大降低了嵌入式开发门槛。
1.2 优点
- 语法与标准 Python 高度兼容,学习成本极低
- 支持交互式运行,代码即写即测,开发效率远超 C 语言
- 内置丰富硬件驱动库,可直接控制 GPIO、I2C、SPI、UART、WiFi、蓝牙等硬件
- 资源占用极低,可在几十KB内存、几十MHz主频的硬件上流畅运行
- 开源免费,生态完善,社区活跃,资料丰富
1.3 缺点
- 执行效率低于编译型语言(如 C/C++),不适合超高频实时控制场景
- 功能裁剪后,部分标准 Python 库无法直接使用
- 对硬件有一定适配要求,并非所有单片机都支持
二、MicroPython 环境搭建与固件烧录
2.1 准备工作
想要使用 MicroPython,需要准备:
- 支持 MicroPython 的开发板(本文以最常用的 ESP32 为例)
- USB 数据线
- 电脑(Windows / macOS / Linux 均可)
- 烧录工具与串口工具
2.2 安装烧录工具
我们使用 esptool.py 来给 ESP32 烧录 MicroPython 固件,它是 Python 编写的开源烧录工具,直接通过 pip 安装即可:
pip install esptool
安装完成后,在命令行输入以下命令验证是否安装成功:
esptool.py version
2.3 下载对应固件
前往 MicroPython 官方下载页面,选择自己开发板对应的固件,以 ESP32 为例:
- 下载后缀为
.bin的稳定版固件 - 保存到电脑本地,方便后续烧录
2.4 擦除原有固件
在烧录新固件前,建议先擦除开发板原有程序,避免冲突:
esptool.py --chip esp32 erase_flash
执行后等待提示擦除成功即可。
2.5 烧录 MicroPython 固件
将下载好的固件文件拖入命令行,替换路径,执行烧录命令:
esptool.py --chip esp32 --port COM3 write_flash -z 0x1000 你的固件路径.bin
COM3为开发板在电脑上的串口号,Windows 可在设备管理器查看- 烧录完成后,开发板就成功搭载了 MicroPython 环境
三、MicroPython 基础使用:交互式命令行
3.1 连接开发板
烧录完成后,我们可以通过串口工具连接开发板,常用工具有:
- PuTTY
- Tera Term
- Thonny(推荐,自带 MicroPython 支持)
本文推荐使用 Thonny,简单易用,适合新手。
- 打开 Thonny
- 点击右上角「运行」→「选择解释器」
- 选择「MicroPython (ESP32)」,选择对应串口
- 点击确定,即可自动连接
连接成功后,下方 Shell 窗口会出现 >>> 提示符,代表已经进入 MicroPython 交互式环境。
3.2 基础交互测试
在交互式环境中,可以直接输入 Python 代码,实时执行:
# 输出 Hello World
print("Hello MicroPython!")
# 基础运算
1 + 2
5 * 8
10 / 2
# 定义变量
name = "MicroPython"
print("I love", name)
这些代码与标准 Python 完全一致,新手可以快速上手。
四、GPIO 控制:点亮 LED(最经典入门案例)
控制硬件是 MicroPython 的核心用途,GPIO 控制是嵌入式开发的基础,下面实现点亮与闪烁 LED。
4.1 硬件连接
大多数 ESP32 开发板自带板载 LED,通常连接在 GPIO2 引脚,无需外接电路,直接使用。
4.2 点亮 LED 代码
# 导入 Pin 类
from machine import Pin
# 定义 LED 引脚,设置为输出模式
led = Pin(2, Pin.OUT)
# 输出高电平,点亮 LED
led.value(1)
代码解释:
machine是 MicroPython 核心模块,提供硬件控制功能Pin用于操作 GPIO 引脚Pin.OUT代表将引脚设置为输出模式value(1)输出高电平,点亮 LED;value(0)输出低电平,熄灭 LED
4.3 LED 闪烁代码
加入延时函数,实现 LED 循环闪烁:
from machine import Pin
import time
# 初始化 LED
led = Pin(2, Pin.OUT)
# 无限循环
while True:
led.value(1) # 点亮
time.sleep(0.5) # 延时 0.5 秒
led.value(0) # 熄灭
time.sleep(0.5) # 延时 0.5 秒
代码解释:
time.sleep(秒数)用于延时,单位为秒while True实现无限循环,让 LED 持续闪烁
将代码复制到 Thonny 中,点击运行,即可看到开发板 LED 不停闪烁。
五、按键输入检测
MicroPython 不仅可以输出控制硬件,还可以读取外部输入信号,下面实现按键控制 LED。
5.1 硬件连接
- 按键一端接 GPIO0
- 按键另一端接 GND
5.2 按键检测代码
from machine import Pin
import time
led = Pin(2, Pin.OUT)
# 初始化按键,上拉输入模式
key = Pin(0, Pin.IN, Pin.PULL_UP)
while True:
# 读取按键电平
if key.value() == 0: # 按键按下
time.sleep_ms(20) # 消抖
if key.value() == 0:
led.value(not led.value()) # 翻转 LED 状态
while key.value() == 0: # 等待按键松开
pass
time.sleep_ms(10)
代码解释:
Pin.PULL_UP开启内部上拉电阻,未按下时为高电平,按下为低电平time.sleep_ms(20)毫秒级延时,用于消除按键抖动led.value(not led.value())实现 LED 状态翻转
按下按键,LED 状态切换;再次按下,状态再次切换,非常直观。
六、WiFi 连接与网络请求(物联网基础)
ESP32 自带 WiFi 功能,MicroPython 提供了便捷的 WiFi 控制库,可以轻松连接路由器、发送 HTTP 请求,实现物联网功能。
6.1 连接 WiFi 代码
import network
import time
# WiFi 名称和密码
ssid = "你的WiFi名称"
password = "你的WiFi密码"
# 初始化 STA 模式(连接路由器)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# 连接 WiFi
if not wlan.isconnected():
print("正在连接 WiFi...")
wlan.connect(ssid, password)
# 等待连接成功
while not wlan.isconnected():
time.sleep(0.5)
print("WiFi 连接成功")
print("网络信息:", wlan.ifconfig())
代码解释:
network.STA_IF为客户端模式,用于连接路由器wlan.active(True)开启 WiFiwlan.isconnected()判断是否连接成功wlan.ifconfig()返回 IP 地址、子网掩码、网关、DNS
运行后,开发板即可连接路由器,并打印出获取到的 IP 地址。
6.2 发送 HTTP 请求
连接网络后,可以请求网页接口,获取数据:
import urequests
# 发送 GET 请求
response = urequests.get("http://httpbin.org/get")
# 打印返回内容
print(response.text)
# 关闭连接
response.close()
代码解释:
urequests是 MicroPython 简化版的 requests 库get()发送 HTTP GET 请求response.text获取返回的文本数据
通过该功能,可以获取天气、时间、服务器数据等,实现物联网设备的数据交互。
七、PWM 调光:呼吸灯效果
PWM(脉冲宽度调制)是嵌入式常用技术,可用于 LED 调光、电机调速。下面使用 PWM 实现呼吸灯效果。
7.1 呼吸灯代码
from machine import Pin, PWM
import time
# 初始化 PWM,绑定 GPIO2,频率 1000Hz
pwm_led = PWM(Pin(2), freq=1000)
while True:
# 逐渐变亮
for i in range(0, 1024):
pwm_led.duty(i)
time.sleep_ms(1)
# 逐渐变暗
for i in range(1023, -1, -1):
pwm_led.duty(i)
time.sleep_ms(1)
代码解释:
PWM用于创建 PWM 对象freq设置 PWM 频率duty(值)设置占空比,范围 0~1023- 循环修改占空比,实现呼吸灯效果
运行后,LED 会像呼吸一样,缓慢变亮再缓慢变暗,效果流畅。
八、I2C 驱动 OLED 显示屏
MicroPython 支持大量外设驱动,I2C 是最常用的通信协议之一,下面驱动 0.96 寸 OLED 屏幕显示文字。
8.1 硬件连接
- VCC → 3.3V
- GND → GND
- SDA → GPIO21
- SCL → GPIO22
8.2 OLED 驱动代码
首先需要上传 OLED 驱动文件(ssd1306.py),然后编写主代码:
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import time
# 初始化 I2C
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)
# 初始化 OLED,分辨率 128*64
oled = SSD1306_I2C(128, 64, i2c)
# 清屏
oled.fill(0)
# 显示文字
oled.text("MicroPython", 0, 0)
oled.text("Hello World", 0, 16)
oled.text("GPIO:2", 0, 32)
oled.text("OLED Test", 0, 48)
# 刷新显示
oled.show()
代码解释:
I2C初始化 I2C 通信SSD1306_I2C驱动 OLED 屏幕text(内容, x坐标, y坐标)在指定位置显示文字show()将缓存内容显示到屏幕
运行后,OLED 屏幕会显示多行文字,可用于显示传感器数据、设备状态等信息。
九、综合实战:WiFi 环境监测终端
结合前面所学知识,制作一个WiFi 环境监测终端,实时采集温度数据并显示在 OLED 屏幕上,同时连接 WiFi 准备上传数据。
9.1 功能说明
- 连接 WiFi
- 采集内部温度数据(ESP32 自带温度传感器)
- 在 OLED 屏幕上实时显示温度与 WiFi 信息
- LED 闪烁代表系统运行
9.2 完整代码
from machine import Pin, PWM, I2C
from ssd1306 import SSD1306_I2C
import network
import time
import esp
# WiFi 信息
SSID = "你的WiFi名称"
PASSWORD = "你的WiFi密码"
# 硬件初始化
led = Pin(2, Pin.OUT)
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
# WiFi 连接函数
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("正在连接 WiFi...")
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
led.value(1)
time.sleep(0.2)
led.value(0)
time.sleep(0.2)
print("WiFi 连接成功")
return wlan.ifconfig()[0]
# 主程序
def main():
ip = connect_wifi()
oled.fill(0)
oled.text("WiFi Connected", 0, 0)
oled.text("IP:" + ip, 0, 16)
oled.show()
time.sleep(2)
while True:
# 读取温度
temp = esp32.raw_temperature()
temp_c = (temp - 32) / 1.8 # 转摄氏度
# 显示数据
oled.fill(0)
oled.text("IP:" + ip[:15], 0, 0)
oled.text("Temp: {:.1f} C".format(temp_c), 0, 16)
oled.text("Running...", 0, 48)
oled.show()
# 运行指示灯
led.value(1)
time.sleep(0.1)
led.value(0)
time.sleep(1)
if __name__ == "__main__":
main()
该案例整合了 WiFi、OLED、GPIO、温度读取,是非常典型的物联网终端项目,可在此基础上扩展湿度传感器、气压传感器、光照传感器等,制作完整的环境监测站。
相关资源
- Pypi地址:https://pypi.org/project/micropython
- Github地址:https://github.com/micropython/micropython
- 官方文档地址:https://docs.micropython.org
关注我,每天分享一个实用的Python自动化工具。
