esp32开发与应用(按键输入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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
    }
}
相关推荐
AOI小白新手上路2 小时前
韦东山 01_ARM架构与编程_2-1_处理器的区分MCU_MPU_AP_内容总结
嵌入式硬件
ysu_03142 小时前
TinyML 模型部署:从 Edge Impulse 到 STM32F103
驱动开发·stm32·嵌入式硬件·mcu·硬件架构·硬件工程·dsp开发
恒锐丰科技林技术员7 小时前
EG1196S:高压宽输入降压 DC‑DC 芯片,电动车工业电源的优选方案
经验分享·嵌入式硬件·硬件工程
>Andre<8 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
剑指offer.8 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
糖糖单片机设计9 小时前
基于STM32的电子密码锁设计与实现(矩阵键盘+防拆检测+GSM远程报警)
人工智能·stm32·单片机·嵌入式硬件
cyl12240719 小时前
2026年10月嵌入式培训指南:在“AI+嵌入式“爆发前夜,如何选择你的职业跳板?
人工智能·嵌入式硬件
充哥单片机设计10 小时前
【STM32开源项目】智能家电控制系统
stm32·单片机·嵌入式硬件·毕业设计·智能家电控制·家电控制
深圳市恒锐丰科技杨生11 小时前
EG2121 250V 单路半桥栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
深圳市恒锐丰科技杨生12 小时前
EG1165 / EG1165S 600V 半桥 PWM 控制芯片|屹晶 EGmicro
嵌入式硬件·硬件工程