Допилил Blynk для удаленного управления нашими контроллерами. Пришлось повозиться с ipsec на Oracle Cloud VPS, что было нетривиально. Вроде списки безопасности с проброшенными портами есть, но не работало. Потом получилось. Работает два сервера — один чисто как MQTT-брокер, второй с собственным Blynk. Сам проект известен уже давно как коммерческий — проекты и виджеты в приложении платные, чем больше проектов и прочего — тем больше денег (у них это называется «энергией». Но Blynk-сервер есть как Open Source проект на гитхкабе для всех желающих.
Мобильные приложения под iOS и Android. Коллега сейчас настраивает контроллеры. Для начала обкатаем его на нашем офисе, в первую очередь как контроллер управления отоплением. А еще порадовала функция триггера на приближение к заданной точке на карте. Можно на подъезде к дому выключить сигнализацию, открыть ворота, заранее подкорректировать отопление и т.п. Функционал по сути любой. Управлять можно чем угодно и как угодно.
Для яхт тут же реализуем слежение за геопозицией для якорных стоянок. Начала меняться — значит якорь не держит — тревога!
Установка локального сервера Blynk на Raspberry Pi и управление им с NodeMCU ESP8266
Blynk представляет собой платформу интернета вещей (IoT), в которой вы можете достаточно просто создать графический интерфейс для своих проектов используя уже готовые виджеты из данной платформы. Но у данной платформы есть и определенные недостатки: задержка (latency) и ограниченное количество энергии. Эти недостатки можно преодолеть при помощи установки локального сервера (local server) Blynk, который обеспечивает неограниченное количество энергии и уменьшает задержку.
В данной статье мы рассмотрим установку локального сервера Blynk на плату Raspberry Pi (была использована плата Raspberry Pi 4) и взаимодействие с ним с помощью платы NodeMCU ESP8266.
Необходимые компоненты
- NodeMCU ESP8266 (купить на Aliexpress).
- Плата Raspberry Pi (купить на Aliexpress).
- Светодиод (купить на Aliexpress).
Сервер Blynk разработан на Java, поэтому первую вещь, которую мы должны сделать – это проверить что на вашей Raspberry Pi установлена Java 8. Сделать это можно с помощью команды:
Архитектура ПО
Главный плюс разработки ПО под ESP8266 в среде Arduino IDE – что можно совместить в одном скетче совершенно разные библиотеки и вам за это почти ничего не будет.
#1 Blynk уроки. Работа устройства при обрыве связи с сервером/WiFi
Перед началом разработки ТЗ было сформулировано тезисно и включало следующие пункты:
1.Необходимо с определенным интервалом считывать показания датчика CO2 (MH-Z19) и отображать результаты с помощью трех (зеленый, желтый, красный) светодиодов. Пределы были выбраны почти с учетом ГОСТ 30494-2011(Здания жилые и общественные. Параметры микроклимата в помещениях.): до 900 PPM – зеленый, от 901 до 1400 PPM — желтый, выше 1401 PPM — красный. Также у нас есть бипер, порог бибикания которого задан на уровне 1100 PPM, но его можно настроить или вообще отключить через Blynk. Во время отладки выяснилось, что иногда MH-Z19 может глюкануть и выдать свое максимальное значение (в зависимости от установленного предела: 1000, 2000, 3000 или 5000 PPM), вместо фактически измеренного. Это немного осложнило обработку результатов и могло привести к ложным сообщениям пользователю, а нервы пользователя надо беречь. И поскольку нет абсолютно верного (кроме многократных измерений) способа отличить неверно измеренные 2000 PPM (дикое значение для жилого помещения) от ситуации, когда пользователь сидит и специально дышит в датчик. То было принято две меры по маскировке данной проблемы: установлен предел измерения в 2000 PPM(предполагается использование прибора в жилых помещениях и все что больше 1400 для нас уже краснаязона) и добавлено усреднение результатов последних 10 измерений. Как итог — единичные ложные срабатывания (на 2000 PPM) не дают больших всплесков на усредненном графике. Но при желании через Blynk можно настроить предел измерения датчика и посмотреть фактическое (не усредненное значение CO2).
2.Для работы с датчиком температурывлажности (AM2302) была использована библиотека DHT Sensor Libraryот Adafruit. Было сделано два небольших изменения: добавил повторное считывание AM2302 (иногда считывается не с первого раза) и введены поправочные коэффициенты для значений температуры и влажности. Если используется встроенный датчик, то опытным путем установлено, что воздух внутри прибора «суше» на 15% и теплее на 2 градуса C (1 градус F) чем снаружи, при использовании выносного датчика (выбирается джампером) — поправку в измеренные результаты вносить не надо и можно отключить.
3.Пользователь должен иметь возможность настроить устройство (подключиться к WiFi, указать auth token и тд) без дополнительного софта или перепрошивки. Наиболее оптимальным решением стало использование библиотеки WiFiManager, которая переводит ESP в режим точки доступа и позволяет через Captive порталсохранить во флешку настройки WiFi сети и другие параметры.
В дальнейшем при старте библиотека пытается подключится к сохраненной WiFi точке и в случае неудачи снова переходит в режим точки доступа и Captive портала. А если пользователь вдруг не захочет использовать Blynk или у него не окажется WiFi-роутера, то в этом случае OpenWindAir никогда на загрузится и будет только стартовать в AP-режиме и перезагружаться по таймауту.
Выход из этой безвыходной ситуации был найден следующий, если у нас сохранены ненулевые параметры подключения к Blynk или MQTT серверу, значит при старте будем пытаться подключиться и перезагружаться, в противном случае — можем и не подключаться к WiFi, а работать оффлайн.
if (!wifiManager.autoConnect(«OpenWind — tap to config»)) < if (mqtt_server[0] != ‘