【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
按键输入是一个基本操作。大家如果手上只有esp32的裸板和一根usb线,看上去做不了按键输入。但其实不用担心,因为esp32上面就有一个按键。对,就是那个boot键。正常情况下,这个boot按键适用于下载版本的,但是当前我们用不到,所以就可以拿来做按键输入。

1、按键输入是基础
很多的电子设备由于成本的原因,用不上屏幕,更谈不上触摸屏。这种情况下,按键就是很好的选择。哪怕是用屏幕,可能也是那种几块钱的oled屏幕,纯粹解决一个显示有无的问题,谈不上有多好的体验。这种情况下,按键就派上用场了。
2、按键的长按和短按
这两种方式在按键比较少的时候,会同时出现。一般小于1s,都是短按;大于3s,就是长按。
3、按键+状态机
按键加上状态机,基本上就是标配。大家留心一下,就会很多时候看到一个mode按键,这个mode不停切换的时候,就会对应不同的状态。当然除了mode按键,有的时候还会有向上、向下、确认等按键。当然不同的按键,在不同mode下,功能也是不一样的,这一点需要注意下。
4、按键有上拉和下拉两种
注意上拉的时候,按下去的时候,输入为1;如果是下拉的时候,按下去的时候,输入为0。这就是两者的差别。
5、示例代码
示例代码其实是比较简单的,基本上找一下ai就可以生成。我们所需要做的,就是看懂ai生成的代码、在esp-idf编译、串口烧入即可。接着就是配合printf打印,看看按下去的时候,是不是打印真的会发生变化即可。做到这一点,后面进行功能开发的时候,就可以把按键输入加到项目当中去了。
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
// Define BOOT button pin (BOOT button on ESP32 dev board is usually connected to GPIO0)
#define BOOT_BUTTON_PIN GPIO_NUM_0
static int cnt = 0;
void app_main(void)
{
// Configure GPIO0 as input mode with internal pull-up resistor enabled
gpio_config_t io_conf = {
.pin_bit_mask = (1ULL << BOOT_BUTTON_PIN),
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_ENABLE, // Enable pull-up resistor
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE // Disable interrupt
};
gpio_config(&io_conf);
printf("ESP32 BOOT button detection program started\n");
while (1) {
// Read button state (pressed state is LOW due to pull-up resistor)
int button_state = gpio_get_level(BOOT_BUTTON_PIN);
if (button_state == 0) {
printf("BOOT button pressed, %d!\n", ++cnt);
}else{
printf("BOOT button released, %d!\n", ++cnt);
}
vTaskDelay(100 / portTICK_PERIOD_MS); // Delay for 100ms
}
}