Comandare un semaforo a 10000 Km con l’ESP32

Grazie al protocollo MQTT, un Client abilitato e la MCU ESP32 è relativamente semplice comandare a distanza qualsiasi tipologia di carico. E’ sufficiente un collegamento a Internet, un firmware ad-hoc e uno Smartphone con la sua APP. Vediamo come realizzare il sistema, in maniera semplice e veloce.

Il prototipo da realizzare

Il futuro della tecnologia è ormai segnato, ovviamente in senso positivo. L’IoT è una grande realtà. Tutti gli oggetti al mondo, ben presto, saranno caratterizzati da un proprio indirizzo IP e, per questo, accessibili da qualsiasi parte del mondo con una connessione a Internet. Si tratta, indubbiamente, di una grande opportunità per la civiltà che, in pochi anni, dovrà gestire miliardi di dispositivi grazie a un collegamento remoto. L’articolo tratta, a grandi linee, la realizzazione di un sistema adatto al controllo remoto di semplici carichi (vedi schema di principio di cui alla figura 1). Anche se l’esempio trattato utilizza solamente tre diodi LED, il progettista può “spostare” il focus dell’applicazione a mille altre diverse funzioni utili. Il comandare a distanza un elettrodomestico, un sistema d’illuminazione o delle apparecchiature industriali consente, senza dubbio, di migliorare la qualità della vita. Il progetto presentato prevede l’utilizzo di uno Smartphone che ha la possibilità di azionare e d’illuminare una delle tre luci di un semaforo (virtuale), anche a enorme distanza. Il sistema si avvale, ovviamente, di un router WiFi (o di connessione dati) e di un broker pubblico o locale MQTT.

Schema di principio con ESP32
Figura 1: schema di principio

Il protocollo MQTT

Si tratta del protocollo per eccellenza per la realizzazione di dispositivi IoT (vedi schematizzazione in figura 2). In questo tipo di comunicazione, con l’Internet delle Cose, un sensore (o altro dispositivo) pubblica i dati su un sistema centrale chiamato Broker. Tutti i dispositivi che desiderano ottenere questi dati si iscrivono al Broker per ricevere le informazioni, quando disponibili. L’ESP32 si connette a un server MQTT esterno (o locale), avvia la connessione e attende i comandi. Lo Smartphone invia i comandi al server Broker MQTT che a sua volta li consegna ai rispettivi destinatari. Il Broker MQTT utilizzato nell’articolo è “mqtt.eclipse.org”, con appoggio sulla porta 1883. Per brevità si è deciso di non approfondire il concetto del protocollo MQTT, in quanto abbondantemente trattato in altre sedi. Inoltre tali concetti avrebbero costituito, senza dubbio, una ridondanza d’informazione, mentre lo scopo essenziale del progetto è quello di passare subito alla parte pratica della realizzazione.

funzionamento MQTT - L'ESP32 si connette a un server MQTT esterno
Figura 2: il funzionamento del protocollo MQTT

Schema elettrico

Lo schema elettrico è molto semplice. Si tratta di una configurazione generale, sicuramente da ampliare e adattare alle proprie esigenze. Nella figura 3 è riportato tale schema. In esso possiamo vedere i tre diodi LED (rosso, verde, giallo) con le relative resistenze di limitazione, collegate alle tre porte di uscita dell’ESP32. La parte WiFi è contenuta già all’interno del controllore. Esso è grandioso per la maggior parte dei progetti. E’ estremamente piccolo, potente, dotato di tanta memoria e consuma davvero poco, senza contare i carichi a esso collegati.

schema elettrico ESP32
Figura 3: schema elettrico

E’ sempre utile tenere d’occhio la piedinatura dell’ESP32, per verificare le connessioni ed evitare errori pericolosi. Si consiglia, altresì, di consultare sempre le documentazioni tecniche, i datasheet e gli schemi applicativi dei fornitori. Tale documentazione, infatti, costituisce una garanzia assoluta e seguire le trattazioni originali contribuisce, senz’altro, a creare prodotti di alta qualità con cognizione di causa.

Il client MQTT (dashboard)

E’ possibile utilizzare qualsiasi Client o dashboard MQTT, sia su Android che su Windows o Linux. Quello utilizzato per il progetto è Linear MQTT Dashboard (vedi in figura 4), molto semplice, affidabile e, soprattutto, grafico. Si deve, ovviamente configurare l’indirizzo IP del Broker, locale o esterno, e la porta, in genere 1883. Con esso è necessario, anche, configurare i seguenti messaggi, che attivano le azioni corrispondenti:

  • topic: semaforo: messaggio: ROSSO;
  • topic: semaforo: messaggio: GIALLO;
  • topic: semaforo: messaggio: VERDE.
Linear MQTT Dashboard
Figura 4: la Linear MQTT Dashboard in funzione

Basta premere uno dei pulsanti creati, per attivare i diodi LED, in qualsiasi parte del globo terrestre. L’utente può creare qualsiasi altro tipo di evento: controlli luminosi, slider, bottoni, pulsanti, grafici e quant’altro che possano controllare completamente qualsiasi tipologia di utenza, a distanza.

Il Firmware

Il programma è ridotto ai minimi termini, per agevolare la comprensione. Mancano, ovviamente, i controlli dei tentativi di connessione ma il tutto è perfettamente funzionante. Si basa sulla creazione di connessioni particolari, una sul WiFi su cui si appoggia l’ESP32 e l’altra sul Broker. La funzione messageReceived() viene eseguita alla ricezione di messaggi appartenenti allo stesso topic. In essa i singoli messaggi sono processati, attraverso il controllo del Payload, e vengono decise le varie azioni operative da intraprendere. Lo scopo del progetto è quello di creare un sistema che, tramite l’uso di uno Smartphone, si possano controllare, genericamente, dei carichi posti a qualsiasi distanza dall’operatore. Il listato è abbastanza semplice e chi ha dimestichezza con la programmazione non farà fatica a comprenderlo a fondo.

#include <MQTT.h>     // Libreria MQTT
#include <WiFi.h> // Libreria WiFi
WiFiClient net;
MQTTClient client;
//----------------------------------------------------------
void messageReceived(String &topic, String &payload) {
if(payload=="ROSSO") { // Messaggio
digitalWrite(5,HIGH); // Accende diodo LED Rosso
digitalWrite(23,LOW);
digitalWrite(18,LOW);
}
if(payload=="GIALLO") { // Messaggio
digitalWrite(5,LOW);
digitalWrite(23,HIGH); // Accende diodo LED Giallo
digitalWrite(18,LOW);
}
if(payload=="VERDE") { // Messaggio
digitalWrite(5,LOW);
digitalWrite(23,LOW);
digitalWrite(18,HIGH); // Accende diodo LED Verde
}
}
//----------------------------------------------------------
void setup() {
pinMode(5,OUTPUT); // Porte in uscita
pinMode(18,OUTPUT); // Porte in uscita
pinMode(23,OUTPUT); // Porte in uscita
Serial.begin(115200);
WiFi.begin("Nome_WiFi", "mia_password"); // Setta credenziali
delay(10000);
Serial.println(WiFi.localIP()); // Visualizza IP ESP32
// client.begin("192.168.1.247", 1883, net); // IP Broker LOCALE
client.begin("mqtt.eclipse.org", 1883, net); // IP Broker PUB
client.onMessage(messageReceived);
client.connect("CliendID"); // Identificativo del Client
client.subscribe("semaforo"); // Questo e' il TOPIC
Serial.print("Sistema pronto");
}
//----------------------------------------------------------
void loop() {
client.loop(); // Interrogazione continua MQTT
}

Utilizzo

Dopo l’accensione dell’ESP32 e l’avvio della APP sul telefonino Android, il sistema è pronto per funzionare. Per il collegamento della MCU al WiFi è consigliata una pausa d’attesa passiva di circa 10 secondi. Se le funzioni di connessioni vengono eseguite prima, esiste il rischio che il collegamento non vada a buon fine. Si sconsiglia di accorciare tale tempistica. Utilizzando i pulsanti creati con l’APP. in maniera estremamente semplice, si possono comandare i carichi a distanza. Premendo il pulsante Rosso, si illumina esclusivamente il diodo Led remoto rosso, premendo il pulsante Verde, si illumina esclusivamente il diodo Led remoto verde e premendo il pulsante Giallo, si illumina il diodo Led remoto giallo. Ovviamente è possibile utilizzare qualsiasi altra APP per Android o altro sistema operativo. E’ possibile anche utilizzare il software Mosquitto per PC, con funzione di Broker, di Subscriber o di Publisher.

Conclusioni

Lo scopo dell’articolo è quello di avviare i progettisti alla creazione di un sistema che funzioni con il protocollo MQTT. Molto spesso, infatti, chi si occupa di elettronica, e in particolare i principianti, non ha idea da dove cominciare. La realizzazione di un sistema completo e funzionante con protocollo MQTT, ideale per applicazioni IoT, è molto importante per i progettisti elettronici. Controllare da remoto qualsiasi dispositivo in casa, tramite il proprio smartphone, consente di ottenere tanta indipendenza. Se, inoltre, si utilizza un Broker pubblico, si possono controllare i dispositivi a qualsiasi distanza nel mondo, con un risultato finale sorprendente e di grande utilità.

Giovanni Di Maria
Appassionato fin da piccolo di elettronica, matematica e fai da te, Giovanni è programmatore, insegnante di informatica e matematica. Ama i numeri ed è sempre alla ricerca di grandi numeri primi. Giovanni è autore di un libro sulla programmazione del microcontrollore PIC 16F84 con mikroBasic. Giovanni è il titolare dell’azienda di elettronica e informatica ElektroSoft, si occupa di formazione, insegnamento e redazione di articoli tecnici a tempo pieno.