Гид компьютерного мира - Информационный портал
  • Главная
  • Программы
  • Публичные облачные сервера для IoT устройств. Blynk: простое управление Raspberry и Arduino Проверьте питание ESP8266

Публичные облачные сервера для IoT устройств. Blynk: простое управление Raspberry и Arduino Проверьте питание ESP8266

В прошлом году компания Microsoft анонсировала облачный бэкенд для управления умными приборами и интегрированной электроникой. Azure IoT Hub позволяет с минимумом программирования настраивать взаимодействие между устройствами и встраивать его в свои проекты на основе Azure. Чтобы посмотреть, как это работает, мы разберем простую задачу - отправку в облако показаний датчика, подключенного к контроллеру Arduino.

Итак, перед нами простейший прибор. Он состоит из контроллера, небольшой макетной платы, фоторезистора (датчика света) и стабилизирующего резистора. В качестве контроллера используется Genuino MKR1000 со встроенным Wi-Fi - если хочешь такой же, то он обойдется в 35 долларов. Питается плата от micro-USB.


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



Девайс шлет данные в IoT Hub, где, пройдя через сервис Stream Analytics, они попадают в базу данных и обрабатываются при помощи Power BI. Со всеми этими вещами мы разберемся чуть позже, а пока давай начнем с основ.

INFO

В конце статьи есть исходники получившегося проекта. Не забудь посмотреть их, если планируешь сделать что-то похожее.

IoT Hub официально переводится на русский как «Центр интернета вещей». Он может как получать данные с устройств, так и отправлять им сообщения или команды.

Кроме IoT Hub, взаимодействовать с устройствами может и еще один сервис под названием Event Hub («концентратор событий»). Он отличается большей пропускной способностью, но шлет сообщения только в одном направлении - от устройства в облако. IoT Hub поддерживает такие протоколы, как MQTT, MQTT через WebSocket, AMQP, AMQP через WebSocket и HTTP. Event Hub поддерживает AMQP, AMQP через WebSocket и HTTP. Подробнее о разнице между хабами и о том, как использовать их вместе, можешь прочитать на сайте Microsoft. Мы же изучим IoT Hub (он поинтереснее).

Вспоминая в прежние времена, когда библиотека Wire все еще была «сырой», платформа Arduino была просто микроконтроллером с некоторой обвязкой. Теперь у нас есть одноплатные компьютеры и дешевые микроконтроллеры со встроенным Wi-Fi вроде ESP32. Тем не менее, всегда есть потребность сделать программирование и разработку встраиваемых систем более доступной и более широко поддерживаемой среди сотен устройств, доступных сегодня.



Так, недавно на конференции Embedded Linux Conference основатель Arduino Массимо Банци (Massimo Banzi) объявил о начале того, что будет ответом Arduino на облачную концепцию – онлайн среду разработки и обширную экосистему подключенных устройств. Все это носит название Arduino Create и представляет собой онлайн IDE, которая позволяет любому разработчику создавать проекты встраиваемых систем и управлять ими удаленно.


Как было продемонстрировано в презентации Массимо, основная идея Arduino Create заключается в том, чтобы вывести подключаемые устройства в Интернет и обеспечить удаленное программирование и прошивку «по воздуху». Поскольку это экосистема Arduino, то для того, чтобы сделать это возможным, было задействовано большое количество библиотек, доступных для сотен различных платформ. В настоящее время поддерживается большое количество плат, включая Raspberry Pi, BeagleBone и несколько плат Intel IoT.


Основное внимание в этой разработке является платформенной независимости и почти полностью сосредоточено на простоте использования и функциональной совместимости. Это заметное изменение относительно экосистемы Arduino, которая была, например, пять лет назад, когда платы Arduino в большинстве своем основывались на микроконтроллерах ATmega328p. Несколько лет спустя уже можно было программировать и записывать скетчи Arduino в микроконтроллеры ATtiny85. С тех пор многое изменилось. У нас теперь есть Raspberry Pi, компания Intel успела засветиться на рынке Интернета вещей, в конце концов, у нас есть миллион плат на базе процессоров и систем-на-кристалле (SoC) для смартфонов.


В то время как другие компании и организации уже внесли свой вклад в онлайн-среду для Raspberry Pi и других одноплатных компьютеров, то что представил Массимо Банци наконец-то явилось долгожданным и значимым изменением со стороны организации Arduino.


Для тех, кто хочет посмотреть выступление Массимо Банци, предоставляется видео.

Еэспэшники — вливайтесь в ряды блинкеров!
Сегодня мы за 5 минут настроим управление ESP8266 с вашего смартфона (iOS или Android) с помощью нового облачного сервиса Blink . Видео и подробности под катом.


Установите приложение Blynk на смартфон

Зарегистрируйтесь в приложении и создайте новый проект.

Введите название проекта, например ESP8266 . В поле Hardware Model выберите ESP8266 . (надеюсь, что вы заметите впечатляющий список поддерживаемого оборудования) Автоматически сгенерированный Auth Token отправьте на свой почтовый ящик.

После нажатия на кнопку Create вам станет доступно пустое поле для проектирования UI вашей панели управления ESP8266.

Жмете на плюсик вверху справа — появится панель инструментов Widget Box для добавления виджетов на вашу панель управления. Стоит заметить, что список виджетов еще будет пополняться.

Для пробы выберем тип виджета Button — этот виджет сразу добавится на вашу панель. Отредактируйте его одним прикосновением. Название можно не заполнять, чуть правее можно выбрать цвет индикатора, в поле OUTPUT PIN выберите справа Digital , а слева любой свободный пин GPIO . Ниже переключите тип кнопки на Switch .

Далее установите библиотеку Blynk в Arduino IDE. В этом вам поможет официальная инструкция . Также можете взять библиотеку самую последнюю версию прямо из репозитария и установить вручную. Далее выбираем пример ESP8266_Standalone и прописываем в нем Auth Token , который мы получили по почте, SSID и пароль вашей WiFi сети. Компилируем и заливаем скетч в ESP8266.

Вадим Колесник, г. Тирасполь

Захватывающая, простая и быстрая разработка полнофункциональных устройств Интернета вещей на Arduino с помощью облачного сервиса

Общие сведения

myDevices занимается разработкой программного обеспечения и приложений в сфере Интернета вещей (IoT) и является подразделением компании Avanquest. myDevices Cayenne - первое drag-and-drop приложение и облачный сервис для упрощенной разработки IoT проектов на Raspberry Pi.

На портале Радиолоцман недавно публиковалась , в которой я постарался раскрыть основные преимущества и возможности системы при работе на одноплатном компьютере Raspberry Pi (RPi). Но проект Cayenne постоянно развивается, разработчики, опираясь на пожелания пользователей, постепенно добавляют новые функции, устраняют недочеты и ошибки.

Разработка IoT устройств на Arduino и Raspberry Pi при работе с Cayenne принципиально отличается. Относительно Raspberry Pi платформу Cayenne можно считать визуальной средой разработки: мы физически подключаем различную периферию к плате Raspberry Pi и дальше работаем только в онлайн среде Cayenne (настраиваем виджеты, обработку данных, пишем алгоритмы автоматизации).

Применительно к Arduino приборная панель Cayenne (dashboard) - это лишь набор виджетов и элементов управления, которые визуализируют получаемые данные от датчиков и передают пользовательские данные для управления тем или иным исполнительным устройствам. Непосредственно работа с датчиками, исполнительными устройствами, дополнительной периферией (например, дисплеем, второй клавиатурой), обработка условий автоматизации возлагается на микроконтроллер. Другими словами, все сводится к стандартной разработке устройства на Arduino; пользователь сам пишет программный код, но с интеграцией в проект гибких IoT функций Cayenne. Именно в этом и заключается, на мой взгляд, основное преимущество Cayenne: вы можете подключать к системе любые датчики и исполнительные механизмы, не ограничиваясь списком поддерживаемой периферии.

Пользовательский интерфейс и подготовка к работе

Что касается пользовательского интерфейса системы, ее настроек, способов управления и виджетов на приборной панели, все это остается аналогичным системе на Raspberry Pi, конечно, за исключением отдельных уникальных элементов, присущих последней (например, удаленный рабочий стол, состояние памяти, загрузка процессора). Поэтому для понимания основ работы с системой я рекомендую ознакомиться со статей . Вся информация в статье актуальна как для веб-интерфейса системы, так и для интерфейса мобильного приложения. Также в статье указан список поддерживаемой периферии.

Для разработки IoT устройства или приложения нам необходимо:

  • Иметь свою учетную запись на сервисе Cayenne (можно использовать существующую);
  • Установить интегрированную среду разработки Arduino IDE;
  • Добавить библиотеку функций Cayenne в Arduino IDE;
  • Настроить Arduino IDE: выбрать плату и COM-порт, к которому она подключена;
  • Подключить к Arduino плату расширения Ethernet Shield или Wi-Fi Shield (или использовать плату Arduino с интегрированным сетевым интерфейсом).

Думаю, процесс установки среды разработки Arduino IDE, а также выбор платы и порта в пояснениях не нуждаются, и мы перейдем к основному.

Библиотека Cayenne для Arduino просто и быстро устанавливается с помощью менеджера библиотек (Рисунок 2).

После установки библиотеки мы сможем использовать ее в своих приложениях, а в разделе примеров скетчей появится новая папка с именем Cayenne. На мой взгляд, эти примеры не позволяют полностью понять, как работать с системой, но, тем не менее, их стоит изучить, а также, напомню, что существует огромный раздел документации по системе Cayenne. В общем случае данная библиотека представляет собой набор скетчей, которые позволяют упростить подключение и обмен данными между датчиками/актуаторами и облачным сервисом.

Выполнив подготовительные операции, настройку среды разработки и подключение платы расширения Ethernet Shield, можно приступать к разработке IoT устройства.

Плату Arduino подключаем к компьютеру по USB, в Ethernet Shield подключаем сетевой кабель локальной сети. В Интернет-браузере выполняем вход в учетную запись Cayenne, и в панели управления добавляем новое устройство - Arduino. Далее выбираем тип платы, способ подключения к сети Интернет (достаточно много вариантов), обращаем внимание на уникальный ключ авторизации для нашего устройства и ждем подключения платы Arduino к Cayenne (Рисунок 3).

Для каждого нового устройства генерируется новый уникальный ключ, в дальнейшем его можно найти в настройках устройства (платы).

Как только вы выберете способ подключения к сети, появится окно с исходным кодом программы микроконтроллера. Это необходимый минимум для подключения устройства к облачному сервису. Обратите внимание, что в тексте программы уже указан ваш ключ авторизации и подключена библиотека, соответствующая выбранному способу подключения к сети (Рисунок 4). Копируем этот код в Arduino IDE, компилируем и загружаем в плату. Если все было правильно настроено, то в панели управления Cayenne появится новое активное устройство и приборная панель, где вы сможете теперь добавлять виджеты и элементы управления. Более того, уже на данном этапе вы можете удаленно контролировать доступные цифровые и аналоговые порты Arduino, не написав ни единой строчки кода - на приборной панели добавьте виджет-кнопку, укажите тип порта (цифровой), его имя на плате и сохраните виджет. Теперь, нажимая на кнопку в браузере, вы будете менять логическое состояние порта. Также просто, добавив соответствующие виджеты, можно управлять ШИМ выходами, получать «сырые» данные с аналоговых входов Arduino, контролировать состояние цифровых входов.

Разработка устройства на конкретном примере

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

  • Плата Arduino Uno;
  • Плата расширения Ethernet Shield на контролере WIZnet W5100;
  • Датчик температуры DS18B20;
  • Фоторезистор;
  • Терморезистор;
  • Несколько светодиодов;
  • OLED дисплей на контроллере SSD1306.

Принципиальная схема подключения датчиков и светодиодов к Arduino изображена на Рисунке 5.

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

Думаю, что по поводу подключения светодиодов, цифрового датчика температуры и OLED дисплея вопросов не возникнет. Аналоговые датчики освещенности и температуры подключаются к аналоговым входам по схеме резистивного делителя. При этом для цепи терморезистора необходимо знать точное сопротивление резистора R6, это значение будет использоваться в исходном коде при расчетах.

После подключения указанных на схеме элементов напишем скетч Arduino, а затем установим необходимые виджеты на приборной панели Cayenne. На данный момент в плату Arduino уже загружен минимальный скетч и плата определяется в приборной панели Cayenne. Как я сказал выше, на этом этапе мы можем добавить виджеты для управления светодиодами D1, D2, а также получать «сырые» данные с аналоговых входов, к которым подключены терморезистор и фоторезистор (Рисунки 6, 7).

Не написав ни единой строчки кода Arduino, мы уже получили простую систему удаленного управления и контроля (Рисунок 8).

Чтобы задействовать цифровые датчики температуры, терморезистор, ШИМ, например, для управления светодиодом D2, потребуется дописать минимальный скетч. Для начала определим необходимые библиотеки.

#include < CayenneEthernet.h> // используем плату расширения Ethernet Shield
#include < CayenneTemperature.h> // функции преобразования данных с терморезистора
#include < OneWire.h> // функции для работы с шиной 1-Wire
#include < DallasTemperature.h> // функции для работы с цифровыми датчиками температуры
#include < Arduino.h> // стандартные константы и переменные языка Arduino
#include < U8x8lib.h> // библиотека для работы с OLED дисплеем в текстовом режиме
#include < Wire.h> // поддержка аппаратного интерфейса I 2 C

#define VIRTUAL_PIN_1 V0 // виртуальный канал для датчика DS18B20
#define VIRTUAL_PIN_2 V1 // -- для термистора
#define VIRTUAL_PIN_3 V2 // -- для светодиода D2, по этому каналу будем принимать данные о значении ШИМ
#define LED2_PWM 6 // реальный порт Arduino, к которому подключен светодиод D2

Виртуальные каналы - это не цифровые, и не аналоговые порты ввода/вывода. При непосредственном чтении аналоговых входов пользователь получает данные с 10-разрядного АЦП микроконтроллера. Значения, возвращаемые АЦП, лежат в диапазоне 0 … 1023 и пропорциональны напряжению на этом входе. Другими словами, если подключить датчик температуры к аналоговому входу Arduino, вы не получите значение температуры, потребуются дополнительные преобразования и математические вычисления для преобразования напряжения - температура.

Для упрощения преобразования данных, их форматирования и обработки предназначены виртуальные каналы. Это довольно мощный инструмент, который используется для обмена между Arduino и Cayenne, а также для простого форматирования данных с целью их понятной визуализации на приборной доске. Запомните, виртуальные каналы не имеют физических параметров.

Cayenne.virtualWrite(V1, 123) // передача целочисленного значения по виртуальному каналу V1
Cayenne.virtualWrite(V2, 12.34) // передача значений с плавающей запятой по виртуальному каналу V2

Например, выполнив чтение аналогового датчика температуры, мы сможем одной строчкой кода преобразовать значение в градусы Цельсия и передать это значение на приборную панель. Кроме того, виртуальные каналы позволяют реализовать управление любой периферией, подключенной к аналоговым или цифровым портам Arduino, без необходимости писать какой-либо дополнительный код. На данный момент поддерживаются два типа данных, с которым работают виртуальные каналы: целочисленные (integer) и с плавающей точкой (float). В дальнейшем планируется поддержка символьных типов и массивов. На приборной панели по виртуальному каналу можно подключить и настроить по типу принимаемых данных пользовательский виджет для визуализации.

// Цифровой порт, к которому будут подключаться датчики DS18B20. Не использовать порты Arduino 0 и 1 (Rx/Tx).
const int ds18b20_Pin = 2;
// Аналоговый порт, к которому подключен терморезистор.
const int thermistorPin = 0;
// Сопротивление постоянного резистора (9 кОм), включен последовательно с терморезистором на землю.
const float resistance = 9000;
// Ключ авторизации Cayenne. Найти его можно в веб-интерфейсе Cayenne на вкладке настройки устройства.
char token = "640c9oedi4";
OneWire oneWire(ds18b20_Pin);
DallasTemperature sensors(&oneWire);
Thermistor thermistor(thermistorPin, resistance);

На свое усмотрение, практически на любом этапе, вы можете добавить в исходный код вывод отладочной информации по последовательному порту.

В разделе инициализации мы укажем следующие функции:

void setup()
{
Cayenne.begin(token); // подключение к Cayenne с указанным ключом авторизации
sensors.begin(); // инициализация цифровых датчиков температуры
u8x8.begin(); // инициализация и вывод текстовой информации на OLED дисплей

u8x8.setPowerSave(0);
u8x8.setFont(u8x8_font_torussansbold8_r);
u8x8.drawString(2,0,"Cayenne Test");
u8x8.drawString(1,2,"System Running");
}

В основном цикле программы у нас будет лишь одна функция:

void loop()
{
Cayenne.run();
}

Весь обмен данными с приборной панелью Cayenne выполняется с помощью нескольких функций:

CAYENNE_IN (Virtual_Pin) - определяет функцию, которая вызывается при получении устройством обновленных данных по виртуальному каналу от сервера Cayenne.

CAYENNE_OUT (Virtual_Pin) - определяет функцию, которая вызывается, когда требуется отправить обновленные данные с устройства на сервер Cayenne.

CAYENNE_CONNECTED () - функция выполняется каждый раз при подключении устройства к серверу Cayenne. В общем случае, эта функция используется для синхронизации.

Cayenne.syncAll() - функция, формирующая запрос на сервер Cayenne для синхронизации всех виджетов. Состояние аналоговых и цифровых портов Arduino будет восстановлено, и каждый виртуальный канал сгенерирует событие CAYENNE_IN.

Cayenne.syncVirtual(Virtual_Pin) - синхронизация по указанному виртуальному каналу. Как результат выполнения, вызывается соответствующая обработчик CAYENNE_IN.

В моей схеме светодиод D2 подключен к цифровому порту D6 Arduino. У этого порта есть альтернативная функция - выход ШИМ. Для реализации удаленного управления этими светодиодом в режиме ШИМ нам потребуется принимать данные с приборной панели. Для этого напишем функцию, которая будет выполняться при обновлении данных по виртуальному каналу V2:

CAYENNE_IN(V2)
{
// получаем данные о значении ШИМ с приборной панели (слайдер)
int PWMValue = getValue.asInt(); // значение в диапазоне 0 - 1023
analogWrite(LED2_PWM, PWMValue / 4); // для ШИМ значение должно быть в диапазоне 0 - 255
}

Теперь на приборной панели добавим виджет «Слайдер» с именем LED_2 ШИМ (PWM), и в его настройках укажем, что он работает через виртуальный канал 2 (Рисунок 9).

Загрузив скетч в плату, вы сможете с помощью слайдера на приборной панели Cayenne управлять яркостью свечения светодиода D2. Все очень быстро и просто…

CAYENNE_OUT(V0)
{
sensors.requestTemperatures(); // получаем данные с цифровых датчиков температуры.
// преобразуем данные с терморезистора, форматируем их и отправляем на сервер по виртуальному каналу V1
Cayenne.celsiusWrite(V1, thermistor.getCelsius());
//форматируем данные с цифрового датчика температуры и отправляем их на сервер по виртуальному каналу V0
Cayenne.celsiusWrite(V0, sensors.getTempCByIndex(0));
}

Благодаря использованию виртуальных каналов, весь код функции для передачи абсолютно разных данных состоит из двух строк. На приборной панели добавляем виджеты для датчика температуры DS18B20 и терморезистора (они есть готовые в панели управления). Настраиваем виджеты, загружаем скетч в плату, и… готово (Рисунки 10а, 10б)!


Рисунок 10. Вид приборной панели Cayenne для управления Arduino (датчики температуры,
освещенности, управление светодиодом D1, ШИМ управление светодиодом D2):

Не забывайте, что эти же функции управления и контроля доступны и в мобильном приложении. Все виджеты, установленные в веб-интерфейсе, вы увидите в мобильном приложении (Рисунок 10б).

Внешний вид устройства с подключенной периферией показан на Рисунке 11.

Возможность разработки беспроводных IoT устройств

Вы могли заметить, что на некоторых скриншотах видна моя панель управления, где помимо Arduino Uno и Raspberry Pi имеется устройство с именем ESP8266-1. Все верно, это дополнительное устройство на хорошо известном модуле ESP-12 (ESP8266), которое подключено к серверу Cayenne по Wi-Fi и имеет свою отдельную приборную панель (Рисунки 12а, 12б). Такое устройство представляет собой беспроводной узел контроля и управления. К модулю подключены два светодиода (один подключен к выходу ШИМ ESP8266) и цифровой датчик температуры DS18B20.


Рисунок 12. Приборная панель для беспроводного устройства на модуле ESP-12:
а) веб-интерфейс, б) мобильное приложение.

Благодаря поддержке ядра ESP8266 средой Arduino IDE, реализация беспроводных IoT устройств с Cayenne ничем не отличается от разработки на Arduino. Другими словами, любой модуль на чипе ESP8266 - это Arduino плата с Wi-Fi интерфейсом. Для данного Wi-Fi модуля мы пишем подобный скетч, используем те же библиотеки для работы с датчиками, нам доступны цифровые и аналоговые порты ввода/вывода. По этому модулю накоплено огромное количество информации, различной документации и наработок.

Схема подключения периферии к модулю ESP8266 изображена на Рисунке 13. Я использовал отдельный модуль ESP-12 без переходной платы с интегрированной схемой питания и интерфейсом программирования, что сильно усложнило работу на этапе загрузки скетча. Оптимальным вариантом будет использование готового модуля типа nodeMCU v3, который выполнен в форм-факторе Arduino и имеет схему согласования интерфейса. (Очень важный момент при программировании модуля). Внешний вид модуля с подключенными светодиодами и датчиком температуры показан на Рисунке 14.

Что касается подключения к серверу Cayenne и обмена данными, то здесь все как для Arduino. Сохраняются все понятия о виртуальных каналах, используются те же функции, также используется уникальный ключ авторизации. Отличие лишь на этапе подключения модуля к сети Интернет.

Для подключения устройства на модуле ESP8266 мы действуем аналогично добавлению любой платы Arduino и доходим до этапа ожидания подключения устройства к Cayenne, где будет сгенерирован минимальный скетч.

Этот скетч нам необходимо изменить. Подключаем следующие библиотеки:

#include "CayenneDefines.h" // константы и переменные Cayenne
#include "BlynkSimpleEsp8266.h" // функции для работы с ESP8266
#include "CayenneWiFiClient.h" // функции для реализации Wi-Fi клиента

char token = "3yj62u9ogi";
char ssid = "Network_SSID"; // SSID и пароль для вашей Wi-Fi сети.
char password = "Network_Password";

В секции инициализации добавляем строку:

Cayenne.begin(token, ssid, password);

Компилируем, загружаем в модуль (занимает больше времени, чем загрузка в плату Arduino), ожидаем подключения и активации нового устройства в приборной панели Cayenne. Далее, все как для Arduino: добавляем функции для работы с датчиками и портами ввода/вывода, добавляем виджеты на приборную панель. Просто восхитительно, не правда ли?!

Заключение

По итогам работы с Cayenne на Raspberry Pi и Arduino я могу однозначно сказать, что Raspberry Pi не стоит использовать для разработки устройств Интернета вещей, даже с Cayenne. Чего не скажешь об Arduino - несмотря на ограниченность ресурсов, отсутствие многозадачности, низкую вычислительная мощность (хотя, это спорный момент, учитывая характеристики новых плат Arduino на процессорах ARM), она идеально подходит для разработки простых IoT устройств и систем домашней автоматизации.

Кроме того, в этом контексте основным преимуществом Arduino, как я заметил выше, является возможность самостоятельной разработки устройства, изучения схемотехники, написания кода, развития навыков программирования, несмотря на доводы профессиональных программистов, что с Arduino нельзя научиться программировать. Возможно, но… По отношению к Arduino платформа Cayenne обеспечивает только графический пользовательский интерфейс и некоторые упрощения в обработке данных. Все остальное вы должны разработать самостоятельно, включая первичную обработку данных от сенсоров, подсистему обработки событий, а также условия и алгоритмы автоматизации. А теперь добавьте к Arduino простоту разработки беспроводных IoT устройств на Wi-Fi модуле ESP8266 и уже официальную поддержку (хоть и не полную) новейшего чипа ESP32, имеющего на борту богатую периферию, и перед вами открываются огромные возможности для разработки принципиально новых устройств и привлечения к этому процессу не только любителей, но и профессионалов.

На момент подготовки статьи Cayenne не сообщала об официальной поддержке модулей на чипе ESP8266. Изначально это заслуга сообщества - любители и инженеры, которые работают или используют Arduino IDE и знают о поддержке ESP8266, с помощью библиотек Cayenne смогли подключить и использовать ESP8266. Но даже в то время на форумах сообщества Cayenne уже можно было ознакомиться с большим количеством различных проектов беспроводных IoT устройств.

После длительного тестирования своих устройств на Arduino и ESP8266 могу сказать, что последнее работает очень стабильно. Несколько низкая надежность Arduino с Ethernet Shield обусловлена известной проблемой зависания контроллера W5100, однако существует несколько способов ее решения, как аппаратных, так и программных. Могу предположить, что это не касается плат Arduino с интегрированными Ethernet или Wi-Fi.

С момента подготовки статьи по Raspberry Pi и Cayenne прошло не так уж много времени, но новых функций и поддерживаемой периферии стало значительно больше. Помимо наличия огромного выбора различных плат расширения, датчиков и исполнительных устройств, соответствующих библиотек, проектов и примеров для Arduino, теперь в Cayenne пользователям доступны устройства, сети и сервисы LoRa, библиотеки поддержки сетевого протокола MQTT для Arduino, C, C++, mBed, библиотеки для работы с MQTT брокером mosquito. Однозначно, для разработки устройств Интернета вещей и систем домашней автоматизации на Arduino я бы рекомендовал сервисы Cayenne.

Замечательная штука – ESP8266. Довольно мощный процессор, много памяти, встроенный WiFi контроллер. ESP32, конечно, еще лучше, но и стоит заметно дороже. Но речь сейчас не о них. Точнее не совсем о них. На ESP очень легко соорудить практически любую домашнюю автоматику, причем с удаленным контролем и управлением со смартфона или компьютера. Пример такого устройства есть на этом сайте . Одна проблема – для работы с таким устройством не только из домашней сети, а и из любой точки планеты (где есть доступ к интернету, разумеется), потребуется некий сервер – посредник, который будет принимать сообщения от устройства и передавать их Вам, и наоборот. Конечно, есть варианты и прямой связи, но я их не буду здесь рассматривать ввиду сложности реализации или дороговизны.

Приведенный в этот статье список не претендует на полноту и уж тем более на уникальность, просто я попытался проанализировать и структурировать возможности тех или иных бесплатных сервисов. В первую очередь для себя, но если это окажется полезным кому-либо еще – пользуйтесь на здоровье. Когда я искал публичный MQTT сервер для себя, то перерыл массу интернет ресурсов. Искал в первую очередь на esp8266.ru , но увы, там половина сервисов либо уже не рабочие, либо не подходят лично мне по тем или иным параметрам. Все, что здесь написано – в первую очередь мой личный опыт, Ваш опыт работы с данными сервисами может быть совсем другим. Если Вы знаете какие-либо еще подобные сервисы – напишите в комментариях или на почту (почта и другие контакты находятся в верхнем правом углу шапки сайта), и я постараюсь проверить и дополнить список.

MQTT брокеры

Протокол MQTT – это пожалуй самое первое, на что натыкаешься в поисковиках, когда ищешь способ удаленного управления различными “умными штуками”. Не могу поручиться, что это самый простой протокол (мне просто не с чем сравнивать особо, я как-то сразу на нем и остановился), но лично у меня он не вызвал никаких сложностей. Примеров – очень много. Готовых библиотек для Arduino IDE – тоже не одна, как говорится “выбирай на вкус”. Мобильных приложений – достаточно, чтобы выбрать и для смартфона, и для контрольной панели, сделанной из древнего планшета. Так что это, наверное, самый популярный вариант для реализации удаленного управления. Облачных серверов тоже достаточно много, называются они MQTT брокерами. Принцип работы протокола и серверов я здесь рассматривать не буду, этой информации вполне достаточно и на других сайтах.

CloudMQTT.com

Начинал я с этого сервиса. Просто потому, что почти все примеры работы с MQTT протоколом основаны именно на нем. Сервис достаточно удобный и простой, все интуитивно понятно. В 2018 году сервис допускал на бесплатном тарифном плане подключение до 10 устройств, что меня вполне устраивало. Однако к концу 2018 владельцы сервиса пересмотрели свою политику и на бесплатном тарифном плане “Cute Cat” теперь доступно только 5 подключений. Лично для меня это очень мало. У меня одновременно могут подключены три “управляющих” устройства – два смартфона и планшет, и для собственно ESP остается только два подключения. А различной “автоматики” у меня уже достаточно много, и планируется еще. Конечно, можно наплодить несколько экземпляров брокеров внутри одной учетной записи, хотя и на них в последнее время ввели ограничения. Но в таком случае три контрольных устройства все равно “отожрут” три подключения для каждого экземпляра, а уж настраивать такое хозяйство – и врагу не пожелаешь. Самый дешевый платный тарифный план “Humble Hedgehog” стоит на момент написания статьи 5$ в месяц. Нет, меня одно довольно известное земноводное душит платить такие деньги каждый месяц . Да и возможностей при этом не так уж и шикарно – 25 подключений. Поэтому пришлось искать другие варианты.

Плюсы : удобно и просто

Минусы : только 5 подключений на бесплатном тарифном плане

flespi.io

Довольно долго я пользовался брокером mqtt.flespi.io . Привлек он меня тем, что на момент, когда я начал с ним работать, он допускал аж 100 конкурирующих подключений одновременно и огромные объемы передаваемых и сохраняемых сообщений. Шикарно! Однако сервис не так удобен, как CloudMQTT. Контрольная панель не очень удобна (хотя и совершенствуется), настройка прав доступа не понятна на первый взгляд, авторизация и устройств, и смартфонов по токенам с ограниченным сроком действия. Некоторых нужных мне функций нет, либо я не нашел как пользоваться. Например, как удалить сохраненные (retained) сообщения из базы – я так и не нашел. Строго говоря, это далеко не только MQTT брокер, так что возможно я просто не понял всех его возможностей. Иногда на разных смартфонах перестает обновляться информация в некоторых топиках. Пару раз из-за ошибок в прошивке и постоянных обращениях устройства к серверу сервис полностью блокировал учетную запись на несколько часов. Но все это можно было бы простить за такие возможности. Но увы, и здесь желание заработать взяло верх – с 2019 года на бесплатном тарифе введено ограничение в 10 подключений. В этом нет ничего предосудительного, но я не готов еще платить за хобби такие деньги, да еще за услуги довольно сомнительного качества. В общем, будем искать такой же, но с перламутровыми пуговицами…

Плюсы : раньше было до 100 подключений

Минусы : не удобен, сложен в настройке доступов, retained из панели не удалить

HiveMQ Public Broker

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

Плюсы

Минусы

Eclipse MQTT

Еще один публичный брокер без авторизации. Как и написано на сайте, этот брокер предназначен в первую очередь для тестирования и не предназначен для хранения и передачи конфиденциальной информации. Для подключения к серверу нужно использовать следующие параметры: сервер iot.eclipse.org, порт 1883; для TLS v1.2, v1.1 или v1.0 – порт 8883. Доступно подключение и по WebSockets. В общем, то же самое что и HiveMQ, только в боковой проекции…

Плюсы : бесплатный, без ограничений по подключениям

Минусы : подходит только для тестирования и метеостанций без удаленного управления

mosquitto.org

И еще один публичный брокер без авторизации. Можно не повторяться, все то же самое, что и у HiveMQ и Eclipse MQTT. Обратите внимание – то, что все эти серверы поддерживают шифрование TLS отнюдь не означает, что Ваши данные защищены. Защищен канал передачи между устройством и сервером, но сами данные находятся в открытом доступе.

Плюсы : бесплатный, без ограничений по подключениям

Минусы : подходит только для тестирования и метеостанций без удаленного управления

IBM Cloud (Bluemix)

Это не mqtt брокер, это целая платформа “Internet of Things Platform”. Но в ее составе есть и mqtt брокер. На бесплатном тарифном плане “Lite” допускается аж до 500 зарегистрированных устройств, и по 200 МБ информации на каждую метрику. Вполне шикарно не только для дома, но и для коммерческих устройств. Но, как всегда, не без “НО”. Во-первых, с этой платформой очень сложно разобраться. Документация есть, но ее очень много. Нет – ОЧЕНЬ много! Я потратил не один час, чтобы более – менее понять, как настроить подключение. Во-вторых, платформа позволяет публиковать топики строго в определенном формате: “iot-2/evt/ event_id /fmt/ format_string “ . Точно также с командами: “iot-2/cmd/ command_id /fmt/ format_string “. И все – никаких вольностей – то есть только номер сообщения и само сообщение. А вот форматов передаваемых сообщений уже больше – “json”, “xml”, “txt”, и “csv”. Возможно кому-то такой подход покажется очень правильным и удобным, но меня он не привлек. Да и сложно все устрено – возможностей, судя по всему, очень много, но с этим всем придется вначале разбираться.

Плюсы : очень большие лимиты по подключениям

Минусы : очень сложный для новичка, ограничения по топикам

mqtt.dioty.co

Это уже полностью бесплатный брокер. Пока. На странице параметров подключения написано следующее: “Этот MQTT-брокер в настоящее время работает в бета-версии. На этом этапе бета-тестирования мы не будем взимать плату, если вы превысите лимит в 50000 сообщений в месяц. Однако мы оставляем за собой право временно приостановить действие вашей учетной записи в случае, если вы влияете на обслуживание других пользователей. В этом случае мы всегда будем связываться с вами по электронной почте, чтобы попытаться понять ваши конкретные потребности и то, как мы можем их удовлетворить.”. 50000 сообщений в месяц – это примерно 70 сообщений в час, что не так уж и много, если учесть что одно устройство может публиковать за сеанс отправки данных с датчиков до 50 сообщений. Брокер поддерживает авторизацию и TLS-подключение. Регистрация привязана к учетной записи Google. Есть небольшое ограничение – все Ваши топики должны начинаться с адреса электронной почты, через которую вы зарегистрировались в сервисе, например так: “/[email protected]/…/…/…”. Но это проблема более-менее существенна только при настройке MQTT клиентов на смартфоне (больше текста набирать), да и то не всегда. На мой взгляд, этот сервис вполне заслуживает внимания. Работу с ним я не проверял, только зарегистрировался.

Плюсы : полностью бесплатен

Минусы : требуется определенный префикс для топиков, ограничение примерно 70 сообщений в час

Solace.Cloud (PubSub+)

Это не столько MQTT брокер, сколько целая IoT платформа. На бесплатном тарифном плане допускается до 50 подключений, до 1 GB передаваемых данных в месяц, до 4 GB хранимых данных (retianed сообщений). Неплохо. Но имеет даже в free версии очень много настроек – в нем сложно разобраться “с наскоку”. Именно поэтому в свое время я и не стал им пользоваться. Возможно, придет время, разберусь и настрою.

Плюсы : до 50 подключений

Минусы : довольно сложен в освоении

myqtthub.com

По всей видимости эстонский брокер. На бесплатном тарифном плане допускает: до 100 пользователей, но до 50 подключений; 10MB хранимых данных; до 50 подписок на подключение, максимум 250 подписок (причем не ясно, подписка “home/#” – это одна подписка или много?); 300 сообщений в минуту, но не более 800 в час и не более 10000 в день. Если исходить из регулярных (каждые пять минут) публикаций, то получается не более 34 сообщений за раз. Есть и еще ограничения – боле подробнее смотрите на главной странице сервиса . Ограничения, впрочем, выглядят вполне реальными для домашнего использования. Не пробовал…

Плюсы : до 50 подключений

Минусы : ограничения по количеству сообщений

mqtt.by

Простой в использовании белорусский брокер. Про ограничения не сказано нечего. Поддерживает авторизацию, но есть возможность сделать некоторые топики публичными, то есть открыть для всех остальных пользователей сервиса. Но нет поддержки безопасного соединения (TLS), это может быть критично для некоторых приложений. Каждый публикуемый топик должен начинаться с префикса “/user/имя_пользователя”, что несколько усложняет настройку мобильных mqtt клиентов, но не существенно. Из плюсов – на сервере есть общедоступные топики с датой и временем, что очень удобно для контрольной панели на основе планшета, которая работает 24 часа в сутки – заодно и часики еще одни (сто двенадцатые 🙂). В общем, вполне себе нормальный брокер, лишь бы работал стабильно.

Плюсы : без каких либо ограничений, есть публичные топики, можно опубликовать свои топики

Минусы : нет SSL/TLS шифрования подключений

mqtt.4api.ru

Российский бесплатный брокер – “мы предоставляем доступ к бесплатному mqtt серверу для всех желающих”. Авторизация и регистрация на сервисе через социальные сети. Появился, судя по всему, не очень давно. Хотя сам сайт имеет SSL сертификат, в параметрах подключения указаны данные только для “Без SSL”, видимо SSL подключение для устройств не доступно. Еще на странице подключения написано следующее: “Мы не рекомендуем использовать данный сервер для жизненно важных проектов”. Панель управления обладает весьма скромным функционалом, поэтому нужно пользоваться сторонним ПО

Плюсы : без каких либо ограничений

Минусы : нет SSL/TLS шифрования подключений, бедный функционал панели управления

Другие сервисы

Одним MQTT сыт не будешь. MQTT прост и удобен, но позволяет просматривать информацию “здесь и сейчас”, без истории изменений во времени. Для просмотра графиков имеются другие сервисы, наладить работы с которыми также не представляет особого труда. Некоторые из них представлены ниже.

ThingSpeak

ThingSpeak доступен как бесплатный сервис для некоммерческих небольших проектов (<3 миллиона сообщений в год или ~ 8 200 сообщений в день). Сервис позволяет накапливать получаемые данные в своих хранилищах, после чего их можно удобно просматривать в виде графиков. В том числе и на сторонних сайтах, .

Из особенностей сервиса – он имеет интеграцию с MatLab Analytics, но я сколько не пытался настроить скрипты MatLab, так у меня ничего и не вышло. Ну, не очень-то и хотелось. В бесплатном аккаунте сервис позволяет создавать до четырех каналов, в каждом из каналов можно хранить до 8 полей с различными данными. Еще в бесплатном аккаунте существует еще одно ограничение – нельзя публиковать данные чаще одного раза в 15 секунд (рекомендуется пауза в 20 секунд), это как бы “защита” от превышения лимита 8 200 сообщений в день. В принципе, все мои “публикаторы” легко вписываются в данный лимит, мне хватает. Пользуюсь сервисом довольно давно, достаточно удобен и прост, если не считать MatLab. Есть несколько программы – клиентов для android, но гораздо меньше, чем для MQTT.

Плюсы : простое использование на ESP, удобный сайт

Минусы : много ограничений на бесплатном аккаунте

open-monitoring.online

Этот сервис в чем-то аналогичен ThingSpeak – на него можно точно также отправлять данные и затем просматривать в виде таблиц, графиков и гистограмм. Интерфейс попроще, чем у ThingSpeak, но и настраивать его гораздо проще.

Изначально этот сервис был создан, как я понимаю, для мониторинга параметров персональных солнечных электростанций, но вполне подходит и для других целей. Сервис доступен всем и бесплатно, без существенных ограничений на текущий момент. Единственное ограничение, которое я пока обнаружил – отправка на сервер группы значений для одного контроллера не может быть чаще одного раза в минуту. Но на количество значений для каждого контроллера и на количество контроллеров ограничений вроде бы нет. Отправка данных на сервер осуществляется простым get-запросом, реализация на ArduinoIDE у меня заняла не более часа. В отличие от ThingSpeak сохраненные данные можно просматривать на одном графике (с наложением), а также настраивать некий dashboard для вывода последних значений. Так же можно просматривать сохраненные значения в виде простой таблицы.

Плюсы : простое использование на ESP, удобный интерфейс, почти нет ограничений

Минусы : нет возможности вывести графики на сторонние сайты (в отличие от ThingSpeak), ну или я пока не нашел как это сделать

beebotte

На главной странице этого сервиса написано следующее: “подключение всего и вся в режиме реального времени с использованием богатого API, поддерживающего REST, WebSockets и MQTT”. Лично я этот сервис пока не использовал. Судя по тому что я понял из описания, это дикая смесь mqtt брокера и thingspeak.com. В бесплатном режиме количество каналов и ресурсов не ограничено, но ограничено количество сообщений: 0.05 Million per day | 1.5 Million per month. Для хранимых сообщений лимиты еще меньше: 5 000 per day | 150 000 per month. Кроме того, сообщения хранятся только максимум три месяца, после чего удаляются. То есть погоду за весь год не посмотришь. Про мобильный клиент для смартфона мне пока ничего не известно. Зарегистрировался. Буду пробовать. Выводы делать пока рано.

Blynk

Активно продвигаемый сервис для удаленного управления “умными устройствами”. Я бы даже сказал, агрессивно – во все форумы пишут, где надо и где не надо. В целом, на мой лично взгляд, эта платформа не для любителей, а скорее для бизнеса. На “бесплатном режиме” дается очень мало ресурсов, разве что помигать светодиодиком или включить одно реле. В общем я один раз попробовал – и забросил, сразу ресурсы и кончились. Слишком жадные.

Плюсы : не нашел

Минусы : жадюги, мобильный клиент только один

Пока на этом все. Если Вы знаете другие способы управления ESP удаленно (обязательно с “мобилы”) – пожалуйста, напишите мне . Обсудим и, возможно, дополним статью.

Лучшие статьи по теме