Кнопки в ESP32

Рассмотрим как подключить и использовать кнопки в ESP32. Программировать будем в среде программирования Espressif IDE.

Работу кнопок в ESP32 рассмотрим на примере китайской кнопки на 4 контакта.

Кнопки в ESP32

Данные кнопки имеют 4 контакта и внутри устроены, как показанно на рисунке ниже:

схема кнопки

Кнопки в ESP так же как и в других микроконтроллерах работают как ключ. При нажатии ключ закрывается и ток течет через кнопку, при размыкании ключ открывается и ток через контакты не течет.

Подключение кнопки к ESP32

Что бы начать работать с кнопкой, GPIO ESP32 необходимо настроить на вход и включить внутреннюю подтяжку. Хоть мы и будем использовать при подключении резистор, подтяжка лишней не будет.

Есть несколько способов подключения кнопки к ESP32:

  • Стандартный способ подключения через резистор с использованием подтяжки к питанию или земле. Когда кнопка не нажата, то на порту микроконтроллера логический 0. Когда происходит нажатие кнопки, на порту появляется логическая 1. Подтяжка должна быть к земле. Можно сделать и в обратном направлении: логическая 1, когда нет нажатия и логический 0 когда нажатие произошло. Подтяжка должна быть к питанию. Используйте первый вариант. В таком случае потребление всей схемы. ниже, чем во втором. Для такого способа используется один вывод для одной кнопки.
Варианты подключения кнопок
  • Второй способ применяется когда нужно сберечь выводы. В схему подключения включается диоды, тогда нажатие кнопки кодируется кодом нажатия для этой кнопки. Вычислить количество подключаемых кнопок можно по формуле: N GPIO МК =  2N  – 1 кнопок.
подключение кнопок через диод

Тогда, исходя из схемы, для кнопки S1 код нажатия будет следующим PB2 – 1, PB0 – 0; Для кнопки S2: PB2 – 0, PB1 – 1; Для кнопки S3 – PB1 = PB2 = 0;

Программирование кнопки

Схема подключения кнопки выглядит следующим образом:

Схема подключения кнопки к ESP32

В нашем случае, когда кнопка не нажата у нас порт ESP32 подтянут к 0. Когда происходит нажатие Через кнопку начинает течь ток и на порту появляется 1. Ее мы и будем фиксировать.

В данной статье кнопку обрабатывать будем в бесконечном цикле. Но когда программа большая лучше использовать прерывания или задачи в операционной системе. О прерываниях в ESP32 мы поговорим в следующих статьях.

#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include  "driver/gpio.h"

#define GPIO_Button  GPIO_NUM_5

void app_main(void)
{
	gpio_reset_pin(GPIO_Button);
	gpio_set_direction(GPIO_Button, GPIO_MODE_INPUT);
	gpio_set_pull_mode(GPIO_Button, GPIO_PULLDOWN_ENABLE);
		
    while (true) 
    {
        if (gpio_get_level(GPIO_Button)==1)
        {
        	printf("Button detect!\n");
        }else printf("Button not press!\n");
        sleep(1);
    }
}
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии