Начало этого цикла статей находится здесь.
Продолжаю свои изыскания в плане создания базы, на основе которой без пайки можно быстро создавать умный дом. Как я уже говорил, эта база рассчитана на обычного прикладного программиста, например фронт-разработчика, который не хочет углубляться в дебри радиоэлектроники и не хочет паять (ну может по минимуму), потому что нет на это времени. Но хочет создавать свои устройства, которые легко можно будет подключать к своему серверу и все вопросы решать способом, который ему хорошо знаком по роду своей деятельности, то есть программированием, причем на PC.
Итак, для первой версии этой базы выбран чип ESP8266, на основе которого будет строиться весь умный дом.
ESP8266
Микроконтроллер ESP8266 самодостаточен, легко программируется как Arduino (то есть это С++ и среда Arduino IDE), имеет на борту Wi-Fi, компактный и есть множество модификаций под разные нужды. Также есть его развитие, это ESP32, который более мощный. В общем идеальный контроллер. Недостаток лишь в напряжении питания (не пять вольт, а 3.3 вольта).
К контроллеру ESP8266 можно по проводам (причем довольно длинным, несколько метров) можно подключать разные датчики и исполнительные устройства по таким протоколам как 1-Wire, I2C. Почему именно эти протоколы? Потому что они очень простые и популярные (спасибо Arduino).
То есть, датчик или устройство по проводу подключается к ESP8266, который в свою очередь подключается по Wi-Fi к вашему серверу. Сервер можно писать на любом языке, например на платформе NodeJS. Но желательно использовать готовые сервера, о которых я расскажу позже. Ваш сервер позволит настроить любую логику работы умного дома.
Например можно в электрощитке разместить ESP8266 и реле. На это реле повесить освещение. А на стене повесить ESP8266 и кнопку. При помощи кнопки включать/выключать освещение. Обработчик нажатия на кнопку находится на сервере. Еще можно несколько датчиков температуры (улица, комнаты)по проводам подключить к ESP8266. На входную водопроводную трубу можно разместить датчик расхода воды и подключить к еще одному ESP8266. Контроллер стоит от 80 рублей, так что вешать их можно до упора (где этот упор не ясно, наверное зависит от роутера и помех на частоте 2.4 ГГц).
Компоненты умного дома
Теперь я хотел бы подробнее остановится на компонентной схеме умного дома. Все компоненты уместились в следующей схеме:
Слева-направо: сначала идет ваше устройство на ESP8266, далее это прошивка ESP Easy (ее ставим на ESP8266), прошивку подключаем к MQTT-брокеру (например WQTT.ru или свой брокер на своем сервере), веб-сервис WQTT.ru уже имеет подключение к Алисе (на своем брокере это подключение придется сделать самостоятельно, что в общем несложно, потому что это наша привычная работа программиста), далее сервер логики Node RED, который подключен к MQTT-брокеру и управляет всем умным домом. И в конце можно поставить Homebridge для связи умного дома с Homekit.
Как вы наверное догадались, homebridge с голосовыми помощниками не обязательные компоненты. Главное это MQTT-брокер и Node RED. Эти два сервера вам обеспечат практический полный функционал и доступ к настройке любой логики.
Думаю общая картинка умного дома уже появилась и можно переходить к самим компонентам в отдельности. В этой статье рассмотрим MQTT-брокер и само устройство. В следующих статьях будем рассматривать настройку прошивки ESP Easy и Node RED. Этого будет достаточно, чтобы запустить простейший вариант умного дома.
В качестве устройства у нас будет светодиод, который встроен в ESP8266 и сидит на пине GPIO2. Этот светодиод будет имитировать освещение в гостиной например. Также подключим кнопку, которая будет включать этот светодиод. И еще в нашем устройстве будут два датчика: DHT11 и BMP085 (влажности и барометр с термометром).
В логику (которая будет хранится в Node RED) заложим управление кнопкой и светодиодом, оповещение по телеграму о резком похолодании в комнате и вывод значений датчиков в Homekit и Алису.
Тестовое устройство
Тестовое устройство я собрал из того что было под рукой. И выглядит оно следующим образом:
У меня был модуль Troyka Wi-Fi (это ESP8266 в модификации ESP-12F)от магазина Амперка. Но можно использовать любой вариант ESP8266. Датчик DHT11 подключен к одному из пинов контроллера, а датчик BMP085 подключен к пинам, которые будут работать в режиме I2C-протокола (выбор пинов настраивается в прошивке ESP Easy).
То же устройство, но в виде принципиальной схемы:
Принципиальная схема более удобная. Во первых, легко рисуется, а во вторых, все подписано. В схеме выше на картинках часто бывает что пины не подписаны. А подписать их весьма муторным делом оказалось.
Устройство это собирается легко как Arduino, только вместо Arduino вы будете использовать ESP8266. Оно мощнее, но питание 3.3 вольта, о чем нельзя забывать. Добавите 5 вольт — сожжете его. Контроллер можно прошивать своими скриптами. Они тоже весьма простые и из них можно будет подключаться к HTTP-серверам и MQTT-брокерам. Но этот вариант мы рассмотрим позже, сейчас я предлагаю рассмотреть вариант готовой прошивки.
Итак устройство собрано. Как прошивать рассмотрим в следующей статье. Теперь перейдем в MQTT-брокеру.
MQTT-брокер
Свой MQTT-брокер пока затевать не будем, а воспользуемся готовым. Веб-сервис WQTT.ru предоставляет простой MQTT-брокер по цене 200 рублей за полгода (первый месяц бесплатно, что вполне нам достаточно для экспериментов). Заходим на сайт этого сервиса https://www.wqtt.ru/ и регистрируемся. После регистрации мы молучим адрес брокера, номер порта, логин и пароль. Их мы позже пропишем в прошивке микроконтроллера и в Node RED. Все, брокером можно пользоваться сразу. Но, если вы хотите подключить Алису, то на WQTT нужно описать датчики и устройства. Это сделать легко, потому описывать не буду. У вас в итоге должна получится такая таблица:
Единственно что нужно сделать это прописать так называемые топики. Сделайте их такими как на скриншоте, т.к. далее мы их будем использовать.
Думаю настало время рассказать, а что же это такое MQTT-брокер и какую роль он играет.
Во-первых, это программа для обмена сообщениями между устройствами вашего умного дома. Сообщение это просто маленькая текстовая строка. В ней можно передать например состояние кнопки или значение какого-либо датчика.
Можно сделать так, чтобы это сообщение (точнее последнее сообщение) сохранилось на брокере. И таким образом состояние вашего умного дома будет храниться в брокере. Если вы знаете что такое MVC, то брокер это M, Node RED это C, а ваш смартфон это V. Если не знаете, то пропустите это.
Во-вторых, кроме отправки сообщения можно на них подписываться. Все, кто подписался, будут гарантированно получать сообщения из того или иного топика. Например у нас есть топик ESP_Easy/BMP085/Temperature. Наше устройство (которое мы назвали ESP_Easy) регулярно (например каждые 5 минут) отправляет на этот топик значение температуры из датчика BMP085. А в Node RED мы создадим подписчика на этот топик и будем принимать эти сообщения. В самом подписчике мы опишем что мы хотим с этой температурой делать, например отобразить на экране смартфона в Homekit.
В итоге, MQTT-брокер это сердце нашего умного дома. Он связывает все устройства и хранит состояние умного дома. Если его сделать доступным из интернета, то вашим умным домом можно управлять откуда угодно.
Резюме
Устройство у нас собрано. Пока без прошивки. Брокер настроен. Далее мы подключим Node RED, прошьем контроллер и все это соединим воедино.
Следующая статья: Мой умный дом на ESP8266, часть 3