上节课我们学习了ESP32的IO口作为输出的使用,本节课我们将学习如何使用 ESP32 的 machine.Pin
类来实现 IO 的输入操作。
本节课目标:
通过编程利用开发板载的boot按键,来控制板载的LED灯亮灭。
本节课内容:
- 独立按键简介
- 硬件设计
- 软件设计
- 下载验证
一、独立按键简介
在独立机械按键的闭合与断开过程中,常会出现一种称为“抖动”的现象。具体而言,即按键在完全闭合时并未立即形成稳定的电气连接,断开时亦然。此现象源于机械触点的固有特性,属于难以避免的物理现象。
独立按键的按下与释放过程中的抖动时间大致在5至10毫秒范围内。若在此期间内进行采样,可能因电气状态的不稳定而导致单次按键动作被错误地识别为多次按压。为有效避免此类由抖动引发的误操作,我们需采取按键消抖措施。消抖策略可划分为硬件消抖与软件消抖两大类别。
软件消抖方面:存在多种实现方法,而我们在示例程序中采用了最为直接且简单的延时消抖技术。当检测到按键被按下时,程序将自动引入一个10毫秒的延时,以规避抖动期的影响。若实际应用中消抖效果未达预期,可灵活调整此延时时长,以适应不同类型按键可能存在的抖动时间差异。延时结束后,再次检测按键状态,若按键已释放,则视为抖动或外部干扰所致;反之,若按键仍处于按下状态,则确认此次按键动作为有效输入。对于按键释放的判断逻辑,亦遵循此原理。
硬件消抖方面:则是利用RC电路中电容的充放电特性,对由抖动产生的电压波动进行平滑处理,从而达到消抖效果。然而,此方法相较于软件消抖而言,成本投入会有所增加。我们在此采用软件消抖技术。
二、硬件设计
1. 例程功能
通过编程利用开发板载的boot按键,来控制板载的LED灯亮灭。
2. 硬件资源
- LED 灯:GPIO2 --> LED 【高电平:亮; 低电平:灭】
- boot按键:GPIO0 --> key 【按下:低电压;松开:高电压】
3. 原理图
四、软件设计
1. 程序流程图
2. 程序
from machine import Pin
import time
# 实例化 LED
led = Pin(2, Pin.OUT, value=0)
# 实例化 KEY
key = Pin(0, Pin.IN)
def key_pressed():
"""
处理按键事件。通过开发板上的 boot 独立按键控制 LED 灯翻转
"""
while True:
if key.value() == 0:
# 消抖
time.sleep_ms(10)
# 按键按下
if key.value() == 0:
led.value(not led.value()) # LED 反转
while key.value() == 0:
# 等待松开
pass
key_pressed()
五、下载验证
开发板载的boot按键,可以控制板载的LED灯状态的反转。