MicroPython 入门:Pico GPIO 读写全解析,按键控制 LED + 消抖原理
在下面实验中,我们使用 风雅一号板-通用兼容扩展板。

在下列代码中,我们首先导入 Pin 类和 time 类,在初始化配置中设置 GPIO 22 为按键输入引脚,设置 GPIO 25 为 LED 输出引脚,下拉电阻使能。
在主循环中,不断检测按键是否按下:
- 如果按键没有按下:不进行任何操作,
- 如果按键已经按下:在硬件电路中,按键按下时,GPIO 引脚读取的电平为低(0),在按键按下检测到后,延时 50 毫秒(
time.sleep_ms(50))进行按键消抖- 如果
LED当前状态为熄灭,则切换为点亮,终端输出"The LED is ON" - 如果
LED当前状态为点亮,则切换为熄灭,终端输出"The LED is OFF"
- 如果
这里的延时 50ms 主要是因为按键在闭合和断开时,触点会存在抖动现象,如图所示:

实际波形在按键按下的那一刻前后有 50ms 的抖动,因此这里通过延时 50ms 跳过抖动的区域获取中间稳定区域的电平。
示例代码如下,在配套资料的文件夹:elegance-devkit v1\Demo\01 GPIO_ReadWrite 中:
# Python env : MicroPython v1.23.0
# -*- coding: utf-8 -*-
# @Time : 2024/6/12 下午1:34
# @Author : 李清水
# @File : main.py
# @Description : GPIO读写实验,完成驱动板载LED灯和按键读取的任务
# ======================================== 导入相关模块 ========================================
# 硬件相关的模块
from machine import Pin
# 时间相关的模块
import time
# ======================================== 全局变量 ============================================
# 初始化LED的状态为关闭(False)
led_state = False
# ======================================== 功能函数 ============================================
# ======================================== 自定义类 ============================================
# ======================================== 初始化配置 ==========================================
# 上电延时3s
time.sleep(3)
# 打印调试消息
print("FreakStudio: Using GPIO to control LED and read KEY")
# 需要注意的是 MicroPython 中Pin类的构造函数不支持关键字参数,仅支持位置参数
# 因此下列定义KEY,将会产生一个报错
# TypeError: function missing 1 required positional arguments
# key = Pin(id = 2, mode = Pin.IN, pull = Pin.PULL_DOWN)
# 设置GPIO 22 为按键输入引脚
KEY = Pin(22, Pin.IN)
# 设置GPIO 25为LED输出引脚,下拉电阻使能
LED = Pin(25, Pin.OUT, Pin.PULL_DOWN)
# ======================================== 主程序 ============================================
# 循环检测按键是否按下
while True:
# 检测到KEY引脚按下
if KEY.value() == 0:
# 按键消抖:延时50ms跳过抖动的区域
time.sleep_ms(50)
# 确保按键仍然处于按下状态
if KEY.value() == 0:
# 切换LED的状态
led_state = not led_state
# 根据状态变量设置LED亮或灭
if led_state:
LED.on()
print("The LED is ON")
else:
LED.off()
print("The LED is OFF")
# 等待按键松开(避免连续检测到按键按下)
while KEY.value() == 0:
pass
这里需要注意的是,MicroPython中 Pin 类的构造函数在传入参数时不支持关键字参数,仅支持位置参数,因此下列定义 KEY 将会产生报错 TypeError: function missing 1 required positional arguments:
KEY = Pin(id = 2, mode = Pin.IN, pull = Pin.PULL_DOWN)
将上述代码烧录到 MicroPython 中,可以看到实验现象:
当第一次按下按键时,切换 led_state 为 True,LED 灯点亮并且终端输出如下:


当第二次按下按键时,切换 led_state 为 False,LED 灯熄灭并且终端输出如下:


此后,每按下一次按键,LED 的状态在点亮和熄灭之间交替切换。

在下列代码中,我们首先导入 `Pin` 类和 `time` 类,在初始化配置中设置 `GPIO 22` 为按键输入引脚,设置 `GPIO 25` 为 LED 输出引脚,下拉电阻使能。
浙公网安备 33010602011771号