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

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

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

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

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

Прошивка ESP8266:

  1. Создайте новый проект в Arduino IDE.
  2. Скопируйте указанный ниже пример в созданный проект.
    #include <ESP8266WiFi.h>
    #include <VizIoTMqttClient.h>
    #include <ArduinoJson.h>
    #include <Ticker.h>
    
    //ssid и пароль доступа для подключения к WI-FI
    const char* WIFI_SSID = "your_wifi_ssid";
    const char* WIFI_PASSWORD = "your_wifi_password";
    
    //Ключ и пароль доступа устройства
    const char* VIZIOT_DEVICE_KEY = "your_16_char_device_key";
    const char* VIZIOT_DEVICE_PASS = "your_20_char_device_pass";
    
    //Создание MQTT клиента
    VizIoTMqttClient mqttClient(VIZIOT_DEVICE_KEY, VIZIOT_DEVICE_PASS);
    
    //Адрес ноги со светодиодом
    #define LED_ESP D4
    // Статус светодиода
    bool ledState = false;
    
    // Таймер для отправки данных MQTT-брокеру VizIoT
    Ticker sender;
    bool isSendDataToServer = false;
    void SendDataToServer() {
      isSendDataToServer = true;
    }
    #define INTERVAL_SEND_DATA 300  // Отправляйте данные каждые 5 минут (5*60=300)
    
    // Функция отправки данных MQTT-брокеру VizIoT
    void sendPacketToVizIoT() {
      DynamicJsonDocument doc(256);
      JsonObject obj = doc.to<JsonObject>();
      obj["led"] = ledState ? 1 : 0;
      obj["rssi"] = WiFi.RSSI();
    
      String jsonStr;
      serializeJson(doc, jsonStr);
    
      if (mqttClient.publishJson(jsonStr.c_str())) {
        Serial.println("Published JSON: " + jsonStr);
      } else {
        Serial.println("Failed to publish JSON");
      }
    }
    
    // Функция для полученных параметров от MQTT-брокеру VizIoT
    void onParameterReceived(const char* paramName, const char* value) {
      Serial.print("Received parameter: ");
      Serial.print(paramName);
      Serial.print(" = ");
      Serial.println(value);
    
      if (strcmp(paramName, "led") == 0) {
        bool newState = (strcmp(value, "1") == 0);
        ledState = newState;
        digitalWrite(LED_ESP, ledState ? LOW : HIGH);  // Включить = LOW
        Serial.print("LED state updated to: ");
        Serial.println(ledState ? "ON" : "OFF");
        sendPacketToVizIoT();
      }
    }
    
    //Функция подключения к WI-FI
    void setup_wifi() {
      WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
      Serial.print("Connecting to Wi-Fi...");
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.print(".");
      }
      Serial.println("Connected to Wi-Fi");
    }
    
    void setup() {
      //Включаем вывод информации в Serial Monitor
      Serial.begin(115200);
    
      //разрешаем управлять светодиодом
      pinMode(LED_ESP, OUTPUT);
      digitalWrite(LED_ESP, HIGH);  // Светодиод выключен
    
      //Подключаемся к WI-FI
      setup_wifi();
    
      // Запускаем mqtt клиент и указываем функцию обработки входных сообщений
      mqttClient.begin();
      mqttClient.setParameterCallback(onParameterReceived);
    
      // Создаем событие отправки данных каждые INTERVAL_SEND_DATA сек
      sender.attach(INTERVAL_SEND_DATA, SendDataToServer);
    
      // Отправим данные, как только подключимся к брокеру
      SendDataToServer();
    }
    
    void loop() {
      // Проверяем подключениек WiFi
      if (WiFi.status() != WL_CONNECTED) {
        WiFi.reconnect();
        delay(1000);
        return;
      }
    
      // Обработка входящих сообщений и поддержания активного соединения с MQTT-брокером.
      mqttClient.poll();
      if (!mqttClient.isConnected()) {
        mqttClient.reconnect();
      }
    
      // Отправка данных на сервер каждые 5 минут
      if (isSendDataToServer) {
        isSendDataToServer = false;
        sendPacketToVizIoT();
      }
    
      delay(100);
    }
    
  3. Установите библиотеки «VizIoTMqttClient», «ArduinoJson» и «Ticker» для работы MQTT клиента.
  4. Укажите значения переменных:
    1. WIFI_SSID – Имя вашей Wi-Fi точки
    2. WIFI_PASSWORD – пароль вашей Wi-Fi точки
    3. VIZIOT_DEVICE_KEY – скопированный Ключ доступа устройства
    4. VIZIOT_DEVICE_PASS – скопированный Пароль доступа устройства
  5. Подключите вашу ESP8266 к компьютеру и загрузите полученный скетч.

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

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

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