Controllo Esp8266 tramite internet con il protocollo MQTT

Controllo Esp8266 tramite internet con il protocollo MQTT
Ciao a tutti! In questo articolo verrà spiegato e mostrato dettagliatamente come configurare il controllo remoto del modulo esp8266 con un'applicazione Android tramite il protocollo MQTT in soli 20 minuti di tempo libero.

L'idea del controllo e monitoraggio remoto ha sempre affascinato le menti degli appassionati di elettronica e programmazione. La possibilità di ricevere o inviare dati necessari in qualsiasi momento, indipendentemente dalla propria posizione, offre ampie possibilità. Nei miei articoli precedenti ( Articolo 1 e Articolo 2) ho cercato di esaminare diverse opzioni disponibili e relativamente semplici per implementare il controllo remoto dei microcontrollori tramite internet. Tuttavia, il tempo e il mondo non si fermano – il progresso continua il suo inesorabile avanzamento. In questo breve periodo, il modulo esp8266 ha acquisito una grande popolarità grazie al suo costo contenuto e al Wi-Fi integrato, diventando uno dei componenti principali della "Casa Intelligente".

Attualmente, MQTT è il protocollo di trasmissione dati più avanzato e popolare tra i vari dispositivi all'interno dei sistemi di "Casa Intelligente". Ha diversi vantaggi rispetto ad altri protocolli:
— basso consumo di traffico;
— la connessione tra client e server è sempre aperta;
— non sovraccarica la banda internet;
— assenza di ritardi nella trasmissione dei dati;
— sistema di abbonamento conveniente ai topic;
Tutto questo consente il monitoraggio e il controllo in tempo reale. Tuttavia, MQTT richiede un proprio server che funge da intermediario tra i client della rete. Qui ci sono due opzioni: creare un proprio server o utilizzare servizi esterni.

Il sistema di gestione descritto è composto da due parti principali: il server MQTT (di solito ce n'è uno solo) e i client, che possono essere numerosi. Nel nostro caso, i client saranno l'applicazione su Android e il modulo esp8266 stesso.

L'algoritmo di funzionamento del sistema è il seguente. I client si connettono al server e subito dopo la connessione, ognuno di essi si iscrive ai topic di interesse. Tutta la comunicazione tra i client avviene tramite il server, che reindirizza i dati agli altri client in base alle loro iscrizioni.

Server MQTT.

Nel nostro caso utilizzeremo un servizio estremamente comodo www.cloudmqtt.com che ha un piano tariffario gratuito (Cute Cat), che coprirà completamente le esigenze per realizzare un piccolo sistema di «smart home».
Controllo Esp8266 tramite internet con il protocollo MQTT
Procediamo con la registrazione sul sito e otteniamo i dati necessari per accedere al server. Durante la configurazione dei client, è necessario utilizzare una porta normale (senza SSL e TLS).
Controllo Esp8266 tramite internet con il protocollo MQTT

Applicazione su Android.

La nostra applicazione funzionerà come un telecomando per il microcontrollore e riceverà e visualizzerà tutte le informazioni ricevute dall'esp8266.

L'applicazione si chiama IoT MQTT Dashboard ed è un client mqtt pronto all'uso con un numero limitato di widget molto comodi. Maggiori dettagli sul funzionamento dell'applicazione possono essere visualizzati in un video.

Esp8266.

Il modulo viene programmato nell'ambiente di programmazione Arduino, tuttavia vorrei notare che il modulo ha problemi di flash nelle ultime versioni di Arduino, quindi consiglio di utilizzare la versione 1.6.4.
Per esempio, a esp8266 sono collegati un LED (pin 5) e un sensore di temperatura ds18b20 (pin 2).
Poiché per controllare il LED è necessario ricevere dati, esp dopo il collegamento deve iscriversi al topic corrispondente «test/led»; altrimenti, tutti i dati inviati passeranno accanto al nostro microcontrollore.
Per inviare dati di temperatura non è necessaria l'iscrizione, ma durante la trasmissione dei valori di temperatura è necessario specificare il topic in cui questi dati andranno.

Di seguito è riportato uno sketch con commenti dettagliati.

Sketch 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"; // Nome del punto di accesso WiFi
const char *pass = "PASSWORD"; // Password del punto di accesso

const char *mqtt_server = "server"; // Nome del server MQTT
const int mqtt_port = 11140; // Porta per connettersi al server MQTT
const char *mqtt_user = "Login"; // Login per il server
const char *mqtt_pass = "Pass"; // Password per il server

#define BUFFER_SIZE 100

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

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

void callback(const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // stampiamo nel serial monitor il nome del topic
Serial.print(" => ");
Serial.print(pub.payload_string()); // stampiamo nel serial monitor il valore dei dati ricevuti

String payload = pub.payload_string();

if(String(pub.topic()) == "test/led") // controlliamo se i dati provengono dal topic desiderato
{
int stled = payload.toInt(); // convertiamo i dati ricevuti in tipo integer
digitalWrite(5, stled); // accendiamo o spegniamo il LED a seconda dei valori ricevuti
}
}

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

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

// подключаемся к MQTT серверу
if (WiFi.status() == WL_CONNECTED) {
if (!client.connected()) {
Serial.println("Collegamento al server MQTT");
if (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("Collegato al server MQTT");
client.set_callback(callback);
client.subscribe("test/led"); // ci iscriviamo al topic con i dati per il LED
} else {
Serial.println("Impossibile connettersi al server MQTT");
}
}

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

}
} // fine del ciclo principale

// Функция отправки показаний с термодатчика
void TempSend(){
if (tm==0)
{
sensors.requestTemperatures(); // otteniamo il valore della temperatura dal sensore
float temp = sensors.getTempCByIndex(0);
client.publish("test/temp",String(temp)); // inviamo nel topic per il sensore di temperatura il valore della temperatura
Serial.println(temp);
tm = 300; // pausa tra l'invio dei valori della temperatura di circa 3 secondi
}
tm--;
delay(10);
}

Di conseguenza, otteniamo uno strumento comodo per il controllo remoto e il monitoraggio dei dati, che è abbastanza semplice da apprendere e sarà alla portata anche dei principianti.

Video dimostrativo del sistema di controllo

Guarda il video

Istruzioni video dettagliate per la configurazione del sistema

Guarda il video

Una delle possibili applicazioni del controllo esp8266 tramite protocollo MQTT

Guarda il video

Controllo della striscia LED tramite internet

Guarda il video

Se hai domande su questo materiale, ti consiglio di guardare la seconda parte del video, in cui il materiale è presentato in modo più visivo.

Nel pacchetto ci sono lo sketch e tutte le librerie necessarie per il flashing del microcontrollore con lo sketch dell'esempio.
Ti ricordo che la libreria ESP8266WiFi.h non è inclusa nel pacchetto, deve essere installata tramite il gestore delle schede nell'ambiente Arduino.

PACCHETTO

Server MQTT — www.cloudmqtt.com

Link all'applicazione IoT MQTT Dashboard — play.google.com/store/apps/details?id=com.thn.iotmqttdashboard&hl=ru

Grazie a tutti per l'attenzione.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster