


// Светодиод подлкючен к 5 пину // Датчик температуры ds18b20 к 2 пину #include #include <pubsubclient> #include <dallture> #define OeWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); const char *ssid = "AIRPORT"; // Имя вайфай точки доступа const char *pass = "PASSWORD"; // Пароль от точки доступа const char *mqtt_server = "server"; // Имя сервера MQTT const int mqtt_port = 11140; // Порт для подключения к серверу MQTT const char *mqtt_user = "Login"; // Логи от сервер const char *mqtt_pass = "Pass"; // Пароль от сервера #define BUFFER_SIZE 100 bool LedState = false; int tm=300; float temp=0; // Функция получения данных от сервера void callback(const MQTT::Publish& pub) { Serial.print(pub.topic()); // выводим в сериал порт название топика Serial.print(" => "); Serial.print(pub.payload_string()); // выводим в сериал порт значение полученных данных String payload = pub.payload_string(); if(String(pub.topic()) == "test/led") // проверяем из нужного ли нам топика пришли данные { int stled = payload.toInt(); // преобразуем полученные данные в тип integer digitalWrite(5,stled); // включаем или выключаем светодиод в зависимоти от полученных значений данных } } WiFiClient wclient; PubSubClient client(wclient, mqtt_server, mqtt_port); void setup() { sensors.begin(); Serial.begin(115200); delay(10); Serial.println(); Serial.println(); pinMode(5, OUTPUT); } void loop() { // подключаемся к wi-fi if (WiFi.status() != WL_CONNECTED) { Serial.print("Connecting to "); Serial.print(ssid); Serial.println("..."); WiFi.begin(ssid, pass); if (WiFi.waitForConnectResult() != WL_CONNECTED) return; Serial.println("WiFi connected"); } // подключаемся к MQTT серверу if (WiFi.status() == WL_CONNECTED) { if (!client.connected()) { Serial.println("Connecting to MQTT server"); if (client.connect(MQTT::Connect("arduinoClient2") .set_auth(mqtt_user, mqtt_pass))) { Serial.println("Connected to MQTT server"); client.set_callback(callback); client.subscribe("test/led"); // подписывааемся по топик с данными для светодиода } else { Serial.println("Could not connect to MQTT server"); } } if (client.connected()){ client.loop(); TempSend(); } } } // конец основного цикла // Функция отправки показаний с термодатчика void TempSend(){ if (tm==0) { sensors.requestTemperatures(); // от датчика получаем значение температуры float temp = sensors.getTempCByIndex(0); client.publish("test/temp",String(temp)); // отправляем в топик для термодатчика значение температуры Serial.println(temp); tm = 300; // пауза меду отправками значений температуры коло 3 секунд } tm--; delay(10); } </dallture></pubsubclient> В результате мы получаем удобный инструмент для дистанционного управления и мониторинга данных, который довольно прост в освоении и будет по силу даже начинающим.Видео с демонстрацией работы системы управленияПодробная видеоинструкция по настройке системыОдин из вариантов применения управления esp8266 через MQTT протоколУправление светодиодной лентой через интернет Если у вас возникли вопросы по данному материалу, то рекомендую посмотреть вторую часть видео, где материал изложен более наглядно. В архиве находятся скетч и все необходимые библиотеки для прошивки микроконтроллера скетчем из примера. Обращаю ваше внимание, что библиотека ESP8266WiFi.h не входит в данный архив, она устанавливается через Boards manager в среде Arduino.АРХИВ MQTT сервер — www.cloudmqtt.com Ссылка на приложение IoT MQTT Dashboard — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru Всем спасибо за внимание.Используемые источники:
- https://habr.com/post/393277/
ESP8266 и Arduino, подключение, распиновка
Вывод в монитор порта через Serial print, println, write
WiFi ESP8266 в проектах Arduino
Настройка программного обеспечения ESP8266 в Arduino IDE