文章目录
前言
按键输入是各类MCU的GPIO输入开发学习的常用例程。本文将通过【ESP32按键控制LED(非中断实现)】这个例程来学习使用ESP32的GPIO输入,了解GPIO输入功能配置、操作的相关函数。
目标
- 熟悉ESP-IDF+VScode开发环境
- 了解按键消抖原理
- 学习ESP32 GPIO输入相关配置方法、函数
- 创建一个按键的工程,并编程实现按键控制LED亮灭
一、按键消抖
按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。
按键触发时其理想工作波形和实际工作波形如下图所示,在按键闭合和断开时(即区域①和区域③)会出现抖动,使得输入GPIO时无法检测其有效电平,因此需要进行消抖,使得输入GPIO的电平为有效电平(区域②)。对于按键消抖的方法,主要有软件法和硬件法两类,在已经设计好的电路中,常采用软件法进行消抖,即通过软件编程,添加一个延时,在检测GPIO电平时,将区域①或区域②延时过去,仅保留有效电平,本文采用的就是软件消抖的方式。
二、ESP-IDF GPIO输入相关配置
1.GPIO输入初始化配置
官方配置内容如下
struct gpio_config_t //GPIO参数初始化配置结构体
//结构体成员
uint64_t pin_bit_mask //GPIO引脚配置
gpio_mode_t mode //GPIO模式配置:有输入和输出两种,若配置输出模式,设置:GPIO_MODE_INPUT
gpio_pullup_t pull_up_en //GPIO上拉输入配置,根据需求设置,若使能,设置:GPIO_PULLUP_ENABLE
gpio_pulldown_t pull_down_en //GPIO下拉输入配置,根据此需求设置,若使能,设置:GPIO_PULLDOWN_ENABLE
--------------------------------------------------------------------------------------------------------------
esp_err_t gpio_config(const gpio_config_t *pGPIOConfig)
//GPIO初始化函数,初始化上述结构体
2.GPIO输入操作函数
官方提供的相关操作函数如下:
int gpio_get_level(gpio_num_t gpio_num)
//读取GPIO电平
/*
参数: gpio_num -- GPIO number. If you want to get the logic level of e.g. pin GPIO16,
gpio_num should be GPIO_NUM_16 (16);
返回: 0 the GPIO input level is 0
1 the GPIO input level is 1
*/
对于GPIO的相关配置和操作常用的就是上述介绍的,更详细的内容可参考官方ESP-IDF文档(v5.3版本)自行学习,若有疑惑可在评论区探讨。
三、按键KEY初始化配置
根据前文对GPIO输入相关配置介绍,配置按键GPIO如下
//按键初始化配置
void key_init(void)
{
gpio_config_t key_pin_config; //定义按键初始化结构体
key_pin_config.pin_bit_mask = 1ULL << KEY_IO; //配置按键引脚,本文按键链接的是GPIO0,以宏定义的形式赋值给KEY_IO
key_pin_config.mode = GPIO_MODE_INPUT; //配置GPIO为输入模式
key_pin_config.pull_u