ESP32_开关按键控制

冇雨
2023-09-11 / 0 评论 / 138 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年09月13日,已超过467天没有更新,若内容或图片失效,请留言反馈。

1.学习目标

  1. 学习轻开关键检测电路及硬件原理
  2. 学习 ESP32 GPIO 作为输入时候的配置
  3. 掌握库函数读取 GPIO 状态
  4. 掌握开关按键检测程序

2.硬件设计及原理

  通过检测输入按键的高低电平来判断是断开状态还是启动状态
按键原理图.png
  从按键的原理图可知,这些按键在没有被按下的时候,GPIO 15引脚的输入状态为高电平(按键所在的电路不通),当按键按下时,GPIO 引脚的输入状态为低电平(按键所在的电路导通,引脚接到 GPIO4)。只要我们检测引脚的输入电平,即可判断按键是否
被按下。将检测到的状态用自带的LED灯表示出来,用户按键占用 ESP32 的引脚如下

按键引脚接引至引脚作用
GPIO4GPIO15按键开关
GPIO2LED灯显示

ESP32引脚图.png

3.代码实现

1.代码逻辑

  1. 初始化LED灯
  2. 初始化按键
  3. 检测按键状态
  4. 状态用LED显示并打印到串口
  5. 重复开关按键,检测是否准确
    状态改变串口.png

2.源码编写

#include <stdio.h>
#include <sdkconfig.h>
#include <driver/gpio.h>
#include <esp_log.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

#define Key_IO 4
#define LED_IO 2
#define Key_IO2 15

static const char *TAG = "example";

void key_read(void)
{
     if (gpio_get_level(Key_IO2==0)) //判断按键是否为接通
    {
        while (gpio_get_level(Key_IO2)==0)//等待松手
        {
        //灯亮
      gpio_set_level(LED_IO,1);
      ESP_LOGI(TAG,"The Led is turn");
        }
        
    }
    if (gpio_get_level(Key_IO2==1)) //判断按键是否断开
    {
        while (gpio_get_level(Key_IO2)==1)//等待松手
        {
            //灯灭
            gpio_set_level(LED_IO,0);
            ESP_LOGI(TAG,"The Led is off");
        }
        
    }
}

void app_main(void)
{
    //选择IO口
    esp_rom_gpio_pad_select_gpio(Key_IO);
     esp_rom_gpio_pad_select_gpio(Key_IO2);
    esp_rom_gpio_pad_select_gpio(LED_IO);
    //设置输入模式
    gpio_set_direction(Key_IO2,GPIO_MODE_INPUT);
    gpio_set_direction(Key_IO,GPIO_MODE_OUTPUT);   
    gpio_set_direction(LED_IO,GPIO_MODE_OUTPUT);
    while (1)
    {
        key_read();//按键识别

    }
}
0

评论

博主关闭了所有页面的评论