пʼятниця, 18 серпня 2017 р.

ESP8266 Wi-FI и Arduino и MQTT брокер

И так неделька прошла не зря. Решил поработать с модулями на основе ESP8266. И был очень приятно удивлен. Статья памятка.

У меня имеются 2 модуля:

С лева модуль, который мне не удалось идентифицировать. Для нормальной работы нужно предварительное подключение управляющих пинов. по Схеме которую я приведу ниже. 
С права полностью готовый к работе модуль ESP-01, со всеми необходимыми компонентами.

Программатор



И так, в качестве программатора, вернее переходника USB-TTL, я использую свой любимый Arduino Nano. C той лишь оговоркой, что контроллер в состоянии сброса, то есть вывод RST замкнут с землей GND.

Хорошая, на мой взгляд, статья в которой я подчерпнул необходимую информацию для первого подключения модуля. Картинки из статьи по ссылке которую я привел.

 И так подключаюсь по схемке с права. Ардуино дает на выходе 5В сигналы, а модуль с WIFI питается от отдельного преобразователя на 3.3В. 
В случае с синим модулем, достаточно подключить (цвета проводов согласно схеме выше)

Красный — питание 3,3в

Черный — GND

Желтый — на стороне ESP8266 — RX, на стороне USB-TTL — TX

Зеленый — на стороне ESP8266 — TX, на стороне USB-TTL — RX

Оранжевый — CH_PD (CHIP ENABLE) — должен быть всегда подтянут к питанию

Синий — GPIO0 — подключен через выключатель к земле для включения режима перепрошивки модуля. Для обычного старта модуля GPIO0 можно оставить никуда не подключенным.

Для перевода модуля в режим программирования (синий модуль. тка как там подключены все необходимые сопротивления подтяжки): замыкаем GPIO0 на землю GND.  Отключаем CH_PD от питания и подключаем обратно. Модуль в режиме программирования.

Среда программирования

PS: Как только подключил модуль, скачал ESplorer, как написано в статье по подключения. Поигрался AT командами. Особо добавить нечего. Для дальнейшей работы не понадобилось.

В качестве среды программирования решил использовать знакомую мне Arduino IDE. 
То есть чип ESP8266 можно использовать как ардуино, только чип этот работает быстрее (80/160Мгц вместо 16)  с WI-FI на борту. 
Для использования Arduino IDE в качестве среды разработки для ESP8266 необходимо установить ядро ESP8266 в Arduino IDE. 
Статья с подробными шагами здесь. Что приятно, так это то что на украинском :)
Замечу что для успешного поиска ядра необходимо прописать к репозиторию. Я на это в начале не обратил внимания. И не мог понять почему же ядро не ищется. В статье все это описано. 
В кратце скриншоты с приведенной выше статьи:






Вместе с ядром добавляется много примеров по которым можно понять как работает модуль. 
Проблем с загрузкой программы в синий модуль не было. С белым пришлось повозиться. GPIO15 прицепить на GND. и GPIO2 на 3.3В (подчерпнул информацию здесь). И только тогда все начало программироваться.
На синий модуль получается загружать программу даже на скорости 512000. В белый загружается на 115200. И я не разобрался с чем это связано. Если кто то подскажет, буду благодарен.

Обмен сообщениями. Иначе говоря управление устройствами.

Окей. модуль запустил. программировать научился. 
Теперь нужно решить вопрос ради которого это было затеяно. Например есть 10 устройств, при достижении определенных условий на каком-то из них, необходимо передать сигнал на другое устройства. А именно для создания квесткомнаты под ключ. В которой все готовые устройства подключаются в розетку. А все остальные сигналы передаются по воздуху. 

Будем использовать протокол MQTT. 
MQTT предполагает что есть клиенты и сервер, через который все клиенты обмениваются сообщениями. Все соощения имеют "тему", по которой необходимые сообщения можно фильтровать, и реагировать только на сообщения предназначенные для данного конкретного устройства. 
Система кросплатформенна, по этому не возникает проблем с имплементацией в Windows. amdroid, linux (raspberry), IOS.
И так для быстрого старта решил установить MQTT брокер на рабочей машине под управлением Win7 x64. 
Замечу, что нужно устанавливать openSSL версии 1_0_2L (файл  Win32OpenSSL_Light-1_0_2L.exe), так как более новые файлы не содержат необходимых библиотек для запуска брокера. 
Установил брокер. Служба после перезагрузки запустилась. Было отличие в этом
но запись с портом 1883 была. 
Далее установил библиотеку PubSubClient. Это библиотека для работы с MQTT на ардуино и EthernetShield. Но там есть и пример для ESP8266.
В примере указываем имя и пароль для WIFI, и IP адрес машины на которой запущен брокер. 
Так же заменяю BUILTIN_LED на BUILTIN_LED_ и указываю номер вывода 2. Светодиод подключаю на GPIO2 и GND. 
Зашиваю счек в контроллер. И через некоторое время наблюдаю в терминале о том что подключение к WiFi успешно, и о том что каждую секунду отправляются сообщения. В MQTT spy создаю топик с названием #, и наблюдаю сообщения от модуля. Так же при отправке сообщения 1 или 0 из MQTT Spy с топиком "inTopic", у меня тухнет или зажигается светодиод подключеный к модулю :) Профит. Таким образом я могу передавать команды управления и сообщения между устройствами.

На заметку

1. Так как программа храниться на внешней SPI flash памяти, и размер ее может быть и 8Мбит, то предусмотрена даже файловая система. в которую можно из вне и во время работы загружать и использовать пользовательские данные. 
2. Нужно обратить внимание на то что по рекомендациям разработчика, нельзя замыкать напрямую выводы микросхемы на GND или Vcc, это необходимо делать через сопротивления в несколько кило ом,  о чем написано в упомянутой ранее статье о подключении.
3. Так же есть возможность обновления прошивки прямо по воздуху. Через сетевой порт или через браузер. Эта функция не работает на модулях с объемом памяти 512кб, как например в синем модуле ESP-01.


Послесловие

Теперь жду пока приедит ESP32 (который уже 2х ядерный!) и Orange Zero. Хочу запустить MQTT брокер на апельсине, и так же поработать с выводом графики и видео по сигналам от GPIO и командам MQTT. Так же сбор и отправка информации с/на эти модули через браузер или приложения на Win или Android.

1 коментар: