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
    }
}
相关推荐
清风6666666 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
azwsm7 小时前
电路元器件和GPIO控制器
单片机·嵌入式硬件
kebidaixu10 小时前
FreeRTOS 移植到 STM32F407VETX 记录(一)
stm32·单片机·嵌入式硬件
CSDN官方博客11 小时前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
点灯小铭11 小时前
基于单片机的数码管定时插座设计与定时开关功能实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
云栖梦泽11 小时前
玩转RK3506SDK
linux·嵌入式硬件
数智工坊13 小时前
机器人四大主控板系统分层选型指南:树莓派、ESP32、STM32与Arduino的能力边界与实战定位
stm32·嵌入式硬件·机器人
进击的小头14 小时前
第8篇:IGBT 从零到精通:核心原理、关键参数、选型指南与工业级应用要点
经验分享·嵌入式硬件·学习
点灯小铭14 小时前
基于单片机的多模式智能洗衣机设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
项目題供诗14 小时前
STM32-AD单通道&AD多通道(十九)
stm32·单片机·嵌入式硬件