《ESP32-S3使用指南—MicroPython版 V1.0》第九章 KEY实验

第九章 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灯的开关状态。


请使用浏览器的分享功能分享到微信等