Controlul Esp8266 prin internet folosind protocolul MQTT

Controlul Esp8266 prin internet folosind protocolul MQTT
Bună tuturor! În acest articol, vom detalia și demonstra cum să configurăm controlul de la distanță al modulului esp8266 în doar 20 de minute, folosind o aplicație pe Android prin protocolul MQTT.

Ideea controlului și monitorizării de la distanță a fascinat întotdeauna mințile pasionaților de electronică și programare. Posibilitatea de a obține sau de a trimite datele necesare, indiferent de locația ta, oferă oportunități vaste. În articolele mele anterioare ( Articolul 1 și Articolul 2) am încercat să discut despre câteva variante disponibile și relativ simple pentru implementarea controlului de la distanță al microcontrolerelor prin internet. Totuși, timpul și întreaga lume nu stau pe loc – progresul continuă să se miște necruțător înainte. În acest scurt timp, modulul esp8266 a câștigat o popularitate largă, datorită prețului său redus și Wi-Fi-ului încorporat, devenind unul dintre ingredientele principale ale „Casei Inteligente”.

În prezent, MQTT este protocolul de transmitere a datelor cel mai avansat și popular între dispozitivele separate în cadrul sistemelor „Casei Inteligente”. Acesta are o serie de avantaje în comparație cu alte protocoale:
— consum de trafic redus;
— conexiunea între client și server este întotdeauna deschisă;
— nu suprasolicită canalul internet;
— absența întârzierilor în transmiterea datelor;
— un sistem convenabil de abonare la subiecte;
Toate acestea oferă posibilitatea monitorizării și controlului în timp real. Totuși, MQTT necesită un server propriu, care acționează ca un intermediar între clienții rețelei. Există două opțiuni: fie să creezi propriul server, fie să folosești servicii externe.

Sistemul de control descris constă din două părți principale: serverul MQTT (de obicei, unul singur) și clienții, care pot fi destul de mulți. În cazul nostru, aplicația pe Android și modulul esp8266 vor acționa ca și clienți.

Algoritmul de funcționare al sistemului este următorul. Clienții se conectează la server și, imediat după conectare, fiecare dintre ei se abonează la subiectele de interes. Toate comunicările între clienți se desfășoară prin intermediul serverului, care redirecționează datele către ceilalți clienți în funcție de abonațiile lor.

Server MQTT.

În cazul nostru, vom folosi un serviciu extrem de convenabil www.cloudmqtt.com care are un plan tarifar gratuit (Cute Cat), care va acoperi complet nevoile pentru implementarea unui mic sistem de „casă inteligentă”.
Controlul Esp8266 prin internet folosind protocolul MQTT
Vom face înregistrarea pe site și vom obține datele necesare pentru accesul la server. La configurarea clienților, trebuie să folosiți un port obișnuit (fără SSL și TLS).
Controlul Esp8266 prin internet folosind protocolul MQTT

Aplicația pe Android.

Aplicația noastră va acționa ca un telecomandă pentru microcontroler, precum și va primi și afișa toate informațiile obținute de la esp8266.

Aplicația se numește IoT MQTT Dashboard și reprezintă un client mqtt gata, cu un număr mic de widget-uri foarte utile. Mai multe informații despre utilizarea aplicației pot fi vizionate într-un video.

Esp8266.

Modulul se programează în mediul de dezvoltare Arduino, dar vreau să menționez că modulul are probleme cu programarea în cele mai recente versiuni de Arduino, de aceea recomand să folosiți versiunea 1.6.4.
De exemplu, la esp8266 sunt conectate un LED (pin 5) și un senzor de temperatură ds18b20 (pin 2).
Pentru a controla LED-ul, este necesar să obțineți date, astfel că esp, după conectare, trebuie să se aboneze la topicul corespunzător „test/led”, altfel toate datele trimise vor trece pe lângă microcontrolerul nostru.
Pentru a trimite datele de temperatură, nu este nevoie de abonament, dar atunci când se transmit valorile temperaturii, trebuie să specificați topicul în care aceste date vor fi trimise.

Mai jos este prezentat un sketch cu comentarii detaliate.

Sketch-ul 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"; // Numele rețelei WiFi
const char *pass = "PASSWORD"; // Parola rețelei

const char *mqtt_server = "server"; // Numele serverului MQTT
const int mqtt_port = 11140; // Portul pentru conectarea la serverul MQTT
const char *mqtt_user = "Login"; // Logine de la server
const char *mqtt_pass = "Pass"; // Parola de la server

#define BUFFER_SIZE 100

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

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

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // afișăm în portul serial numele topicului
Serial.print(" => ");
Serial.print(pub.payload_string()); // afișăm în portul serial valoarea datelor primite

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // verificăm dacă datele au venit din topicul dorit
{
int stled = payload.toInt(); // transformăm datele primite în tipul integer
digitalWrite(5,stled); // aprindem sau stingem LED-ul în funcție de valorile primite
}
}

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("Conectare la ");
Serial.print(ssid);
Serial.println("...");
WiFi.begin(ssid, pass);

if (WiFi.waitForConnectResult() != WL_CONNECTED)
return;
Serial.println("WiFi conectat");
}

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Conectare la serverul MQTT");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Conectat la serverul MQTT");
client.set_callback(callback);
client.subscribe("test/led"); // ne abonăm la topicul cu date pentru LED
} else {
Serial.println("Nu am putut să ne conectăm la serverul MQTT");
}
}

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

}
} // sfârșitul ciclului principal

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // obținem valoarea temperaturii de la senzor
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // trimitem în topicul pentru termometru valoarea temperaturii
Serial.println(temp);
tm = 300; // pauză între trimițerea valorilor temperaturii de aproximativ 3 secunde
}
tm--;
delay(10);
}

Ca rezultat, obținem un instrument convenabil pentru controlul de la distanță și monitorizarea datelor, care este destul de simplu de utilizat și accesibil chiar și începătorilor.

Videoclip cu demonstrarea funcționării sistemului de control

Redați video

Instrucțiuni video detaliate pentru configurarea sistemului

Redați video

Una dintre variantele de aplicare a controlului ESP8266 prin protocolul MQTT

Redați video

Controlul benzii LED prin internet

Redați video

Dacă aveți întrebări legate de acest material, vă recomand să vizionați a doua parte a videoclipului, unde materialul este prezentat mai clar.

În arhivă se află schița și toate bibliotecile necesare pentru programarea microcontrolerului cu schița din exemplu.
Vă atrag atenția că biblioteca ESP8266WiFi.h nu este inclusă în această arhivă, aceasta se instalează prin Managerul de Plăci în mediul Arduino.

ARHIVĂ

Server MQTT — www.cloudmqtt.com

Link către aplicația IoT MQTT Dashboard — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ro

Vă mulțumesc tuturor pentru atenție.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster