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
    }
}
相关推荐
追兮兮2 小时前
告别手动搭建Keil工程!MCUQuickStart一键生成STM32/GD32工程模板,打开即编译
stm32·单片机·嵌入式硬件·gd32·keil5
不会武功的火柴2 小时前
SystemVerilog语法(9)-验证基础与简单Testbench
嵌入式硬件·fpga开发·fpga·systemverilog·硬件描述语言·rtl·uvm验证
XINVRY-FPGA2 小时前
XC7Z020-2CLG484I Xilinx Zynq-7000 SoC FPGA
嵌入式硬件·fpga开发·云计算·硬件工程·fpga
XMAIPC_Robot3 小时前
RK3588 PLC AMP 核隔离配置 + RT‑Thread 实时优化 + FPGA 接口定义 + CODESYS 工程
人工智能·嵌入式硬件·深度学习·fpga开发
Darth Nihilus3 小时前
Horizon Journey 5 Evaluation and Development Kit(四)
嵌入式硬件·汽车
yong99903 小时前
STC15W4K32S4系列单片机驱动nRF24L01 2.4G无线接收方案
单片机·嵌入式硬件
淘晶驰AK3 小时前
农业物联网 / 温室:组态屏监控系统搭建教程
嵌入式硬件
崇山峻岭之间3 小时前
单片机蜂鸣器实验
单片机·嵌入式硬件
西城微科方案开发3 小时前
厨房电子秤MCU芯片解决方案
单片机·嵌入式硬件