MicroPython GPIO编程完全手册:控制LED、按钮和传感器的终极指南

【免费下载链接】micropython MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems 【免费下载链接】micropython 项目地址: https://gitcode.com/gh_mirrors/mi/micropython

MicroPython是一款为微控制器和受限系统设计的精简高效Python实现,它让开发者能够用Python语言轻松控制硬件设备。本文将带你快速掌握GPIO(通用输入输出)编程,从基础的LED控制到复杂的传感器交互,开启你的嵌入式开发之旅。

MicroPython与微控制器 图:MicroPython为微控制器带来简洁高效的Python编程体验

一、MicroPython GPIO基础:认识引脚与编程模型

1.1 什么是GPIO?

GPIO(通用输入输出)是微控制器上的通用引脚,可通过编程配置为输入或输出模式,实现与外部电子元件的交互。MicroPython提供了统一的machine.Pin类来操作GPIO,无论你使用ESP32、ESP8266还是Raspberry Pi Pico,都能通过相似的代码控制硬件。

1.2 常见开发板的GPIO布局

不同开发板的GPIO引脚分布和功能各不相同,以下是几种主流开发板的引脚图:

ESP32开发板 图:ESP32开发板及其GPIO引脚分布

ESP8266开发板 图:ESP8266开发板引脚布局

Raspberry Pi Pico引脚图 图: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 环境准备

  1. 安装MicroPython固件到你的开发板
  2. 使用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让嵌入式开发变得简单而有趣。现在就动手尝试,将你的创意变为现实吧!

【免费下载链接】micropython MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems 【免费下载链接】micropython 项目地址: https://gitcode.com/gh_mirrors/mi/micropython

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐