MicroPython GPIO编程完全手册:控制LED、按钮和传感器的终极指南
MicroPython是一款为微控制器和受限系统设计的精简高效Python实现,它让开发者能够用Python语言轻松控制硬件设备。本文将带你快速掌握GPIO(通用输入输出)编程,从基础的LED控制到复杂的传感器交互,开启你的嵌入式开发之旅。[编程,从基础的LED控制到复杂的传感器交互,开启你的嵌入式开发之旅。
图:MicroPython为微控制器带来简洁高效的Python编程体验
一、MicroPython GPIO基础:认识引脚与编程模型
1.1 什么是GPIO?
GPIO(通用输入输出)是微控制器上的通用引脚,可通过编程配置为输入或输出模式,实现与外部电子元件的交互。MicroPython提供了统一的machine.Pin类来操作GPIO,无论你使用ESP32、ESP8266还是Raspberry Pi Pico,都能通过相似的代码控制硬件。
1.2 常见开发板的GPIO布局
不同开发板的GPIO引脚分布和功能各不相同,以下是几种主流开发板的引脚图:
图:Raspberry Pi Pico的GPIO引脚功能分布图
二、快速上手:点亮你的第一个LED
2.1 硬件连接
将LED的长脚(正极)通过220Ω电阻连接到开发板的GPIO引脚(如GPIO2),短脚(负极)连接到GND。
2.2 基础LED控制代码
from machine import Pin
import time
# 创建Pin对象,指定引脚和输出模式
led = Pin(2, Pin.OUT)
# 循环闪烁LED
while True:
led.value(1) # 点亮LED
time.sleep(0.5) # 延时0.5秒
led.value(0) # 关闭LED
time.sleep(0.5) # 延时0.5秒
2.3 使用内置LED
许多开发板都有内置LED,通常连接到特定引脚(如ESP32的GPIO2,ESP8266的GPIO2,Raspberry Pi Pico的GPIO25)。你可以直接控制这些LED而无需额外硬件:
from machine import Pin
import time
# 控制内置LED(以ESP32为例)
led = Pin(2, Pin.OUT)
while True:
led.toggle() # 切换LED状态
time.sleep(1)
三、读取输入:按钮控制与状态检测
3.1 按钮连接方式
将按钮的一端连接到GPIO引脚(如GPIO4),另一端连接到GND。为确保引脚状态稳定,通常需要添加上拉或下拉电阻。MicroPython的Pin类支持内置上拉/下拉电阻,无需额外元件:
from machine import Pin
# 创建按钮对象,启用内置上拉电阻
button = Pin(4, Pin.IN, Pin.PULL_UP)
# 读取按钮状态
while True:
if button.value() == 0: # 按钮被按下(接地)
print("按钮被按下!")
time.sleep(0.1) # 延时消抖
3.2 高级按钮功能:中断与回调
使用中断可以在按钮状态变化时立即响应,而无需持续轮询:
from machine import Pin
import time
def button_callback(pin):
print("按钮被按下!")
# 创建按钮对象,下降沿触发中断
button = Pin(4, Pin.IN, Pin.PULL_UP)
button.irq(trigger=Pin.IRQ_FALLING, handler=button_callback)
# 主循环
while True:
time.sleep(1)
四、传感器交互:读取模拟信号
4.1 ADC(模拟-数字转换)基础
许多传感器(如光敏电阻、温度传感器)输出模拟信号,需要通过ADC引脚读取。MicroPython的machine.ADC类提供了ADC功能:
from machine import ADC, Pin
# 创建ADC对象(以ESP32的GPIO34为例)
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB) # 设置衰减,支持0-3.3V输入
while True:
value = adc.read() # 读取ADC值(0-4095)
voltage = value * 3.3 / 4095 # 转换为电压
print("ADC值:", value, "电压:", voltage, "V")
time.sleep(0.5)
4.2 常见传感器示例:光敏电阻
将光敏电阻与10KΩ电阻串联,中间节点连接到ADC引脚,即可实现光线检测:
from machine import ADC, Pin
import time
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)
while True:
light_value = adc.read()
print("光线强度:", light_value)
time.sleep(0.5)
五、实用项目:构建你的第一个物联网设备
5.1 环境准备
- 安装MicroPython固件到你的开发板
- 使用mpremote工具连接开发板:
mpremote connect /dev/ttyUSB0
5.2 项目:温湿度监测与LED报警
结合DHT11温湿度传感器和LED,实现超温报警功能:
from machine import Pin
import dht
import time
# 初始化DHT11传感器(连接到GPIO14)
dht_sensor = dht.DHT11(Pin(14))
# 初始化报警LED(连接到GPIO2)
alarm_led = Pin(2, Pin.OUT)
while True:
try:
dht_sensor.measure() # 读取传感器数据
temp = dht_sensor.temperature() # 温度
hum = dht_sensor.humidity() # 湿度
print("温度: %d°C, 湿度: %d%%" % (temp, hum))
# 温度超过30°C时触发报警
if temp > 30:
alarm_led.value(1)
else:
alarm_led.value(0)
except OSError as e:
print("读取传感器失败:", e)
time.sleep(2)
六、进阶资源与学习路径
6.1 官方文档
6.2 示例代码库
项目中提供了丰富的GPIO应用示例,可参考:
通过本文的学习,你已经掌握了MicroPython GPIO编程的核心技能。从简单的LED控制到复杂的传感器交互,MicroPython让嵌入式开发变得简单而有趣。现在就动手尝试,将你的创意变为现实吧!
更多推荐


所有评论(0)