Примеры из видео
// работа с thingspeak // https://youtu.be/PWeCdzc8tRw #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <OneWire.h> #include <Wire.h> OneWire ds(5); // вход датчика 18b20, SDA/D2 // Настройки сети #define ssid "WLAN1" // настройки подключения к wifi #define password "1231234123" #define mqtt_server "mqtt.thingspeak.com" // mqtt брокер #define mqtt_port 1883 // порт подключения к mqtt #define mqtt_topic "channels/205419/publish/fields/field1/Q8QDQ3WJ2QUSSQXY" // топик с которым будем работать WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; // вызывается когда приходят данные от брокера //void callback(char* topic, byte* payload, unsigned int length) { // Serial.print("Message arrived ["); // Serial.print(topic); // отправляем в монитор порта название топика // Serial.print("] "); // for (int i = 0; i < length; i++) { // отправляем данные из топика // Serial.print((char)payload[i]); // } // Serial.println(); //} ////////////// // подключение к wifi void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // // подключение к mqtt брокеру void reconnect() { while (!client.connected()) { // крутимся пока не подключемся. Serial.print("Attempting MQTT connection..."); // создаем случайный идентификатор клиента String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // подключаемся, в client.connect передаем ID, логин и пасс if (client.connect(clientId.c_str())) { Serial.println("connected"); // если подключились // client.subscribe(mqtt_topic); // НЕ!подписываемся на топик, иначе сервер нас отключит } else { // иначе ругаемся в монитор порта Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); // подключаемся к wifi client.setServer(mqtt_server, mqtt_port); // указываем адрес брокера и порт // client.setCallback(callback); // подписатся на топик в thingspeak нельзя } float getTemp(){ // возвращает температуру с градусника ds18b20 byte data[12]; byte addr[8]; if (!ds.search(addr)) { Serial.println("No more addresses."); } ds.reset_search(); if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); } ds.reset(); ds.select(addr); ds.write(0x44); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds.read(); } int raw = (data[1] << 8) | data[0]; if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; return raw / 16.0; } ////////////////////// void loop() { char msg[5]; // забераем температуру и конвертируем её в char float tmp = getTemp(); dtostrf(tmp, 5, 2, msg); if (!client.connected()) { // проверяем подключение к брокеру reconnect(); // еще бы проверить подкючение к wifi... } client.loop(); long now = millis(); // каждые 10 секунд if (now - lastMsg > 10000) { lastMsg = now; client.publish(mqtt_topic, msg); // пишем в топик Serial.println(msg); } }
// работа с cloudmqtt.com // https://youtu.be/PWeCdzc8tRw #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <OneWire.h> #include <Wire.h> OneWire ds(5); // вход датчика 18b20, SDA/D2 // Настройки сети #define ssid "WLAN1" // настройки подключения к wifi #define password "1231234123" #define mqtt_server "m21.cloudmqtt.com" // mqtt брокер #define mqtt_login "kkbyfuon" #define mqtt_password "2Qg0vFlIWCFF" #define mqtt_port 12843 // порт подключения к mqtt, у cloudmqtt порт отличный от 1883 #define mqtt_topic "temp" // топик с которым будем работать WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; // вызывается когда приходят данные от брокера void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); // отправляем в монитор порта название топика Serial.print("] "); for (int i = 0; i < length; i++) { // отправляем данные из топика Serial.print((char)payload[i]); } Serial.println(); } ////////////// // подключение к wifi void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // // подключение к mqtt брокеру void reconnect() { while (!client.connected()) { // крутимся пока не подключемся. Serial.print("Attempting MQTT connection..."); // создаем случайный идентификатор клиента String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // подключаемся, в client.connect передаем ID, логин и пасс if (client.connect(clientId.c_str(), mqtt_login, mqtt_password)) { Serial.println("connected"); // если подключились client.subscribe(mqtt_topic); // подписываемся на топик, в который же пишем данные } else { // иначе ругаемся в монитор порта Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { Serial.begin(115200); setup_wifi(); // подключаемся к wifi client.setServer(mqtt_server, mqtt_port); // указываем адрес брокера и порт client.setCallback(callback); // указываем функцию которая вызывается когда приходят данные от брокера } float getTemp(){ // возвращает температуру с градусника ds18b20 byte data[12]; byte addr[8]; if (!ds.search(addr)) { Serial.println("No more addresses."); } ds.reset_search(); if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); } ds.reset(); ds.select(addr); ds.write(0x44); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds.read(); } int raw = (data[1] << 8) | data[0]; if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; return raw / 16.0; } ////////////////////// void loop() { char msg[5]; // забераем температуру и конвертируем её в char float tmp = getTemp(); dtostrf(tmp, 6, 2, msg); if (!client.connected()) { // проверяем подключение к брокеру reconnect(); // еще бы проверить подкючение к wifi... } client.loop(); long now = millis(); // каждые 10 секунд if (now - lastMsg > 10000) { lastMsg = now; client.publish(mqtt_topic, msg); // пишем в топик } }
// Код из видео WEMOS Relay Shield и Управление реле через интернет по MQTT // https://youtu.be/iuIsopck66I #include <ESP8266WiFi.h> #include <PubSubClient.h> #define RELAY D1 // Настройки сети #define ssid "WLAN1" // настройки подключения к wifi #define password "1231234123" #define mqtt_server "m14.cloudmqtt.com" // mqtt брокер #define mqtt_login "vafrgppq" #define mqtt_password "jvzlh59GF60G" #define mqtt_port 16038 // порт подключения к mqtt, у cloudmqtt порт отличный от 1883 #define mqtt_topic "temp" // топик с которым будем работать WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; // вызывается когда приходят данные от брокера void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); // отправляем в монитор порта название топика Serial.print("] "); for (int i = 0; i < length; i++) { // отправляем данные из топика Serial.print((char)payload[i]); } Serial.println(); // работаем с реле if (payload[0] == '0') digitalWrite(RELAY, LOW); else if (payload[0] == '1') digitalWrite(RELAY, HIGH); else if (payload[0] == '2') digitalWrite(RELAY, !digitalRead(RELAY)); } ////////////// // подключение к wifi void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // // подключение к mqtt брокеру void reconnect() { while (!client.connected()) { // крутимся пока не подключемся. Serial.print("Attempting MQTT connection..."); // создаем случайный идентификатор клиента String clientId = "ESP8266Client-"; clientId += String(random(0xffff), HEX); // подключаемся, в client.connect передаем ID, логин и пасс if (client.connect(clientId.c_str(), mqtt_login, mqtt_password)) { Serial.println("connected"); // если подключились client.subscribe(mqtt_topic); // подписываемся на топик, в который же пишем данные } else { // иначе ругаемся в монитор порта Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void setup() { Serial.begin(115200); pinMode(RELAY, OUTPUT); digitalWrite(RELAY, LOW); setup_wifi(); // подключаемся к wifi client.setServer(mqtt_server, mqtt_port); // указываем адрес брокера и порт client.setCallback(callback); // указываем функцию которая вызывается когда приходят данные от брокера } void loop() { if (!client.connected()) { // проверяем подключение к брокеру reconnect(); // еще бы проверить подкючение к wifi... } client.loop(); }