Как использовать
контакты GPIO0, GPIO2 и
GPIO15 в качестве выходов и входов на модулях ESP8266
Обновлено 24 декабря 2021 года – добавлено примечание о предотвращении мерцания реле GOIO0 при запуске
Обновлено 2 апреля 2018 года для отображения светодиодов ESP8266-01
Введение
ESP8266 - это недорогой чип с поддержкой Wi-Fi. Он поставляется в
различных типах модулей и может быть запрограммирован различными способами. Также
используются контакты и светодиоды ESP-01 и ESP-01S
Все модули обеспечивают доступность GPIO0 и GPIO2. Большинство модулей, кроме ESP8266-01, также обеспечивают доступ к GPIO15. Эти GPIO управляют запуском модуля и поэтому требуют особого обращения, если они вообще будут использоваться. GPIO6-GPIO11 также требуют специальной обработки, как описано ниже
Советы по программированию ESP8266 (сбой espcomm)
При программировании ESP8266 с использованием Arduino IDE (см.
ESP8266-01 Wifi Shield) вы иногда (часто) получаете сообщения об ошибках в Arduino IDE, такие как
ошибка esp_com open failed
ошибка: не удалось открыть COM33
ошибка: ошибка
espcomm_open ошибка: ошибка espcomm_upload_mem сбой
В этом случае выполните следующие действия, чтобы заставить его работать:-
- Убедитесь, что в меню Arduino Tools выбрана плата ESP8266
- Убедитесь, что вы выбрали COM-порт в меню инструментов Arduino
- Включите питание ESP8266 с заземлением GPIO0 (чистая подача питания, см. Ниже)
- Если 3) не устраняет проблему, отсоедините USB-кабель от компьютера, подождите несколько секунд и снова подключите его
- Если 4) не устраняет проблему, отсоедините USB-кабель от ПК, закройте Arduino IDE, откройте Arduino IDE, снова подключите USB-кабель.
Когда вы подаете питание на ESP8266 после заземления GPIO0, убедитесь, что оно подается чисто. Не искажайте связь. Светодиод ESP8266 должен просто загореться и гореть без каких-либо вспышек.
Если у вас все еще возникают проблемы, ознакомьтесь с
подробными проверками, описанными здесь (
локальная копия здесь)
Флэш–контакты GPIO - от GPIO6 до GPIO11
Большинство плат ESP8266 имеют флэш-чип, подключенный к некоторым или всем GPIO6-GPIO11. Большинство программ используют флэш-память, а также оперативную память, поэтому, если вы специально не убедитесь, что ваш код выполняется только из оперативной памяти, вы не можете использовать эти выводы для других целей.
Точное количество контактов, используемых в диапазоне от GPIO6 до GPIO11, зависит от типа флэш-памяти, используемой в вашем модуле. Quad IO использует 4 линии для передачи данных (всего 6 контактов) со скоростью, в 4 раза превышающей стандартную. Двойной ввод-вывод использует 2 линии для передачи данных (всего 4 контакта) Стандартный ввод-вывод использует одну линию для передачи данных (всего 3 контакта).
Если вы точно не знаете, что требуется вашей плате, вам лучше просто игнорировать GPIO6-GPIO11 и не ссылаться на них в своем коде.
Контакты GPIO0, GPIO2 и GPIO15
Эти выводы определяют, в каком режиме запускается чип.
Для нормального выполнения программы GPIO0 и GPIO2 необходимо подключить к Vcc (3,3 В), а GPIO15 необходимо подключить к GND, каждый с резистором в диапазоне от 2 Ком до 10 Ком. Резистор 2 Ком обеспечивает лучшую помехозащищенность. OLIMEX использует резисторы 2K, SparkFun использует резисторы 10K. Я использую резисторы 3K3.
Настройки этих входов проверяются только во время включения питания (или сброса) микросхемы. После этого выводы доступны для общего использования, но, как обсуждается ниже, их использование ограничено этими внешними подтягивающими резисторами.
Использование GPIO0, GPIO2 и GPIO15 в качестве выходов
Как отмечалось выше, на этих выводах уже будет резистор, подключенный либо к VCC (GPIO0 и GPIO2), либо к GND для GPIO15. Это определяет, как должно быть подключено любое внешнее устройство, например реле или светодиод + резистор. Для GPIO0 и GPIO2 между VCC и выводом должно быть подключено внешнее реле, чтобы оно не мешало работе подтягивающего резистора. И наоборот, между GND и выводом должно быть подключено внешнее реле, подключенное к GPIO15, чтобы оно не мешало действию понижающего резистора.
Для активации внешнего устройства GPIO0 или GPIO2 должны быть установлены на низкий уровень (активный НИЗКИЙ), а GPIO15 - на высокий (активный высокий).
На схеме ниже показано, как использовать GPIO0 и GPIO2 и GPIO15 в качестве выходов. Эта схема также включает в себя необходимые резисторы для снятия / снятия. Обратите внимание, что релейный модуль 5 В, управляемый GPIO0, имеет оптическую изоляцию и имеет отдельное общее соединение для входа. Важно, чтобы напряжение VCCA 5 В не подавалось на вывод ESP8266.
Как избежать мерцания реле при запуске
Обновление 24 декабря 2021 года – Когда ESP8266 включается / сбрасывается в обычном режиме, GPIO0 становится низким примерно на 100 мс. Это ненадолго включит реле, подключенное к GPIO0, как показано ниже. Чтобы избежать этого мерцания реле при запуске, припаяйте конденсатор емкостью от 470 мкФ до 1000 мкФ напряжением 6,3 В или выше к входным контактам оптоизолятора (после встроенного резистора) на самой плате реле. Проверьте с помощью мультиметра правильную полярность конденсатора. Этот конденсатор задержит реле примерно на 0,5-1 сек. Вы могли бы попробовать конденсатор до 220 мкФ. 1000 мкФ был протестирован и работает. Существует примерная схема
использования выводов и светодиодов ESP-01 и ESP-01S
Вот
схема в формате pdf.
Как перепрограммировать при использовании GPIO0 в качестве вывода
Примечание: GPIO0 is должен быть заземлен, чтобы перейти в режим программирования. Если ваш sketch перегоняет его слишком высоко, заземление может повредить ваш чип ESP8266.
Безопасный способ перепрограммировать ESP8266, когда ваш код управляет выходом GPIO0, состоит в том, чтобы: -
а) Выключить плату
; б) замкнуть GPIO0 на gnd
; в) включить плату, которая переходит в программный режим из-за короткого замыкания на GPIO0;
г) удалить короткое замыкание из GPIO0, чтобы не замкнуть вывод при запуске программы
e) перепрограммируйте плату
f) при необходимости включите питание платы.
Используя GPIO0, GPIO2 и GPIO15 в качестве входных данных.
Использование этих выводов в качестве входных данных немного сложно. Как отмечалось выше, при включении питания и во время сброса эти выводы необходимо поднимать или опускать по мере необходимости, чтобы модуль ESP8266 запустился в нормальном рабочем режиме. Это означает, что, как правило, вы не можете просто подключить внешний переключатель к этим выводам, потому что при включении питания вы обычно не можете гарантировать, что коммутатор не будет заземлять вход и, следовательно, не позволит модулю правильно запуститься.
Хитрость заключается в том, чтобы не подключать внешний коммутатор напрямую от GPIO0 или GPIO2 к GND, а вместо этого подключать его к другому выводу GPIO, который заземляется (как выход) только после запуска ESP8266. Помните, что при использовании в качестве выходов выводы GPIO обеспечивают подключение с очень низким сопротивлением либо к VCC, либо к GND в зависимости от того, являются ли они ВЫСОКИМИ или НИЗКИМИ.
Здесь будут учитываться только GPIO0 и GPIO2. Используя этот метод, вы можете получить один (1) дополнительный ввод, используя эти два (2) GPIO.
Аналогичный метод можно использовать для GPIO15, используя другой вывод GPIO для подключения его коммутатора к + VCC, но это не дает дополнительного входа, вы можете просто использовать другой вывод GPIO непосредственно в качестве входа.
В приведенной ниже схеме в качестве примера используется модуль ESP8266-01. Без использования этого трюка ESP8266-01 не имеет свободных контактов для использования в качестве входа, если вы уже используете контакты RX / TX для подключения UART.
Поскольку метод setup() sketch запускается только после запуска модуля ESP8266, безопасно сделать вывод GPIO0 НИЗКИМ и таким образом обеспечить заземление для S1, подключенного к GPIO2. Затем вы можете использовать digitalRead (2) в другом месте вашего эскиза, чтобы прочитать настройки переключателя.
Заключение
В этой короткой заметке показано, как использовать GPIO0, GPIO2 и GPIO15 в качестве выходных данных и как использовать дополнительный ввод, используя GPIO0 и GPIO2 вместе.