ESP8266 MQTT -> Управление светодиодом

Рассмотрим пример который позволит управлять светодиодом микроконтроллера через виджет «Переключатели» и строить график уровень Wi-Fi сигнала.

Что нам потребуется:

  • Микроконтроллер: ESP8266 Wemos d1 mini
  • Среда разработки: Arduino IDE (как настроить можно посмотреть здесь)

Добавление и настройка устройства:

  1. Добавим новое устройство в VizIoT с именем «Тест управление светодиодом»
  2. Настроим параметры устройства. Добавьте два параметра:
    1. Ключ rssi с типом «Мощность сигнала, dBm»
    2. Ключ led с типом «Вкл / выкл, 0-1»
  3. В «Основных настройках» устройства скопируем Ключ доступа и Пароль доступа.

Прошивка ESP8266:

  1. Создайте новый проект в Arduino IDE.
  2. Скопируйте указанный ниже пример в созданный проект.
    #include <ESP8266WiFi.h>
    #include <Ticker.h>
    #include <VizIoTMqttClient.h>
    
    //Адрес ноги со светодиодом
    #define LED_ESP 2
    
    //ssid и пароль доступа для подключения к WI-FI
    const char* ssid = "..........";
    const char* password = "...........";
    
    //Зарегистрируйтесь в VizIoT.com и создайте устройство
    //Ключ и пароль доступа VizIoT Устройства (можно узнать в настройках устройства)
    String VizIoT_Device_key = "................";
    String VizIoT_Device_pass = "....................";
    
    WiFiClient espClient;
    PubSubClient clientMQTT(espClient);
    VizIoTMqttClient clientVizIoT(clientMQTT);
    long lastMsg = 0;
    char msg[100];
    byte statusLed = 0;
    
    
    /*----------Отправка данных----------------*/
    Ticker sender;
    bool isSendDataToServer;
    void SendDataToServer() {isSendDataToServer = true;} 
    #define INTERVAL_SEND_DATA 30 //Отправка данных каждые 5 минут (5*60=300)
    /*----------Отправка данных----------------*/
    
    
    
    void setup()
    { 
      //разрешаем управлять светодиодом
      pinMode(LED_ESP, OUTPUT);
      digitalWrite(LED_ESP, HIGH);
      
      //Включаем вывод информации в Serial Monitor
      Serial.begin(9600);
      
      //Подключаемся к WI-FI
      setup_wifi();
      
      clientVizIoT.config(VizIoT_Device_key, VizIoT_Device_pass);
      clientVizIoT.listenCommand(callback);
      sender.attach(INTERVAL_SEND_DATA, SendDataToServer); // Создаем событие отправки данных каждые INTERVAL_SEND_DATA сек
    }
    
    //Обработка события получения данных
    void callback(String parameter, byte value) {
       Serial.print("Публикация сообщения: parameter");
       Serial.print(parameter);
       Serial.print("value ");
        Serial.println(value);
      if (parameter.compareTo("led") == 0) {
        if (value == 1) {
          statusLed = 1;
          digitalWrite(LED_ESP, LOW);
        } else {
          statusLed = 0;
          digitalWrite(LED_ESP, HIGH);
        }
    
        snprintf(msg, sizeof(msg), "{\"led\":\"%c\"}", (statusLed) ? '1' : '0');
        Serial.print("Публикация сообщения: ");
        Serial.println(msg);
    
        clientVizIoT.sendJsonString(String(msg));
      }
    }
    
    //Функция подключения к WI-FI
    void setup_wifi() {
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        //Ожидает подключения к WI-FI
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi подключен");
    }
    
    
    
    void loop()
    {
      //необходим для обработки входящих сообщения и поддержания подключения к Брокеру
      clientVizIoT.loop();
    
      if (isSendDataToServer) {
        isSendDataToServer = false; 
        
    
        snprintf (msg, sizeof(msg), "{\"rssi\":\"%i\",\"led\":\"%c\"}", WiFi.RSSI(), (statusLed) ? '1' : '0');
        Serial.print("Публикация сообщения: ");
        Serial.println(msg);
        clientVizIoT.sendJsonString(String(msg));
      }
    }
    
  3. Установите библиотеку «PubSubClient и VizIoTMqttClient» для работы MQTT клиента.
  4. Отредактировать параметр
    #define MQTT_MAX_PACKET_SIZE 1024
    в библиотеке «PubSubClient» она обычно расположена в «C:\Users\{Имя пользователя}\Documents\arduino\libraries\PubSubClient\src\PubSubClient.h»
  5. Укажите значения переменных:
    1. ssid – Имя вашей Wi-Fi точки
    2. password – пароль вашей Wi-Fi точки
    3. VizIoT_Device_key – скопированный Ключ доступа устройства
    4. VizIoT_Device_pass – скопированный Пароль доступа устройства
  6. Подключите вашу ESP8266 к компьютеру и загрузите полученный скетч.

Добавления виджетов:

  • Создадим новую панель с именем «Тест панель управления»
  • Добавим два виджета:
    • Уровня сигнала
      • тип: «График»;
      • устройство: «Тест управление светодиодом»;
      • параметр: rssi;
    • Управление светодиодом
      • тип: «Переключатели»;
      • устройство: «Тест управление светодиодом»;
      • параметр: led;

Теперь вы все настроили и осталось дождаться подключения вашего устройства на сервер и сможете управлять светодиодом путем нажатия на переключатель в Панели.