Рассмотрим как подключить и использовать кнопки в ESP32. Программировать будем в среде программирования Espressif IDE.
Работу кнопок в ESP32 рассмотрим на примере китайской кнопки на 4 контакта.
Данные кнопки имеют 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 подтянут к 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); } }