Esp8266 juhtimine interneti kaudu MQTT protokolli abil.

Esp8266 juhtimine interneti kaudu MQTT protokolli abil.
Tere kõigile! Selles artiklis räägitakse detailselt ja näidatakse, kuidas vaid 20 minuti jooksul seadistada esp8266 mooduli kaugjuhtimist Android rakenduse abil MQTT protokolli kaudu.

Kaugjuhtimise ja monitooringu idee on alati intrigeerinud elektroonika ja programmeerimise entusiastide mõtteid. Võimalus saada igal ajal vajalikku teavet või saata andmeid, sõltumata asukohast, avab laia haarde. Oma varasemates artiklites ( Artikkel 1 ja Artikkel 2) olen püüdnud käsitleda mitmeid kergesti kätte saadavaid ja suhteliselt lihtsaid viise mikrokontrollerite kaugjuhtimiseks interneti kaudu. Kuid aeg ja kogu maailm ei seisa paigal – progress jätkab oma järjepidevat edasiviimist. Selle lühikese aja jooksul on esp8266 moodul saavutanud laialdase populaarsuse, muutes selle tänu madalale hinnale ja sisseehitatud wi-fi'le üheks peamiseks osaks "Nutikas kodu" süsteemidest.

Praeguseks on MQTT üks kõige arenenumaid ja populaarsemaid andmeedastuse protokolle erinevate seadmete vahel "Nutika kodu" süsteemides. Sellel on mitmeid eeliseid võrreldes teiste protokollidega:
— madal andmeedastuse tarbimine;
— klientide ja serveri vahel on ühendus alati avatud;
— ei koorma internetikanalit;
— andmete edastamise viivituste puudumine;
— mugav teema tellimissüsteem;
Kogu see võimaldab reaalaja monitooringut ja juhtimist. Kuid MQTT vajab enda serverit, mis toimib vahendajana võrgus olevate klientide vahel. Siin on kaks võimalust: kas luua oma server või kasutada kolmanda osapoole teenuseid.

Käesolev juhtimissüsteem koosneb kahest põhiosast: MQTT serverist (mis on tavaliselt vaid üks) ja klientidest, keda võib olla üsna palju. Meie juhul on klientideks Android rakendus ja esp8266 moodul.

Süsteemi töökorraldus on järgmine. Kliendid ühenduvad serveriga ja kohe pärast ühenduse loomist tellib iga klient huvipakkuvad teemad. Kõik suhtlemine klientide vahel toimub serveri kaudu, mis suunab andmed teistele klientidele nende tellimuste põhjal.

MQTT server.

Meie puhul kasutame väga mugavat teenust www.cloudmqtt.com , millel on tasuta pakett (Cute Cat), mis katab täielikult väikese iseseisva "nutika kodu" süsteemi rakendamise vajadused.
Esp8266 juhtimine interneti kaudu MQTT protokolli abil.
Registreerime end saidil ja saame vajalikud andmed serverisse sisselogimiseks. Klientide seadistamisel tuleb kasutada tavalist porti (ilma SSL-i ja TLS-ita).
Esp8266 juhtimine interneti kaudu MQTT protokolli abil.

Rakendus Androidile.

Meie rakendus toimib mikrokontrolleri kaugjuhtimispuldina ning see võtab vastu ja kuvab kogu teabe, mis saadakse esp8266-lt.

Rakendus nimega IoT MQTT Dashboard on valmis mqtt klient, kus on mõned väga mugavad vidinad. Rakenduse kasutamise kohta saate vaadata videot.

Esp8266.

Moodul vilgub Arduino programmeerimiskeskkonnas, kuid tahan märkida, et moodulil on Arduino viimastes versioonides vilkumise probleeme, seega soovitan kasutada versiooni 1.6.4.
Näiteks on esp8266-ga ühendatud LED (5. pin) ja temperatuuriandur ds18b20 (2. pin).
Kuna LED-i juhtimiseks tuleb saada andmeid, peab esp pärast ühendamist tellima vastava teemade 'test/led', vastasel juhul lähevad kõik saadetud andmed mööda meie mikrokontrollerit.
Temperatuuriandmete edastamiseks tellimist ei ole vaja, kuid temperatuuri väärtuste edastamisel tuleb märkida teema, kuhu need andmed lähevad.

Allpool on esitatud skeem koos üksikasjalike kommentaaridega.

Skeem Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *ssid = "AIRPORT"; // WiFi juurdepääsupunkti nimi
const char *pass = "PASSWORD"; // Juurdepääsupunkti parool

const char *mqtt_server = "server"; // MQTT serveri nimi
const int mqtt_port = 11140; // Ühendusport MQTT serveriga
const char *mqtt_user = "Login"; // Serveri sisselogimisandmed
const char *mqtt_pass = "Pass"; // Serveri parool

#define BUFFER_SIZE 100

bool LedState = false;
int tm=300;
float temp=0;

// Функция получения данных от сервера

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // Kuvame seerianeb adresse teemade nime
Serial.print(" => ");
Serial.print(pub.payload_string()); // Kuvame seerianeb saadud andmete väärtuse

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // Kontrollime, kas andmed tulid õigest teemast
{
int stled = payload.toInt(); // Muutame saadud andmed täisarvuks
digitalWrite(5,stled); // Lülitame LED-i sisse või välja vastavalt saadud andmete väärtusele
}
}

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"); \/\/ subscribes to the topic with data for the LED
} else {
Serial.println("Could not connect to MQTT server");
}
}

if (client.connected()){
client.loop();
TempSend();
}

}
} \/\/ end of main loop

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); \/\/ get temperature value from the sensor
float temp = sensors.getTempCByIndex(0);
client.publish("test\/temp",String(temp)); \/\/ sends the temperature value to the topic for the temperature sensor
Serial.println(temp);
tm = 300; \/\/ pause between sending temperature values is about 3 seconds
}
tm--;
delay(10);
}

As a result, we get a convenient tool for remote control and data monitoring, which is quite easy to master and will be accessible even for beginners.

A video demonstration of the control system

Mängi videot

Detailed video instructions for setting up the system

Mängi videot

One of the options for controlling ESP8266 via MQTT protocol

Mängi videot

Controlling an LED strip over the internet

Mängi videot

If you have any questions about this material, I recommend watching the second part of the video, where the material is presented more clearly.

The archive contains the sketch and all necessary libraries for flashing the microcontroller with the example sketch.
Please note that the library ESP8266WiFi.h is not included in this archive; it is installed through the Boards manager in the Arduino environment.

ARCHIVE

MQTT server — www.cloudmqtt.com

Link to the IoT MQTT Dashboard application — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Thank you all for your attention.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster