#104Новичок

Управление светодиодом кнопкой на ESP32 (удержание)

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

4.6(36)
55 собрано
Управление светодиодом кнопкой на ESP32 (удержание)
Как дверной звонок: свет горит, пока нажимаешь, и гаснет, когда отпускаешь. ESP32 всё время слушает кнопку; пока она зажата, светодиод горит, а как только ты её отпускаешь, он гаснет. Ты самым простым способом видишь, как плата чувствует прикосновение из внешнего мира.

Видео

Схема

Управление светодиодом кнопкой на ESP32 (удержание) - Circuit

Исходный код

C++ (Arduino IDE)
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()` касание провода или металлической пластины можно определять как нажатие кнопки.