Интернет вещей (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 - это протокол публикации и подписки.