• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Равнозначны ли все GPIO ESP8266?

Собстн-но, вопрос в названии топика. Возник в связи с необходимостью создания платки универсального переходника для есп, который можно будет использовать на любом из 15 девайсов разрабатываемой системы. Большинство девайсов функционально уникальны, т.е. довольно сильно отличаются друг от друга по назначению, и решаемым задачам. Число потребных пинов GPIO у конкретного девайса для подключения внешних приблуд может быть от 1-2 до 8-10. Это и кнопики (от 1 до 8 на разных девайсах), и исполнительные устройства (до 4-6 штук на девайс), и семи-сегментные индикаторы, и акселерометры, и наконец, вход ADC для мониторинга батарей питания каждого девайса.
Конечно, можно тупо сделать переходник с 22-мя контактными штырями, а выбор конкретных GPIO делать на основной плате каждого девайса, но этот путь мне не кажется оптимальным и обоснованным.

Есть ли статистика по "беспроблеммности" использования GPIO, в том числе и GPIO6 - GPIO11?
Если ли рекомендации, какие пины использовать однозначно не следует? (Например - GPIO16, который может использоваться для вывода есп из спячки), и т.д. Не хочется наступать на грабли, если кто-то уже знает, как их обойти.

P.S. Если этот вопрос уже обсуждался, ткните носом в тему. Форум просмотрел, но ничего похожего не нашел.
 
...а вообще надо читать Даташит.
Согласен, даташит читать надо. Но судя по тому, что здесь часто говорят, верить китайской доке нужно с большими опасениями. Чем я, собственно, и занимался всю прошедшую неделю - читал, делил на два, а из остатка пытался еще и корень извлечь. :)
В итоге этой читки, и некоторых практических экспериментов, пришел в следующим выводам:
1) GPIO6...11 следует совсем забыть, и не использовать их в прикладных задачах (когда не нужна внешняя флешка).
2) GPIO15 - постоянно должен быть подтянут внешним резистором к "земле", поэтому если на него и рассчитывать, то только в качестве выходного пина - какой-нить датчик к нему подцепить вряд ли удастся.
3) GPIO16 тоже лучше оставить в покое. На случай, когда потребуется выводить модуль из спячки. Хотя и этот вариант (по крайней мере для меня) довольно не однозначный - пробуждение целесообразно выполнять дистанционно (по воздуху), а если для этого нужно коротить 16 на Res на самом девайсе, то лучше просто отключать и включать питание.
4) GPIO1, 3, в принципе, функциональны, если речь не идет о необходимости реализации сериал-порта для внутрисистемной перепрошивке модуля. Но если делать это "по воздуху", то эти пины вполне можно юзать для своих целей. Однако создалось впечатление, что GPIO1 сам "подтягивается" к Vcc. Хотя возможно, это как раз связано с режимом сериал-порта. Нужно будет дополнительно проверить этот момент.
5) GPIO0 и 2. Субъективно: эти пины толи с норовом, толи тормознутые - их готовность к работе происходит с некоторой задержкой, но после того, как они "успокаиваются", вроде работают нормально.
6) В итоге, самыми адекватными для прикладных целей оказались всего пять пинов: GPIO4, 5, 12, 13 и 14. Как юные пионЭры - всегда готовы! Если этого мало, то с некоторыми ограничениями можно добавить еще и GPIO0, 1, 2 и 3. В самом крайнем случае - еще GPIO15.
В итоге получается девять-десять пинов для "общеюзерских" задач.

Если где-то ошибся, подскажите, плз.
 

AndrF

Active member
Если где-то ошибся, подскажите, плз.
В принципе все верно. От себя:

GPIO0 и 2. Вполне нормальные пины - использовать можно как на вход, так и на выход. Только не надо сажать их на землю при включении. Работать же в качестве I2C шины они, к примеру, вполне могут.

GPIO15 - не "постоянно подтянут внешним резистором к "земле"", а лишь при включении - 10 кОм вполне достаточно. Использовать как входной вполне можно. Главное чтобы датчик не был с открытым коллектором и не сажал вход на плюс в момент включения.

GPIO1, 3 - эти стараюсь не трогать, оставляя их для прошивки через USB при отладке - так все же удобнее.

GPIO9, 10 - в принципе использовать можно, но посложней. GPIO10 на выход я лично пробовал использовать - проблем пока не заметил. С GPIO9 посложней - в интернете можно найти описание как, но не пробовал, да и стоит ли овчинка вообще выделки...

P.S
При острой нехватке пинов вполне можно использовать чипы расширения интерфейса по I2C - они недорогие. Но мне пока подобное и не требовалось.
 
Последнее редактирование:
AndrF, спасибо за комментарий, но я отказался от применения 8266 в пользу nrf24 из-за проблем, возникающих в реальном времени из-за непредсказуемости таймингов передачи команд управления секундомерами.
Если интересно, посмотрите мою тему "Система хронометража прохождения гоночной трассы" в разделе "Другие проекты". Хотя, судя по нулевой активности уважаемых форумчан, тема никого не интересует. :(
 

alexhaf

Member
В принципе все верно. От себя:

GPIO0 и 2. Вполне нормальные пины - использовать можно как на вход, так и на выход. Только не надо сажать их на землю при включении. Работать же в качестве I2C шины они, к примеру, вполне могут.

GPIO15 - не "постоянно подтянут внешним резистором к "земле"", а лишь при включении - 10 кОм вполне достаточно. Использовать как входной вполне можно. Главное чтобы датчик не был с открытым коллектором и не сажал вход на плюс в момент включения.

GPIO1, 3 - эти стараюсь не трогать, оставляя их для прошивки через USB при отладке - так все же удобнее.

GPIO9, 10 - в принципе использовать можно, но посложней. GPIO10 на выход я лично пробовал использовать - проблем пока не заметил. С GPIO9 посложней - в интернете можно найти описание как, но не пробовал, да и стоит ли овчинка вообще выделки...

P.S
При острой нехватке пинов вполне можно использовать чипы расширения интерфейса по I2C - они недорогие. Но мне пока подобное и не требовалось.
Скажите тут все ли верно?
1619193360405.png

1619193449884.png

GPIO2 это какой по цифре пин в прошивке? 17 или 2 ?
 

Вложения

Сверху Снизу