Интернет вещей (IoT)
Интернет вещей - это новая технология, которая позволяет нам создавать сеть устройств, датчиков, исполнительных механизмов для подключения и обмена данными. MQTT (Телеметрический транспорт сообщений) является одним из наиболее часто используемых протоколов в этой области. Он состоит из MQTT Broker и MQTT Clients. Где MQTT Broker - это сервер, через который все клиенты MQTT связываются друг с другом. CloudMQTT предоставляет MQTT Broker в качестве службы, которую мы используем в этом руководстве.
В этом проекте мы контролируем светодиод, подключенный к ESP8266, из мобильного приложения по протоколу MQTT. Здесь мы используем бесплатный CloudMQTT .
Необходимые компоненты
- ESP8266
- 470 Ом Резистор
- СВЕТОДИОД
- макетная плата
- USB-кабель
- Провода «папа-папа»
Схема на макетке
Программное обеспечение
Создание учетной записи в CloudMQTT - MQTT Broker
- Сначала надо создать учетную запись в CloudMQTT.
- Введите свой адрес электронной почты в «Создать учетную запись», затем нажмите «Зарегистрироваться».
- Сервер CloudMQTT отправит вам письмо с подтверждением на указанный адрес электронной почты.
- Войдите в свой идентификатор электронной почты, откройте подтверждение электронной почты, отправленное CloudMQTT, и нажмите значок подтверждения электронной почты.
- Введите пароль для своей учетной записи CloudMQTT (по вашему желанию), подтвердите пароль, выберите вариант: «Да» для согласия и согласия и нажмите значок «Отправить».
- Нажмите «Создать новый экземпляр» (который находится в верхней правой части браузера).
- Введите «Имя», например, для создания, например: CloudMQTT.
- Нажмите «Выбрать регион», а затем нажмите «Подтвердить».
- Затем нажмите «Создать экземпляр», чтобы завершить создание экземпляра.
- После создания нового экземпляра нам нужно записать имя экземпляра, сервер, пользователь, пароль и порт.
Программирование ESP8266 - MQTT Client
Arduino Code
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
const char *ssid = "SERVER NAME";
const char *password = "SERVER PASSWORD";
const char *mqtt_server = "m11.cloudmqtt.com";
const char *device_id = "esp8266";
WiFiClient espClient;
PubSubClient client(espClient);
const byte ledPin5 = 16;
char message_buff[100];
void callback(char *led_control, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(led_control);
Serial.println("] ");
int i;
for (i = 0; i & length; i++)
{
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
String msgString = String(message_buff);
Serial.println(msgString);
if (strcmp(led_control, "esp8266/led_control") == 0)
{
if (msgString == "1")
{
digitalWrite(ledPin5, LOW); // PIN HIGH will switch OFF the relay
}
if (msgString == "0")
{
digitalWrite(ledPin5, HIGH); // PIN LOW will switch ON the relay
}
}
}
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
if (client.connect(device_id, "cloud_username", "cloud_password"))
{
Serial.println("connected");
client.subscribe("esp8266/led_control"); // write your unique ID here
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
client.setServer(mqtt_server, 1883); // change port number as mentioned in your cloudmqtt console
client.setCallback(callback);
pinMode(ledPin5, OUTPUT);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
}
Пояснение к коду
Включаем библиотеку WiFi ESP8266, которая предоставляет специальные процедуры WiFi для ESP8266, и мы называем ее для подключения к сети. Библиотека PubSubClient позволяет клиенту публиковать / подписывать сообщения с помощью сервера поддержки MQTT.
#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
Получите и введите «ssid» и «пароль», т.е. ваше имя и пароль WiFi.
const char * ssid = "ИМЯ СЕРВЕРА";
const char * password = "ПАРОЛЬ СЕРВЕРА";
Получите и введите имя «MQTT Server» и уникальный идентификатор. Назначьте MQTT в качестве клиента для ESP8266.
const char * mqtt_server = "m11.cloudmqtt.com";
const char * device_id = "esp8266";
Выберите цифровой вывод D5 NodeMCU для выполнения операции управления светодиодом и инициализируйте массив message_buff с типом char.
константный байт ledPin5 = 14;
char message_buff [100];
Пишем функцию для чтения символов с последовательного монитора и управления включением и выключением светодиода в соответствии с инструкциями, передаваемыми из приложения MQTT Dashboard Play Store.
void callback (char * led_control, byte * payload, unsigned int length)
{
Serial.print ("Сообщение прибыло [");
Serial.print (led_control);
Serial.println ("]");
int i;
для (i = 0; i & length; i ++)
{
message_buff [i] = полезная нагрузка [i];
}
message_buff [i] = '\ 0';
String msgString = String (message_buff);
Serial.println (msgString);
if (strcmp (led_control, "esp8266 / led_control") == 0)
{
if (msgString == "1")
{
digitalWrite (ledPin5, LOW);
}
if (msgString == "0")
{
digitalWrite (ledPin5, HIGH);
}
}
}
Фактическое подключение к серверу MQTT инициализируется путем вызова приведенных ниже инструкций. Мы должны ввести имя пользователя, пароль и уникальный идентификатор cloudmqtt в соответствующем месте. Если клиент подключен, то мы можем контролировать работу подключенного светодиода NodeMCU через приложение MQTT Dash.
voidconnect ()
{
while (! client.connected ())
{
Serial.print («Попытка подключения MQTT ...»);
if (client.connect (device_id, "CLOUD USER NAME", "CLOUD PASSWORD"))
{
Serial.println ( "подключен");
client.subscribe ( "esp8266 / led_control");
}
Если клиент не подключен, он будет пытаться подключаться снова и снова каждые 5 секунд.
else
{
Serial.print ("failed, rc =");
Serial.print (client.state ());
Serial.println («повторите попытку через 5 секунд»);
Задержка (5000);
}
}
}
Поместите ваш код настройки или конфигурации в функцию настройки, он будет запускаться только один раз при запуске.
Здесь, в функции настройки, он подключится к сети Wi-Fi, а также инициализирует последовательную связь для отладки и ведения журнала со скоростью передачи 115200 бод. Измените номер порта, как указано в консоли cloudmqtt. Настройка режима работы в качестве выхода для вывода D5 NodeMCU.
void setup ()
{
Serial.begin (115200);
client.setServer (mqtt_server, 1883);
client.setCallback (обратный вызов);
pinMode (ledPin5, OUTPUT);
}
Поместите ваш основной код в функцию void loop () для повторного запуска. Это постоянно ждет и проверяет подключение клиента.
void loop ()
{
if (! client.connected ())
{
восстановить ();
}
client.loop ();
}
Настройка мобильного приложения - MQTT Client
- Установите приложение MQTT Dash на свой мобильный из Play Store.
- Нажмите значок «+», который находится в верхней правой части приложения.
- Добавьте учетные данные созданного экземпляра (который вы записали с созданной учетной записи www.cloudmqtt.com) в приложение и нажмите на значок сохранения (который находится в верхнем правом углу приложения).
- Нажмите на добавленный экземпляр ex: CloudMQTT, после чего появится всплывающее окно.
- Нажмите на значок «+» (который находится в верхней правой части приложения).
- «Выберите тип» как «Переключатель / кнопка», появится всплывающее окно.
- Создайте кнопку с выбранным пользователем именем и темой (подпунктом) как «esp8266 / led_control».
- Проверьте вывод, нажав на созданный значок кнопки в приложении, и работа индикатора будет контролироваться с помощью значка кнопки.
В этом проекте мы имеем 3 части: MQTT Dash (мобильное приложение - MQTT Client), CloudMQTT (MQTT Broker как услуга) и ESP8266 Circuit (светодиодная схема управления - MQTT Client). Наше мобильное приложение отправляет команды на схему ESP8266 через брокера MQTT. MQTT - это протокол публикации и подписки.