Управление светодиодом кнопкой на ESP32 (удержание)
Светодиод горит, когда кнопка нажата, и гаснет, когда её отпускают. Показывает, как используются цифровой входной пин ESP32 и встроенный подтягивающий резистор. Режим INPUT_PULLUP избавляет от внешнего резистора.

Видео
Схема

Исходный код
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Управление светодиодом кнопкой на ESP32 (удержание)
4// ─────────────────────────────────────────
5// Светодиод горит, пока кнопка нажата, и гаснет, когда её отпускают. Пин
6// кнопки использует внутреннюю подтяжку (INPUT_PULLUP), поэтому внешний
7// резистор не нужен.
8//
9// Пины:
10// GPIO 5 -> Красный светодиод (с резистором 220 ohm)
11// GPIO 4 -> Кнопка (другая ножка к GND)
12
13const int LED_PIN = 5; // Выход светодиода
14const int BUTTON_PIN = 4; // Вход кнопки
15
16void setup() {
17 pinMode(LED_PIN, OUTPUT);
18 pinMode(BUTTON_PIN, INPUT_PULLUP); // Без нажатия читается HIGH
19}
20
21void loop() {
22 // Нажатая кнопка притягивает пин к GND: LOW = нажата
23 if (digitalRead(BUTTON_PIN) == LOW) {
24 digitalWrite(LED_PIN, HIGH);
25 } else {
26 digitalWrite(LED_PIN, LOW);
27 }
28}
29
Частые вопросы
Как подключить кнопку с INPUT_PULLUP?
Одна ножка кнопки подключается к пину GPIO, другая — к GND. Встроенный подтягивающий резистор держит пин в HIGH; при нажатии кнопки пин притягивается к GND и читается как LOW. Внешний резистор не нужен.
Почему логика перевёрнута?
При использовании подтягивающего резистора значение равно HIGH, когда кнопка не нажата, и LOW, когда нажата. Поэтому условие 'if (digitalRead(button) == LOW)' в коде означает, что кнопка нажата.
У каких пинов нет встроенной подтяжки?
GPIO 34, 35, 36 и 39 работают только на вход, и у них нет встроенных подтягивающих или стягивающих резисторов. Если планируешь кнопку на этих пинах, нужно добавить внешний резистор 10 kΩ.
Можно ли заменить кнопку сенсорным датчиком?
Да, у ESP32 есть встроенные сенсорные пины (например, GPIO 4, 13, 14, 15, 27). С помощью `touchRead()` касание провода или металлической пластины можно определять как нажатие кнопки.
