Рассмотрим пример который позволит управлять светодиодом микроконтроллера через виджет «Переключатели» и строить график уровень Wi-Fi сигнала.
Что нам потребуется:
Добавление и настройка устройства:
Прошивка ESP8266:
#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);
}
Добавления виджетов:
Теперь вы все настроили и осталось дождаться подключения вашего устройства на сервер и сможете управлять светодиодом путем нажатия на переключатель в Панели.