GPIO — вывод общего назначения. По умолчанию он ничего не делает: режим задаётся программно, и от режима зависит поведение.
Режимы:
Вход (input) — читает уровень. Обычно с подтяжкой (pull-up) или без (floating). Без подтяжки «висит в воздухе».
Выход (output) — выдаёт 0 или 3.3 В, до 12–20 мА. Больше — нужен транзистор или драйвер.
Аналоговый вход (ADC) — читает напряжение (не все пины).
Альтернативная функция (AF) — пин отдан периферии: UART, I2C, SPI, ШИМ, таймер.
Ограничения, которые сжигают пины:
— Ток на пин: 12 мА у ESP32 (абсолютный максимум 40 мА, но не постоянно), 20 мА у AVR. Светодиод напрямую — можно, но с резистором; мотор — никогда.
— Суммарный ток: 100–200 мА на всю плату, дальше просадка питания.
— Некоторые пины заняты: у ESP32 GPIO6–11 подключены к flash, их трогать нельзя; GPIO0, 2, 12, 15 влияют на режим загрузки.
— Вход 5 В на 3.3-вольтовый пин — путь к деградации.
Практика:
— Светодиод: пин → резистор 220–1000 Ом → светодиод → земля.
— Кнопка: пин → кнопка → земля, подтяжка внутри.
— Реле/мотор: пин → резистор → затвор MOSFET, дальше силовая часть.
— Долгий провод: добавь резистор 100–330 Ом последовательно и конденсатор 100 нФ на землю.
И правило: перед первым включением смотри распиновку своей конкретной платы. «ESP32» — это семейство, у разных плат разные пины и разные ограничения.
GPIO — единственный мост между программой и железом; ошибка в режиме или токе стоит деталей.
Возьми плату и помигай светодиодом через резистор 1 кОм. Потом попробуй без резистора (только если не жалко светодиод) — увидишь разницу в токе.
Проверь себя
Можно ли подключить светодиод к пину без резистора, если пин даёт ровно 3.3 В?
Нет. У светодиода нет внутреннего ограничения тока, и он возьмёт столько, сколько даст пин: десятки миллиампер, перегрев пина и смерть светодиода. Резистор обязателен.
-
Wikipedia: General-purpose input/output
режимы входа-выхода
-
ESP-IDF: GPIO и прерывания
настройка GPIO в ESP-IDF