第九章 KEY实验
上一章,我们介绍了ESP32-S3 的 IO 口作为输出的使用。本章,我们将向大家介绍如何使用 ESP32-S3的 IO口作为输入。我们将利用板载的boot按键,来控制板载的LED灯亮灭。通过本章的学习,我们将了解到ESP32-S3 的 IO 口作为输入口的使用方法。
本章分为如下几个小节:
9.1 独立按键简介
9.2 硬件设计
9.3 软件设计
9.4 下载验证
9.1 独立按键简介
machine.Pin 类操作方法相关内容,请参考章节七 LED实验的7.1小节。
几乎每个开发板都会板载有独立按键,因为按键用处很多。常态下,独立按键是断开的,按下的时候才闭合。每个独立按键会单独占用一个IO口,通过IO口的高低电平判断按键的状态。但是按键在闭合和断开的时候,都存在抖动现象,即按键在闭合时不会马上就稳定的连接,断开时也不会马上断开。这是机械触点,无法避免。独立按键抖动波形图如下:
图9.1.1 独立按键抖动波形图
图中的按下抖动和释放抖动的时间一般为5~10ms,如果在抖动阶段采样,其不稳定状态可能出现一次按键动作被认为是多次按下的情况。为了避免抖动可能带来的误操作,我们要做的措施就是给按键消抖(即采样稳定闭合阶段)。消抖方法分为硬件消抖和软件消抖,我们常用软件的方法消抖。
软件消抖:方法很多,我们例程中使用最简单的延时消抖。检测到按键按下后,一般进行10ms延时,用于跳过抖动的时间段,如果消抖效果不好可以调整这个10ms延时,因为不同类型的按键抖动时间可能有偏差。待延时过后再检测按键状态,如果没有按下,那我们就判断这是抖动或者干扰造成的;如果还是按下,那么我们就认为这是按键真的按下了。对按键释放的判断同理。
硬件消抖:利用RC电路的电容充放电特性来对抖动产生的电压毛刺进行平滑出来,从而实现消抖,但是成本会更高一点,本着能省则省的原则,我们推荐使用软件消抖即可。
9.2 硬件设计
1. 例程功能
本章实验功能简介:通过开发板上的boot独立按键控制LED灯翻转。
2. 硬件资源
1)LED灯
LED-IO1
2)独立按键
BOOT-IO0
3. 原理图
独立按键硬件部分的原理图,如下图所示。
图9.2.1 独立按键与ESP32-S3连接原理图
这里需要注意的是:BOOT设计为采样到按键另一端的低电平为有效电平。
9.3 软件设计
9.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图:
图9.3.1.1 程序流程图
9.3.2 程序解析
本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。KEY实验main.py源码如下:
from machine import Pin import time """ * @brief 程序入口 * @param 无 * @retval 无 """ if __name__ == '__main__': # 初始化LED并输出高电平 led = Pin(1,Pin.OUT,value = 1) # 配置led引脚模式 key = Pin(0,Pin.IN,Pin.PULL_UP) # 配置key引脚模式及上拉 while True: if key.value() == 0: # 判断KEY是否按下 time.sleep_ms(10) # 该延时为按键消抖 if key.value() == 0: # 再一次判断是否按下 led_state = led.value() led.value(not led_state) while not key.value(): # 检测按键是否松开 pass
这段MicroPython代码通过按键控制LED灯的开关状态。当按键被按下时,程序会等待10毫秒消除抖动,然后再次确认按键状态,如果按键确实被按下,则获取当前LED状态并反转。然后程序进入等待按键松开的循环。
9.4 下载验证
下载完之后,通过BOOT按键来控制LED灯的开关状态。