Menaxhimi i ESP8266 përmes internetit me protokollin MQTT

Menaxhimi i ESP8266 përmes internetit me protokollin MQTT
Përshëndetje të gjithëve! Në këtë artikull do të shpjegohet dhe tregohet në detaje se si, fjalë për fjalë për 20 minuta kohë të lirë, të konfiguroni menaxhimin në distancë të modulit ESP8266 me ndihmën e një aplikacioni në Android përmes protokollit MQTT.

Ideja e menaxhimit dhe monitorimit në distancë ka ngacmuar gjithmonë mendjet e atyre që janë të apasionuar pas elektronikës dhe programimit. Në fund të fundit, mundësia për të marrë ose dërguar të dhënat e nevojshme në çdo moment, pavarësisht vendndodhjes suaj, hap mundësi të gjera. Në artikujt e mi të mëparshëm ( Artikulli 1 dhe Artikulli 2) jam përpjekur të shqyrtoj disa variante të arritshme dhe relativisht të thjeshta për zbatimin e menaxhimit në distancë të mikrokontrolluesve përmes internetit. Megjithatë, koha dhe e gjithë bota nuk qëndrojnë në vend — progresi vazhdon lëvizjen e tij të pandalshme përpara. Gjatë kësaj periudhe të shkurtër, moduli ESP8266 fitoi popullaritet të madh dhe, falë çmimit të ulët dhe Wi‑Fi të integruar, u bë një nga përbërësit kryesorë të «Shtëpisë së Mençur».

Aktualisht, MQTT është protokolli më i avancuar dhe më i përdorur për transmetimin e të dhënave midis pajisjeve të veçanta brenda sistemeve të «Shtëpisë së Mençur». Ai ka një sërë përparësish ndaj protokolleve të tjera:
— konsum i ulët i trafikut;
— lidhja midis klientit dhe serverit është gjithmonë e hapur;
— nuk e ngarkon kanalin e internetit;
— mungesë vonesash në transmetimin e të dhënave;
— sistem i përshtatshëm abonimi në topic-e;
E gjithë kjo bën të mundur monitorimin dhe menaxhimin në kohë reale. Megjithatë, MQTT kërkon praninë e serverit të vet, i cili kryen rolin e ndërmjetësit midis klientëve të rrjetit. Këtu ka dy zgjidhje: ose të krijoni serverin tuaj, ose të përdorni shërbime të palëve të treta.

Sistemi i menaxhimit që përshkruhet përbëhet nga dy pjesë kryesore: serveri MQTT (zakonisht është një) dhe klientët, të cilët mund të jenë mjaft të shumtë. Në rastin tonë, si klientë do të shërbejnë aplikacioni në Android dhe vetë moduli ESP8266.

Algoritmi i funksionimit të sistemit është si më poshtë. Klientët lidhen me serverin dhe menjëherë pas lidhjes secili prej tyre abonohen në topic-et që i interesojnë. I gjithë komunikimi midis klientëve kalon përmes serverit, i cili i përcjell të dhënat te klientët e tjerë duke marrë parasysh abonimet e tyre.

Server MQTT.

Në rastin tonë do të përdorim shërbimin shumë praktik www.cloudmqtt.com i cili ofron një plan tarifor falas (Cute Cat), që mbulon plotësisht nevojat për krijimin e një sistemi të vogël personal «smart home».
Menaxhimi i ESP8266 përmes internetit me protokollin MQTT
Le të regjistrohemi në faqe dhe të marrim të dhënat e nevojshme për qasje në server. Gjatë konfigurimit të klientëve duhet të përdorni Portin e zakonshëm (pa SSL dhe TLS).
Menaxhimi i ESP8266 përmes internetit me protokollin MQTT

Aplikacioni për Android.

Aplikacioni ynë do të shërbejë si panel kontrolli për mikrokontrolluesin, si edhe do të marrë dhe shfaqë të gjithë informacionin e marrë nga esp8266.

Aplikacioni quhet IoT MQTT Dashboard dhe është një klient mqtt i gatshëm me një numër të vogël widget-esh shumë të përshtatshëm. Më hollësisht për mënyrën e përdorimit të aplikacionit mund të shihni në video.

Esp8266.

Moduli programohet në mjedisin e zhvillimit Arduino, megjithatë dua të theksoj se moduli ka probleme me programimin në versionet e fundit të Arduino, prandaj rekomandoj përdorimin e versionit 1.6.4.
Për shembull, te esp8266 janë lidhur një LED (pini 5) dhe sensori i temperaturës ds18b20 (pini 2).
Meqenëse për të kontrolluar LED-in duhet të merren të dhëna, esp pas lidhjes duhet të bëjë abonimin në topic-un përkatës «test/led», përndryshe të gjitha të dhënat e dërguara do të kalojnë pa u kapur nga mikrokontrolluesi ynë.
Për dërgimin e të dhënave të temperaturës nuk nevojitet abonim, por gjatë transmetimit të vlerave të temperaturës duhet të specifikohet topic-u ku do të dërgohen këto të dhëna.

Më poshtë është dhënë sketçi me komente të hollësishme.

Sketçi 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"; // Emri i pikës së aksesit Wi‑Fi
const char *pass = "PASSWORD"; // Fjalëkalimi i pikës së aksesit

const char *mqtt_server = "server"; // Emri i serverit MQTT
const int mqtt_port = 11140; // Porta për lidhje me serverin MQTT
const char *mqtt_user = "Login"; // Kredencialet e serverit
const char *mqtt_pass = "Pass"; // Fjalëkalimi i serverit

#define BUFFER_SIZE 100

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

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

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // shfaqim në portën seriale emrin e topic-ut
Serial.print(" => ");
Serial.print(pub.payload_string()); // shfaqim në portën seriale vlerën e të dhënave të marra

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // kontrollojmë nëse të dhënat kanë ardhur nga topic-u i duhur
{
int stled = payload.toInt(); // i konvertojmë të dhënat e marra në tipin integer
digitalWrite(5,stled); // ndezim ose fikim LED-in në varësi të vlerave të marra
}
}

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"); // abonohemi te topic me të dhënat për LED-in
} else {
Serial.println("Could not connect to MQTT server");
}
}

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

}
} // fundi i ciklit kryesor

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // marrim vlerën e temperaturës nga sensori
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // dërgojmë vlerën e temperaturës në topic për sensorin e temperaturës
Serial.println(temp);
tm = 300; // pauzë mes dërgimeve të vlerave të temperaturës, rreth 3 sekonda
}
tm--;
delay(10);
}

Si rezultat, marrim një mjet praktik për kontroll dhe monitorim të të dhënave në distancë, i cili është mjaft i thjeshtë për t’u mësuar dhe i përshtatshëm edhe për fillestarët.

Video me demonstrimin e funksionimit të sistemit të kontrollit

Luaj videon

Video-udhëzim i detajuar për konfigurimin e sistemit

Luaj videon

Një nga mënyrat e përdorimit të kontrollit të esp8266 përmes protokollit MQTT

Luaj videon

Kontrolli i shiritit LED përmes internetit

Luaj videon

Nëse keni pyetje lidhur me këtë material, ju rekomandoj të shikoni pjesën e dytë të videos, ku materiali është paraqitur më qartë.

Arkivi përmban sketch-in dhe të gjitha bibliotekat e nevojshme për ngarkimin e sketch-it nga shembulli në mikrokontroller.
Ju tërheq vëmendjen se biblioteka ESP8266WiFi.h nuk përfshihet në këtë arkiv; ajo instalohet përmes Boards Manager në mjedisin Arduino.

ARKIVI

Serveri MQTT — www.cloudmqtt.com

Lidhja për aplikacionin IoT MQTT Dashboard — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Faleminderit të gjithëve për vëmendjen.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster