Перейти к содержанию

Нужен ли резистор для кнопки на 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 В может не загрузиться. Такую кнопку лучше перенести на другой вывод.

Источники

  1. 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
  2. Espressif. ESP32-DevKitC V4 User Guide (esp-dev-kits, latest) — кнопка Boot на плате — удерживая Boot и нажимая EN, переводят модуль в режим загрузки прошивки; выводы D0–D3, CMD и CLK заняты под SPI-флеш, их не используют

Нашли ошибку?