
Salut à tutti ! Questu articulu descriverà in dettaglio è mostrarà cumu fà u cuntrollu remoto di u modulu esp20 utilizendu una applicazione Android cù u protocolu MQTT in solu 8266 minuti di tempu liberu.
L'idea di u cuntrollu remotu è u monitoraghju hà sempre eccitatu a mente di e persone appassiunate di l'elettronica è di prugrammazione. Dopu tuttu, a capacità di riceve o mandà i dati necessarii in ogni mumentu, indipendentemente da u vostru locu, furnisce assai opportunità. In i mo articuli precedenti и ) Aghju pruvatu à cunsiderà parechje opzioni accessibili è relativamente simplici per implementà u cuntrollu remoto di microcontrollers via Internet. Tuttavia, u tempu è u mondu sanu ùn si ferma - u prugressu cuntinueghja u so muvimentu inexorable avanti. Duranti stu cortu tempu, u modulu esp8266 hà guadagnatu una larga popularità, chì, grazia à u so prezzu bassu è u wi-fi integratu, hè diventatu unu di i cumpunenti principali di a Smart Home.
À u mumentu, MQTT hè u protocolu di trasferimentu di dati avanzatu è più populari trà i dispositi individuali in i sistemi Smart Home. Hà parechji vantaghji nantu à altri protokolli:
- bassu cunsumu di trafficu;
- a cunnessione trà u cliente è u servitore hè sempre aperta;
- ùn carica micca u canali Internet;
- assenza di ritardi in a trasmissione di dati;
- sistema còmode di abbonamenti à i temi;
Tuttu chistu permette di monitorà è cuntrullà in tempu reale. Tuttavia, MQTT precisa u so propiu servitore, chì agisce cum'è un intermediariu trà i clienti di a rete. Ci hè duie manere di creà u vostru servitore o di utilizà servizii di terzu.
U sistema di cuntrollu descrittu hè custituitu di dui parti principali: u servitore MQTT (di solitu hè unu) è i clienti, chì ponu esse assai assai. In u nostru casu, l'applicazione Android è u modulu esp8266 stessu agirà cum'è clienti.
L'algoritmu di u funziunamentu di u sistema hè u seguitu. I Clienti cunnettanu à u servitore è immediatamente dopu a cunnessione, ognuna di elli sottumette à i temi di interessu per ellu. Tutta a cumunicazione trà i clienti transita per u servitore, chì redirige e dati à altri clienti basati nantu à i so abbonamenti.
servitore MQTT.
In u nostru casu, avemu aduprà un serviziu assai còmuda chì hà un pianu di tariffu gratuitu (Cute Cat) chì coprerà cumplettamente i bisogni per implementà un picculu sistema di casa intelligente in casa.

Scrivemu in u situ è uttene e dati necessarii per accede à u servitore. Quandu cunfigurà i clienti, duvete aduprà un Portu regulare (senza SSL è TLS).

Applicazione per Android.
A nostra applicazione agirà cum'è un pannellu di cuntrollu per u microcontroller, è ancu riceverà è mostra tutte l'infurmazioni ricevute da l'esp8266.
L'applicazione hè chjamata è hè un cliente mqtt ready-made cù un picculu numeru di widgets assai pratichi. Pudete vede u video per più dettagli nantu à cumu utilizà l'app.
Esp8266.
U modulu hè lampatu in l'ambienti di prugrammazione Arduino, in ogni modu, vogliu nutà chì u modulu hà prublemi cù u firmware in l'ultime versioni di Arduino, cusì ricumandemu à utilizà a versione 1.6.4.
Per esempiu, un LED (8266 pins) è un sensor di temperatura ds5b18 (20 pins) sò cunnessi à l'esp2.
Siccomu hè necessariu riceve dati per cuntrullà u LED, dopu a cunnessione, l'esp deve abbonate à u tema "test / led" currispondente, altrimenti tutti i dati mandati passanu da u nostru microcontroller.
Ùn avete micca bisognu di abbunamentu per mandà dati di temperatura, ma quandu invià i valori di temperatura, deve specificà u tema à quale vanu sta dati.
Quì sottu hè un sketch cù cumenti detallati.
Sketch Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину
#include
#include
#include
#include
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
Sensori di temperatura di Dallas (&oneWire);
const char *ssid = "AIRPORT"; // Nome di u puntu d'accessu WiFi
const char *pass = "PASSWORD"; // Password da u puntu d'accessu
const char *mqtt_server = "server"; // nome di u server MQTT
const int mqtt_port = 11140; // Portu per cunnette si à u servitore MQTT
const char *mqtt_user = "Login"; // Registri da u servitore
const char *mqtt_pass = "Pass"; // Password di u servitore
#define BUFFER_SIZE 100
bool LedState = falsu;
int tm=300;
temperatura di fluttuazione = 0;
// Funzione per riceve dati da u servitore
void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // manda u nome di u tema à u portu seriale
Stampa seriale (" => ");
Serial.print(pub.payload_string()); // manda u valore di i dati ricevuti à u portu seriale
Stringa di carica utile = pub.payload_string();
if(String(pub.topic()) == "test/led") // verificate se i dati sò ghjunti da u tema chì ci vole
{
int stled = payload.toInt(); // cunverte i dati ricevuti in tipu interu
digitalWrite(5,stled); // accende o spegne u LED secondu i valori di dati ricevuti
}
}
WiFiClient wclient;
Cliente PubSubClient (wclient, mqtt_server, mqtt_port);
void setup () {
sensori.inizià();
Serial.begin (115200);
ritardu (10);
Serial.println ();
Serial.println ();
pinMode (5, OUTPUT);
}
void loop () {
// cunnette si à u Wi-Fi
sè (WiFi.status() != WL_CONNECTED) {
Serial.print("Cunnessione à");
Stampa seriale (ssid);
Serial.println("...");
WiFi.begin(ssid, password);
sè (WiFi.waitForConnectResult() != WL_CONNECTED)
ritornu;
Serial.println("WiFi cunnessu");
}
// cunnessione à u servitore MQTT
sè (WiFi.status() == WL_CONNECTED) {
s'ellu hè (!cliente.cunnessu ()) {
Serial.println("Cunnessione à u servitore MQTT");
sè (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Cunnessu à u servitore MQTT");
cliente.set_callback(callback);
client.subscribe("test/led"); // abbonatevi à u tema cù i dati per u LED
} Altrò {
Serial.println("Ùn hè statu pussibule di cunnette si à u servitore MQTT");
}
}
sè (cliente.cunnessu ()) {
cliente.ciclu();
TempSend();
}
}
} // fine di u ciclu principale
// Funzione per mandà letture da un sensore di temperatura
void TempSend(){
sè (tm==0)
{
sensors.requestTemperatures(); // ottenemu u valore di temperatura da u sensore
temperatura float = sensori.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // manda u valore di a temperatura à u tema per u sensore di temperatura
Serial.println(temp);
tm = 300; // pausa trà l'inviu di i valori di temperatura di circa 3 secondi
}
tm--;
ritardu (10);
}
In u risultatu, avemu un strumentu còmuda per u cuntrollu remota è u surviglianza di dati, chì hè abbastanza faciule d'amparà è ancu i principianti puderanu fà.
Video chì mostra u funziunamentu di u sistema di cuntrollu

Istruzzioni video dettagliate per a stallazione di u sistema

Una di l'opzioni per aduprà u cuntrollu esp8266 via u protocolu MQTT

Cuntrolla Internet di striscia LED

Sè vo avete qualchì quistione nantu à stu materiale, allora vi ricumandemu di vede a seconda parte di u video, induve u materiale hè presentatu più chjaramente.
L'archiviu cuntene u sketch è tutte e librerie necessarie per lampà u microcontroller cù u sketch da l'esempiu.
Per piacè nutate chì a libreria ESP8266WiFi.h ùn hè micca inclusa in questu archiviu, hè stallatu via u Manager di Boards in l'ambiente Arduino.
servitore MQTT -
Link à IoT MQTT Dashboard App −
Grazie à tutti per a vostra attenzione.
Source: www.habr.com
