Коротко:
- Нельзя занимать выводы GPIO 6, GPIO 7, GPIO 8, GPIO 9, GPIO 10 и GPIO 11: на них висит флеш-память.
- Выводы GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38 и GPIO 39 работают только на вход и без внутренней подтяжки.
- Выводы GPIO 0, GPIO 2, GPIO 5, GPIO 12 и GPIO 15 читаются при запуске, поэтому мешать им нельзя.
- GPIO 1 и GPIO 3 заняты прошивкой и отладочным выводом.
- ADC2 не работает при включённом Wi-Fi, все аналоговые датчики уходят на ADC1.
У классического ESP32 34 вывода, но свободных из них заметно меньше. Часть занята флеш-памятью, часть читается при запуске платы, часть конфликтует с Wi-Fi. Ошибка в раскладке выглядит как непонятное поведение прошивки, хотя причина в выбранном выводе.
Ниже карта ограничений по группам и порядок планирования. Если вы ещё выбираете платформу, сравнение плат разобрано в статье ESP32 или ESP8266.
| Группа | Выводы | Ограничение |
|---|---|---|
| Флеш-память | GPIO 6, GPIO 7, GPIO 8, GPIO 9, GPIO 10, GPIO 11 | Не использовать |
| Только вход | GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38, GPIO 39 | Нет подтяжки, только ADC1 |
| Strapping | GPIO 0, GPIO 2, GPIO 5, GPIO 12, GPIO 15 | Влияют на запуск платы |
| UART0 | GPIO 1, GPIO 3 | Прошивка и отладочный вывод |
| ADC1 | GPIO 32, GPIO 33, GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38, GPIO 39 | Работает при Wi-Fi |
| ADC2 | GPIO 0, GPIO 2, GPIO 4, GPIO 12, GPIO 13, GPIO 14, GPIO 15, GPIO 25, GPIO 26, GPIO 27 | Недоступен при включённом Wi-Fi |
| ЦАП | GPIO 25, GPIO 26 | Только у классического ESP32 |
Сколько выводов у ESP32 и почему не все доступны
У классического ESP32 всего 34 вывода с номерами от 0 до 39, при этом номера 20, 24 и 28-31 отсутствуют. Выводы GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38 и GPIO 39 работают только на вход и не могут управлять ничем. Остаётся 25 выводов, которыми можно управлять, и 6 входных.
Свобода эта кажущаяся. Часть выводов занята флеш-памятью, часть влияет на запуск, часть конфликтует с Wi-Fi. На модулях с внешней памятью PSRAM дополнительно заняты GPIO 16 и GPIO 17. Поэтому перед разводкой смотрят не на количество выводов, а на их ограничения.
Пины, занятые флеш-памятью
Выводы GPIO 6, GPIO 7, GPIO 8, GPIO 9, GPIO 10 и GPIO 11 подключены к встроенной флеш-памяти и заняты служебной шиной. Их нельзя использовать как обычные входы и выходы: плата не запустится или будет вести себя непредсказуемо.
На большинстве плат эти выводы вообще не выведены на гребёнку. Если на вашей плате они подписаны, это повод не трогать их вовсе. Проверьте схему платы до подключения датчиков и реле, особенно если плата нестандартная.
Входные пины GPIO 34-39
Выводы GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38 и GPIO 39 работают только на вход. У них нет внутренней подтяжки, поэтому кнопку или датчик с открытым коллектором к ним без внешнего резистора не подключить: уровень будет плавать.
Попытка включить на них выход приведёт к ошибке компиляции, а если среда разработки пропустит код, устройство просто не сработает. Зато это лучшие выводы для аналоговых датчиков: они относятся к блоку ADC1, который работает независимо от режима связи. Управлять реле или светодиодом с них нельзя.
Strapping-пины GPIO 0, GPIO 2, GPIO 5, GPIO 12 и GPIO 15
Пять выводов читаются при запуске и задают режим загрузки: GPIO 0, GPIO 2, GPIO 5, GPIO 12 и GPIO 15. Если внешняя схема притянет их не в ту сторону, плата уйдёт в режим прошивки или не запустится.
GPIO 0 при низком уровне на старте включает режим загрузчика. GPIO 12 связан с выбором напряжения флеш-памяти: подтяжка к высокому уровню при флеш-памяти на 1,8 В опасна для платы. Сами выводы использовать можно, но подключать к ним лучше то, что не мешает запуску: кнопку, светодиод, датчик, который включается уже после старта.
Пины UART0 и прошивка через USB
GPIO 1 это передача, GPIO 3 это приём первого аппаратного UART. Через них плата общается с USB-переходником и грузит прошивку. Если повесить на них датчик или реле, прошивка может не загрузиться, а в порт полетит мусор от устройства.
Для второго UART используют другие свободные выводы, но их номера зависят от среды разработки: их назначают вручную, поэтому подходящие выводы оставляют свободными заранее. Отладочный вывод в консоль по умолчанию идёт на тот же порт, что и прошивка, поэтому GPIO 1 и GPIO 3 удобно оставить нетронутыми.
АЦП: ADC1 и конфликт ADC2 с Wi-Fi
Аналоговые входы у классического ESP32 разбиты на два блока. ADC1 это выводы GPIO 32, GPIO 33, GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38 и GPIO 39, они работают всегда. ADC2 это GPIO 0, GPIO 2, GPIO 4, GPIO 12, GPIO 13, GPIO 14, GPIO 15, GPIO 25, GPIO 26 и GPIO 27.
При включённом Wi-Fi блок ADC2 заблокирован: драйвер беспроводной связи забирает его ресурсы себе, и считать аналоговый сигнал с этих выводов невозможно. Практический вывод простой: если устройство работает по Wi-Fi, все аналоговые датчики переносят на ADC1. Точность в битах зависит от чипа и настроек, поэтому её берут из документации, а не из общей статьи. Если собранное устройство публикует данные в умный дом, обмен удобно строить через MQTT в Home Assistant.
Ёмкостный тач и ЦАП
Десять выводов поддерживают ёмкостный тач: GPIO 0, GPIO 2, GPIO 4, GPIO 12, GPIO 13, GPIO 14, GPIO 15, GPIO 27, GPIO 32 и GPIO 33. Часть из них одновременно strapping-пины, поэтому для тач-кнопки лучше выбирать свободные от запуска, например GPIO 27, GPIO 32 и GPIO 33.
Два вывода GPIO 25 и GPIO 26 на классическом ESP32 отдают настоящее аналоговое напряжение, это ЦАП. Оба назначения есть только у классического чипа: у ESP32-S3 и ESP32-C3 их нет, там карта выводов устроена иначе.
I2C, SPI и типовые назначения
По умолчанию во многих средах разработки I2C назначается на GPIO 21 и GPIO 22, а SPI на GPIO 18, GPIO 19, GPIO 23 и GPIO 5. Эти номера это соглашение, а не жёсткое требование: шины можно переназначить почти на любой свободный вывод.
GPIO 5 входит в список strapping-пинов, поэтому под выбор устройства SPI он подходит хуже остальных. Для шин важнее не конкретные номера, а то, чтобы выводы не были заняты флеш-памятью и не мешали загрузке. Если в проекте несколько шин, их распределяют так, чтобы они не пересекались.
Как спланировать раскладку и что перепроверить
Сначала выпишите занятые выводы флеш-памяти и UART, потом отметьте strapping-пины. Дальше разложите аналоговые датчики на ADC1: это GPIO 32, GPIO 33, GPIO 34, GPIO 35, GPIO 36, GPIO 37, GPIO 38 и GPIO 39. Только после этого распределяйте цифровые выходы на реле и светодиоды и оставьте один или два вывода свободными на будущее.
Обязательно перепроверьте карту для своего варианта чипа. У ESP32-S3 и ESP32-C3 другая нумерация и другие ограничения, поэтому таблица от классического ESP32 к ним не подходит. Как собранное устройство потом подключают к серверу, разобрано в статье ESP32 в Home Assistant.
Что делать, если свободных выводов не хватает
Если свободных выводов не хватает, можно использовать шинные расширители, сдвиговые регистры или аналоговые мультиплексоры. Для I2C подключают шинный расширитель, где одна пара выводов ESP32 управляет восемью дополнительными линиями. Адрес устройства задаётся перемычками, поэтому к одной шине можно прикрепить несколько микросхем. Такой способ не заменяет быстрые выводы, не подходит для ШИМ и прерываний. Сдвиговый регистр на SPI добавляет восемь выходов, а при каскадировании их количество увеличивается. Аналоговый мультиплексор позволяет подключить несколько датчиков к одному входу ADC1, переключая их по очереди. Все методы требуют дополнительных компонентов, но позволяют расширить функционал без перепайки платы.
Частые ошибки при разводке
При подключении реле и моторов к GPIO не используйте их напрямую: нужен транзистор или модуль реле, иначе вывод выходит из строя. Пины флеш-памяти и GPIO 1, GPIO 3 нельзя занимать под датчики. Кнопки на страппинг-пин не ставьте так, чтобы они притягивали его при включении. Кнопки и герконы подключайте с внешним резистором, если вывод без подтяжки. Датчики на 5 В нельзя подключать к выводам без преобразователя уровня. Питание игнорировать нельзя: рядом с модулем связи и реле ставят конденсаторы для подавления помех.
Частые вопросы
Какие выводы ESP32 нельзя использовать вообще?
GPIO 6, GPIO 7, GPIO 8, GPIO 9, GPIO 10 и GPIO 11: они заняты флеш-памятью, плата с нагрузкой на них не запустится.
Почему GPIO 34 нельзя настроить на выход?
Это входной вывод. Он физически не имеет выходного каскада, поэтому работает только на приём сигнала.
Что такое strapping-пин?
Это вывод, уровень которого плата читает при запуске и по нему выбирает режим загрузки. Мешать этому уровню внешней схемой нельзя.
Почему ADC2 не работает при включённом Wi-Fi?
Блок ADC2 занят драйвером беспроводной связи. Пока Wi-Fi включён, аналоговые измерения на этих выводах недоступны.
Какие выводы подходят для реле и кнопки?
Обычные цифровые выводы, например GPIO 18, GPIO 19, GPIO 21, GPIO 22, GPIO 23, GPIO 25 и GPIO 26. GPIO 5 лучше не занимать, а реле подключать через транзистор или готовый модуль.
Отличаются ли выводы у ESP32-S3 и ESP32-C3?
Да, карта выводов у них другая. Номера и ограничения берут из документации на конкретный чип, таблица от классического ESP32 к ним не подходит.




Комментарии
Войдите, чтобы оставить комментарий.