Умный дом на ESP8266+MajorDoMo. Часть 1. Прошивка модуля ESP8266
Всем привет!
Тема умного дома (да и вообще всего умного) меня интересовала давно, но сделать хоть что-нибудь автоматизированное вечно что-то мешало. Примерно год назад, просматривая сайты-хвасты покупок из Китая, наткнулся на WiFi-модули ESP8266. Не удержался, заказал себе парочку (ESP-07 и ESP-12E). С тех пор лежали они у меня, ждали своей очереди, которая наконец до них дошла.
Вкратце, ESP8266 – революция в мире интернета-вещей (IoT). Приведу выдержку с сообщества разработчиков:
Этот чип, esp8266, не делает ничего нового, он просто позволяет подключиться к доступной WiFi сети или другому WiFi устройству.Такие решения были доступны и раньше. Но дело в том, что цена готовых модулей на чипе esp8266 , даже в розницу, составляет менее 5$. Кроме низкой цены этот чип имеет малые размеры, сравнительно низкое энергопотребление. Модули на базе esp8266 имеют минимальное количество дополнительных компонентов обвязки. Что всё это означает для людей, далеких от электроники? Буквально через несколько месяцев практически каждое электрическое устройство будет подключаться к Вашей домашней сети WiFi. И наступит, наконец, эра интернета вещей (IoT, Internet of Things). Чайники, микроволновки и холодильники будут подключены к интернету, начнут стучаться к Вам в социальных сетях, будут посылать письма по электронной почте и много всего еще.
Идея разговора с чайником в социальной сети показалась мне заманчивой, тем более на данный момент цена на чипы упала еще ниже, и составляет 2-3$.
Но так бы и остались эти модули в Китае, если бы не одно обстоятельство – сообщество любителей ESP8266 написало несколько альтернативных прошивок для модуля, помимо официальной. Чем же они так хороши, что кардинально изменили мое мнение о модулях?
Официальная прошивка ESP8266 Espressif SDK работает на АТ-командах, что подразумевает наличие дополнительного микроконтроллера в системе управления. На каждый модуль – свой микроконтроллер для общения по UART. В моем понятии конечное устройство должно иметь маленькие габариты, чтобы умещаться например в подрозетнике, в разводной коробке, или еще где – но не быть на виду у всех. Дом должен быть умным, но невидимым. Дополнительный микроконтроллер увеличивает габариты устройства, влечет за собой дополнительную обвязку.
Альтернативные прошивки модуля ESP8266 позволяют обойтись без дополнительного контроллера, программируя непосредственно сам чип. Благо у того на борту имеются вкусняшки вроде GPIO, SPI, I2C, ADC, и прочее. Только использовать их надо с умом 🙂 У разных исполнений модулей выведено разное количество ног процессора, но самые ходовые ESP-07 и ESP-12E. У последнего на борту 4 мб флеш-памяти, хотя как говорят, у последних версий 07 тоже (сам еще не подключал, начал с 12E).
Разработано несколько альтернативных прошивок, но самые популярные среди них NodeMCU и Arduino IDE. Последнюю я даже не рассматривал из-за своей ненависти ко всему, что имеет в своем название “Arduino”. Привык я писать программы для микроконтроллеров своими ручками, а не чужими, которые уже разработали для разных ардуин готового кода чуть менее, чем до}{`/@. Не хочу никого обидеть, но как-то так сложилось исторически ))).
В общем выбор пал на NodeMCU. В сети про эту прошивку ходит куча мнений, от плохих до хороших. У каждого своя правда ))) У кого-то получилось, у кого-то не срослось.
Немного поковырявшись с ней, я понял, что при желании можно на ней сделать много чего, но подойти к написанию кода надо очень грамотно, об этом в следующей части.
Кстати не могу не отметить, что сделана прошивка довольно удобно – есть код прошивки, в которую заливаются готовые скрипты, написанные на языке LUA. Прошивка поддерживает работу с файловой системой, так что скрипты можно заливать как отдельные файлы, запускать на выполнение, редактировать, удалять.
Собирать прошивку можно как самому ручками, так и пользоваться конструктором. Я не люблю готовое, но усложнять себе жизнь не стал.
Отечественным я не пользовался, хотя советую. Парни подошли к вопросу грамотно, в конструктор включено много дополнительных расширений, как платных, так и бесплатных, и продолжают развиваться. В прошивку можно интегрировать много чего интересного, например готовый модуль для MajorDoMo, к которому я собираюсь подключать все устройства. Платные возможности стоят всего 2$, что я считаю копейки. И обязательно бы воспользовался данным сервисом, если бы не хотел разобраться сам, как что работает. Не исключаю, что в конечно итоге я все же вернусь к ним, но пока что буду пользоваться бесплатным сервисом от https://nodemcu-build.com/
Данный конструктор позволяет добавить в прошивку также дополнительные расширения, но в меньшем количестве. Думаю для знакомства с ESP8266 мне их хватит.
Собирается прошивка легко – в форму вписывается свой email (2 раза), на который потом придет уведомление. Выбираются необходимые расширения, которые будут включены в прошивку, одобряется нажатием кнопки “Start your build”. Когда прошивка будет скомпилирована, на указанную почту придет уведомление с ссылкой, перейдя по которой можно скачать прошивку.
По-умолчанию включены модули file, gpio, net, node, timer, UART, WiFi. Не советую их отключать, это минимальный функционал. Я оставил себе следующий функционал:
bme280 – модуль для работы с преобразователями давления BME280/BMP280
cjson – поддержка CJSON. Не знаю, пригодится ли мне в будущем, но решил оставить
dht – поддержка преобразователей давления DHT11, 21, 22, 33, 44
enduser_setup – модуль обеспечивает простой способ конфигурирования ESP8266 чипов без использования последовательного интерфейса. По-сути представляет собой веб-сервер.
file – поддержка файловой системы. Позволяет создавать/открывать/читать/изменять файлы и др.
gpio – работа с портами ввода-вывода
http – базовый HTTP-клиент, который обеспечивает интерфейс, чтобы сделать GET/POST/PUT/DELETE-запросы через HTTP (S)
i2c – поддержка шины I2C
net – модуль создания и поддержки веб-серверов
node – доступ к функциям системного уровня, такие как сон, перезагрузка чипа, и др.
ow – поддержка шины 1-Wire
spi – поддержка SPI
tmr – модуль работы с простыми таймерами, системными счетчиками и др.
uart – поддержка UART
websocket – пока не разбирался, может пригодится в дальнейшем
wifi – модуль для работы с WiFi
Кроме того в следующем блоке можно выбрать дополнительные опции, такие как поддержка SSL, включение режима отладки или поддержки FatFS для чтения с SD-карт.
После компилирования прошивки на почту придет письмо, содержащее две версии прошивки: float и integer.
Я оставил себе версию integer, т.к. на данный момент работа с float-числами мне не нужна, а места она занимает больше, и по-слухам медленнее работает.
Прошивать ESP8266 будем утилитой “XTCOM_UTIL”. Взять можно с сообщества в разделе “esp8266 Утилиты”.
Выбираем порт, к которому подключен ESP8266, скорость ставим 115200. Нажимаем кнопку “Open”
Выскочит следующее окно. Нажимаем кнопку ОК, после чего в новом окне нажимаем кнопку CONNECT.
При успешном соединении увидим окно “Connect with target OK!”
Закрываем это окно, после чего в меню API TEST выбираем пункт “Flash Image DownLoad”
Выбираем нашу скомпилированную прошивку (у меня они называется nodemcu-master-16-modules-2016-12-23-13-56-19-integer), нажимаем Download. Прошивка начнет заливаться в чип. В конце выскочит окно об окончании передачи.
Еще один ньюанс – на данном сайте рекомендуют сделать следующее:
С учетом того, что последняя версия прошивки NodeMCU ESP8266 реализована на SDK v1.5.4.1, то для корректной работы отладочной платы NodeMCU ESP8266 и для перехода на новую версию SDK нам необходимо дополнительно перезаписать файл esp_init_data_default.bin. Новый esp_init_data_default.bin возьмем из патча расположенного на официальном сайте https://espressif.com/sites/default/files/sdks/esp8266_nonos_sdk_v1.5.4.1_patch_20160704.zip
Кроме того необходимо дополнительно указать адрес куда будет помещен этот файл. Существует несколько фиксированных вариантов адресов в зависимости от размера памяти модуля ESP:
0x7C000 для 512 кБ (модули типа ESP-01, -03, -07 и т.п.)
0xFC000 для 1 МБ (модули типа ESP8285, PSF-A85)
0x1FC000 для 2 МБ
0x3FC000 для 4 МБ (модули типа ESP-12E, NodeMCU, WeMos D1 mini)
Я не знаю, на каком SDK собирается прошивка в конструкторе, но решил все-таки повторить вышеописанные действия, хуже не будет. Примечание от меня – читал где-то, что последние версии ESP-07 имеют на борту 4 Мб памяти, так что перед прошивкой проверяйте.
Выбираем файл “esp_init_data_default.bin”. У меня чип ESP-12E, так что начальный адрес будет 0x3FC000. Нажимаем “Download”.
Ну в принципе и все. Наш чип ESP8266 залит прошивкой NodeMCU, и готов к созданию и заливке скриптов.
Чтобы проверить его готовность к работе, скачаем утилиту ESPlorer с сайта https://esp8266.ru
ESPlorer – прекрасная утилита для написания скриптов и заливке их в ESP8266.
Открываем ее, устанавливаем параметры порта (не забываем закрыть XTCOM_UTIL, она использует тот же порт). Нажимаем OPEN. Видим в правом окне “PORT OPEN 115200 Communication with MCU..”
Кратковременно замыкаем пин RST модуля ESP8266 на землю.
Программа соединится с чипом, и в последней строчке мы увидим “lua: cannot open init.lua”.
Файл init.lua является первичным загружаемым файлом в NodeMCU (автозагрузка), и сейчас он у нас отсутствует. Про написание скриптов и заливку их в контроллер поговорим в следующих статьях.
Пишем-пишем, все работает!