Статьи

Как построить систему IoT с использованием Arduino / ESP8266 mydevices Cayenne и MQTT

В этой статье описывается, как построить систему IoT с использованием Arduino / ESP8266 mydevices Cayenne и MQTT. Более подробно, это руководство по IoT раскрывает, как использовать Arduino (или ESP8266) для отправки данных в Cayenne с использованием протокола MQTT. Кроме того, этот проект Arduino / ESP8266 MQTT исследует, как использовать MQTT для управления удаленным периферийным устройством с помощью веб-интерфейса. Это полное пошаговое руководство по созданию системы IoT с использованием Cayenne и Arduino.

Более подробно, в этом руководстве по IoT показано, как использовать MQTT с Arduino или ESP8266 с двух разных точек зрения:

  • первое, где есть необходимость отправлять данные из Arduino на облачную платформу IoT (например, Cayenne)
  • второй, где мы должны дистанционно управлять нашим Arduino или ESP8266

Первый сценарий имеет место, когда мы должны отправить в облако данные, полученные от датчика, подключенного к Arduino (или ESP8266). Это распространенный сценарий, и, вообще говоря, это происходит каждый раз, когда необходимо получить и отправить данные с использованием MQTT. Другой сценарий возникает, когда необходимо удаленно управлять устройством с помощью MQTT, в этом случае мы будем управлять Arduino (или ESP8266) с использованием протокола MQTT.

Все мы знаем важность IoT в настоящее время и тот факт, что в ближайшем будущем всегда будет больше подключенных устройств. Бытовая техника, умные устройства, носимые и так далее будут частью нашей жизни. Понятно тогда значение IoT (интернета вещей) и тот факт, что мы должны быть готовы к следующему будущему. Используя это руководство по MQTT, вы приобретете несколько важных концепций, лежащих в основе системы IoT. В этом контексте широко используется протокол MQTT, который играет жизненно важную роль в обеспечении обмена данными между устройствами.

Мы уже подробно рассмотрели, как использовать протокол MQTT, и, если вы новичок, вы должны прочитать перед началом этого урока, что такое MQTT и как его использовать .

С другой стороны, Cayenne — это облачная платформа IoT, которая предоставляет несколько облачных сервисов:

  • Визуализация данных
  • Интернет вещей
  • Оповещения

Мы сосредоточим наше внимание на визуализации данных и на облачных сервисах IoT.

Как отправить данные из Arduino / ESP8266 в Cayenne с помощью MQTT

В этой первой части этого проекта мы рассмотрим, как отправлять данные из Arduino / ESP8266 в Cayenne с помощью MQTT. Для простоты в этом проекте IoT используется простой датчик BMP280. Этот датчик способен измерять:

  • температура
  • влажность
  • давление

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

Как подключить Arduino к Cayenne

Первым шагом является настройка устройства на платформе Cayenne. Для этого необходимо создать бесплатный аккаунт по этой ссылке.

Когда вы будете готовы, перейдите на платформу Cayenne mydevices и нажмите кнопку «Добавить новый…». Выберите «Устройство / Виджет», а затем выберите свою доску IoT. В этом примере мы используем ESP8266. В конце Cayenne должен показать веб-страницу, содержащую все детали о том, как подключить Arduino к Cayenne с помощью MQTT:

На схеме выше показано, как подключить Wemos D1 к BMP / BME280. В любом случае, если вы используете Arduino, схема очень похожа.

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

Конфигурирование Cayenne для MQTT

Первым шагом является создание нового устройства, как показано на рисунке ниже:

Это все. Настало время подключить наше устройство IoT. Для этого вы можете импортировать библиотеку Cayenne в вашу Arduino IDE:

Как только библиотека установлена, вы можете перейти к File-> examples-> CayenneMQTT-> Connections и получить код, соответствующий вашему IoT-устройству. Код ниже для ESP8266:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
 
// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifi_pwd";
 
// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "your usename";
char password[] = "your pwd";
char clientID[] = "your client_id";
 
void setup() {
Serial.begin(9600);
  Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}
 
void loop() {
  Cayenne.loop();
}
 
CAYENNE_OUT_DEFAULT()
{
 // Here the data we want to send
}

Теперь замените в приведенном выше коде параметры на те, которые показаны на первом рисунке (имя пользователя MQTT, пароль MQTT, идентификатор клиента) и попробуйте подключить ваше устройство IoT к CQQ. Результат ниже:

Последний шаг перед отправкой данных — это настройка каналов, напоминающих виртуальный канал, где Arduino отправляет данные в Cayenne, используя MQTT. Обычно каждая физическая величина, которую мы хотим измерить, должна быть связана с каналом.

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

Наконец, пришло время отправлять данные с использованием MQTT в Cayenne. Мы должны изменить исходный код, чтобы Arduino / ESP8266 считывал данные с датчиков и отправлял эти значения в Cayenne. Исходный код довольно прост:

1
2
3
4
5
6
7
....
CAYENNE_OUT_DEFAULT() {
  Cayenne.virtualWrite(0, millis() / 1000);
  Cayenne.celsiusWrite(1, temp);
  Cayenne.virtualWrite(2, press);
  Cayenne.virtualWrite(3, hum);
}

Вот и все, теперь мы можем видеть живые данные или, другими словами, данные, поступающие с датчиков, подключенных к Arduino:

Вы можете заметить виртуальные каналы, используемые в исходном коде Arduino.

Как управлять Arduino / ESP8266 из Кайенны с помощью MQTT

Во второй части этого проекта IoT, основанного на Arduino и Cayenne, мы используем MQTT для удаленного управления ESP8266 (или Arduino). В этом примере панель Neopixel подключена к ESP8266. Целью является управление цветами с помощью MQTT через веб-интерфейс (интерфейс Cayenne). Этот пример может быть дополнительно расширен и возможно подключение других видов периферийных устройств. Изображение ниже показывает приборную панель Cayenne, которая будет управлять светодиодами RGB на панели Neopixel:

Как вы можете заметить, есть три ползунка, которые контролируют красный, зеленый и синий цветовые компоненты.

Как подключить ESP8266 к светодиодам RGB

Первым шагом является подключение Neopixels к ESP8266. Обратите внимание, что если вы используете плату Arduino, соединения практически одинаковы. На рисунке ниже показана схема:

Есть только три провода:

  • Vcc (5 В)
  • GND (Земля)
  • Сигнал (ESP8266 D1 контакт)

Для управления светодиодами RGB необходимо импортировать библиотеку неопикселей и добавить в эскиз следующий код:

01
02
03
04
05
06
07
08
09
10
11
12
#include <Adafruit_NeoPixel.h>
#define PIN            D1
#define NUMPIXELS      8
 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN,</pre>
<pre>                           NEO_GRB + NEO_KHZ800);
 
void updateLeds() {
  for (int i=0; i < NUMPIXELS;i++
    pixels.setPixelColor(i, pixels.Color(red,green,blue));
    pixels.show();
}

Код очень прост, необходимо определить вывод данных (в данном примере D1) и количество пикселей, поддерживаемых полосой неопикселя.

Как настроить панель управления Cayenne с помощью MQTT

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

Важно отметить, чтобы выбрать правильный канал для каждого цветового компонента:

  • Красный (канал 1)
  • Зеленый (канал 2)
  • Синий (канал 3)

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void setup() {
  Serial.begin(9600);
  Cayenne.begin(username, password, clientID, ssid, wifiPassword);
  pixels.begin();
}
 
void loop() {
  Cayenne.loop();
}
 
CAYENNE_OUT_DEFAULT() { }
 
CAYENNE_IN(RED_CHANNEL) {
   red = getValue.asInt(); // 0 to 255
   CAYENNE_LOG("Channel %d,  value %d", RED_CHANNEL, red);
   updateLeds();
}
CAYENNE_IN(BLUE_CHANNEL) {
   blue = getValue.asInt(); // 0 to 255
   CAYENNE_LOG("Channel %d,  value %d", BLUE_CHANNEL, blue);
   updateLeds();
}
 
CAYENNE_IN(GREEN_CHANNEL) {
 green = getValue.asInt(); // 0 to 255
 CAYENNE_LOG("Channel %d,  value %d", GREEN_CHANNEL, green);
 updateLeds();
}

Есть три разных CAYENNE_IN одному для каждого канала. В каждом канале эскиз обрабатывает новое значение, отправленное с использованием MQTT. Каждый раз, когда ESP8266 получает новое значение от приборной панели Cayenne IoT через MQTT, он обновляет светодиоды RGB для отражения новых цветовых компонентов.

Резюме

В конце этой статьи вы, надеюсь, получили знания о том, как интегрировать Arduino / ESP822 и Cayenne с помощью MQTT. Вы создали систему IoT, в которой используются датчики, которые измеряют физические величины и отправляют данные в облако по протоколу MQTT. Во второй части мы рассмотрели, как управлять периферийными устройствами, подключенными к ESP8266 (или Arduino), используя MQTT. С помощью панели инструментов IoT Cayenne ESP8266 выбирает цвет светодиодов RGB, используя данные, отправленные с использованием MQTT. Этот проект IoT может быть дополнительно расширен, и вы можете применять одни и те же принципы к различным сценариям и работать с различными датчиками или периферийными устройствами.

Опубликовано на Java Code Geeks с разрешения Франческо Аццолы, партнера по нашей программе JCG. См. Оригинальную статью здесь: Как построить систему IoT с использованием Arduino / ESP8266 mydevices Cayenne и MQTT

Мнения, высказанные участниками Java Code Geeks, являются их собственными.