
Снова всех приветствую на страницах моего сайта. На предыдущей странице я постарался описать максимально доступно какие проблемы и их возможные решения будут при создании устройства для управления курятником. С деталями мы уже определились, переходим к настройке MQTT- сервера. Чтоб долго не разжевывать как работает данная технология объясню проще. Например у вас есть устройство А- контроллер с датчиками и модулями (еще давно я постарался распределить понятия «датчики» и «модули», т.е. датчики- это откуда приходит информация (температура, давление, кнопки и т.д.) на контроллер, а модули- куда уходит информация, т.е. в основном это исполнительные механизмы (индикаторы, драйверы двигателей, реле и т.д.)), он подключается к MQTT- серверу. Сервер транслирует все данные и состояния которые он получил от устройства А на все устройства подключенные к этому же серверу. Например у вас есть планшет В и телефон С с установленным ПО (программным обеспечением) для мониторинга и управления устройством А. Выходит что при изменении любого состояния на А отправляется информация на сервер и уже оттуда она рассылается на В и С. Такая же ситуация происходит и с сигналами управления от В и С в сторону А. Т.е. сигнал с устройства, например, В отправляется на сервер и уже оттуда рассылается на А и С. Вы спросите зачем такой длинный путь- не проще ли сразу посылать на устройство сигнал и получать данные обратно. Не все так просто. Я не буду вдаваться в технологию построения сети Интернет но просто поверьте- это довольно громоздко и требует достаточно глубоких знаний для пробрасывания канала из сети Интернет к вашему внутреннему устройству. MQTT- сервер позволяет довольно быстро обойтись без костылей настройки не только ваших телефонов и контроллеров, но еще и роутеров. Хотя буквально на днях у меня с другом разгорелся спор по поводу целесообразности создания внутренней системы управления. Т.е. можно «залить» в прошивку ESP8266 HTML- страничку, и уже ее отображать на внутренних устройствах. Теперь даже при пропадании сети Интернет и, соответственно, MQTT- сервера вы все равно сможете управлять контроллером! Правда только на уровне внутренней сети, т.е. на уровне роутера. Через интернет вы управлять уже не сможете. Пока я бьюсь с тем чтобы присвоить ESP статичный IP-адрес. Чтобы вы поняли то в большинстве роутеров стоит динамический DHCP- автоматическая раздача IP адресов подключенным устройствам. Это и хорошо для обыкновенного пользователя той же сети WiFi и плохо для тех кто хочет подключить что то напрямую. Например я присвоил устройству IP 192.168.10.10 и оно подключается к сети где уже есть такой адрес. Возникает ошибка. При этом оба устройства становятся недоступными т.к. роутер не знает что ему делать с одинаковыми IP. Кроме того, если оставить динамический DHCP то IP адрес страницы управления контроллером будет постоянно изменяться, т.е. получается очень неудобно каждый раз искать устройство по IP- адресу. Можно, конечно, жестко привязать IP к MAC- адресу… Но это надо делать настройки в роутере что не есть совсем хорошо. При замене ESP придется опять лезть в роутер и переназначать MAC- адрес. Но это все лирика, переходим дальше по теме.
Как и сказал мой друг в отзыве на предыдущей странице- На cloudmqtt.com больше нет бесплатных тарифов. Тем кто хочет повыбирать из поставщиков MQTT- технологий милости прошу на сайт моего друга- https://kotyara12.ru . У меня же стоит cloudmqtt.com и, наверное, я вместе с вами попробую зарегистрировать еще один MQTT- сервер на clusterfly.ru. Регистрация происходит через соц. сети, а также Яндекс и Гугл аккаунты. После регистрации у вас уже готовый MQTT- сервер! Проще чем на cloudmqtt.com! Конечно функционал сайта здорово урезан по сравнению с cloudmqtt.com но самое главное- у вас есть бесплатный MQTT- сервер. Остальное- решаемо! Теперь давайте определимся с топиками. Топик- это заголовок на который вы будете отправлять информацию и с чего вы будете получать данные. Хочу заметить что srv2.clusterfly.ru поддерживает топики, а сервер srv1.clusterfly.ru— нет. На одного пользователя можно завести сразу несколько контроллируемых сооружений. Например у вас логин user_1111, вы можете разбить показания по топикам, например user_1111/home — устройство управления домом, user_1111/chicken- управление курятником, user_1111/garazh- управление и контроль состояния гаража и т.д. Затем добавляете опять / и описываете требуемое устройство. Например user_1111/chicken/lamp — управление освещением в курятнике, user_1111/chicken/lamp_state- состояние освещения и т.д. Еще проще представить это так. У вас (user_1111) есть объект дом (home), в котором есть лампочка (lamp). Запишем это как user_1111/home/lamp. В том же доме есть розетка (connect), это уже user_1111/home/connect. Кроме того есть вентилятор (wind). Пишем как user_1111/home/wind. Думаю принцип понятен.
Давайте попробуем сделать небольшую программу для более понятного объяснения. Что удивительно- можно вообще обойтись на данном этапе без программирования на компьютере. Все будем делать в приложении для телефона. Я буду использовать программу MQTT Dash. Вы можете использовать любую другую, принцип все равно остается понятен. Итак устанавливаем программу MQTT Dash на ваше любое Android- устройство.
Смотрим данные вашей учетной записи. Запоминаем, а еще лучше- записываем. Пароль показывается только один раз, потом его придется обновлять и при обновлении он изменится. Если вы не используете протокол ОТА то вам придется снимать ваш ESP- модуль и изменять прошивку. Отнеситесь к этому серьезно. |
Открываем его. У меня уже сделан сервер так что не обращайте внимание. У вас при первом запуске будет чистый экран. |
Жмем кнопочку + в верхнем правом углу и вводим нужные данные. Обратите внимание что Андроид сам добавляет пробелы после точек в адресе. Поэтому не забудьте их удалить после точек иначе с сервером просто не соединитесь и будет возникать ошибка соединения. Сохраняем данные. |
Кликаем по строке с заданным именем. |
Появляется пустой экран. Опять жмем кнопку +. |
Давайте выберем Диапазон/прогресс, так будет интереснее. |
Производим настройки типа отображения. Обратите внимание что названии топика ОБЯЗАТЕЛЬНО должно присутствовать имя пользователя. Иначе работать не будет. Сохраняем данные. |
Переходим на страницу управления MQTT в раздел Web-client [SRV.2] т.к. мы используем знак «/» для разделения топиков. Вводим Пароль. Появляется Вот такой интерфейс. Вводим название Топика уже без имени пользователя. В данном случае- lamp, и нужное значение, я указал 78. Жмем отправить.
|
В приложении MQTT Dash вы должны увидеть такую картину. Передавая значения со страницы управления MQTT вы увидите что область заполняется в соответствии с заданными данными. |
Ничего сложного нет, правда? Вот так и работает MQTT сервер. Данные будут обновляться на всех устройствах, подключенных таким образом к данному топику. Кроме того можно осуществлять еще и обратную связь. Т.е. вы указываете значение кликая по кнопке «Состояние» в MQTT Dash, указываете значение и… Устройство будет работать с заданными данными. Например данный пример можно использовать для зажигания лампы от 0 до 100 сек. Зачем это надо- не знаю. Но это как пример. Думаю вы поняли принцип работы MQTT протокола буквально на пальцах. Спасибо за внимание. В следующем уроке мы уже точно определимся с алгоритмом работы устройства и начнем писать собственно само приложение.