Нужен ли резистор для кнопки на ESP32?
Обновлено Редакция GAW
Встроенные подтягивающие резисторы есть почти у всех выводов ESP32: по даташиту около 45 кОм вверх или вниз. Для кнопки этого обычно достаточно: вывод подтягивают к питанию, кнопку замыкают на землю, и нажатие читается как ноль. В Arduino это режим INPUT_PULLUP, в ESP-IDF — включение подтяжки в настройке вывода.
| Выводы ESP32 | Встроенная подтяжка | Кнопка без резистора | Замечание |
|---|---|---|---|
| Обычные GPIO (например, 4, 13, 14, 18, 19, 21–23, 25–27, 32, 33) | есть, около 45 кОм | да | — |
| GPIO34–39 | нет | нет | нужен внешний резистор |
| GPIO0, 2, 5, 12, 15 | есть | да, с оговорками | выводы обвязки загрузки |
| GPIO6–11 (на модулях) | — | нет | заняты флеш-памятью |
Выводы обвязки загрузки
GPIO0, GPIO2, GPIO5, GPIO12 и GPIO15 при сбросе определяют режим загрузки и настройки чипа. Если кнопка нажата в момент включения, ESP32 может уйти в режим прошивки (GPIO0) или выставить неверное напряжение флеш-памяти (GPIO12). Кнопки на них допустимы, только если при старте их никто не нажимает. Подробности — на странице strapping-выводы ESP32.
Когда нужен внешний резистор
Наш расчёт: подтяжка 45 кОм при 3,3 В даёт ток около 73 мкА — это слабая подтяжка, что совпадает с цифрой даташита около 75 мкА. На длинном проводе к кнопке наводки могут перебить такой ток, поэтому для выносных кнопок ставят внешний резистор 4,7–10 кОм.
Как это устроено у Arduino, рассказано в ответе «Какой резистор нужен для кнопки Arduino?», сам принцип — в термине «подтягивающий резистор», а пробуждение кнопкой — в ответе «Почему ESP32 не просыпается от кнопки?».
Похожие вопросы
Какой резистор поставить на GPIO34–39?
Любой обычный для кнопки — например, 10 кОм к питанию 3,3 В, кнопка к земле. Встроенных подтяжек у этих выводов по даташиту нет, и без внешнего резистора вход «висит» и ловит наводки.
Можно ли ставить кнопку на GPIO0?
Можно, именно так на DevKitC подключена кнопка Boot. Но если кнопку нажать при включении или сбросе, ESP32 войдёт в режим загрузки прошивки, а не запустит программу.
Почему кнопка на GPIO12 мешает загрузке?
GPIO12 (MTDI) — вывод обвязки загрузки: его уровень при сбросе задаёт напряжение внутреннего стабилизатора флеш-памяти. Если кнопка подтягивает его к питанию в момент старта, модуль с флеш-памятью на 3,3 В может не загрузиться. Такую кнопку лучше перенести на другой вывод.
Источники
- Espressif. ESP32 Series Datasheet v5.3 — табл. 5-3 — сопротивление встроенной подтяжки вверх и вниз около 45 кОм, VIL до 0,25 × VDD, VIH от 0,75 × VDD; приложение A — GPIO34–39 только входы, без выходного драйвера и без встроенных подтяжек, ток слабой подтяжки около 75 мкА; разд. 3, табл. 3-1 — выводы обвязки загрузки и их подтяжки по умолчанию: GPIO0 — вверх, GPIO2 — вниз, MTDI (GPIO12) — вниз, MTDO (GPIO15) — вверх, GPIO5 — вверх; уровни защёлкиваются при сбросе; MTDI задаёт напряжение внутреннего LDO VDD_SDIO
- Espressif. ESP32-DevKitC V4 User Guide (esp-dev-kits, latest) — кнопка Boot на плате — удерживая Boot и нажимая EN, переводят модуль в режим загрузки прошивки; выводы D0–D3, CMD и CLK заняты под SPI-флеш, их не используют
Нашли ошибку?
Смотрите также
- Какой резистор нужен для кнопки Arduino?INPUT_PULLUP или внешние 10 кОм: схема, ток и расчёт
- Подтягивающий резисторPull-up и pull-down: определённый уровень на свободной линии
- Strapping-выводы ESP32Какие GPIO читаются при сбросе: загрузка, напряжение флеш-памяти, JTAG — для ESP32, S2, S3, C2, C3, C5, C6, H2, P4
- Почему ESP32 не просыпается от кнопки?Будят только RTC GPIO, и подтяжка нужна во сне