Prove pratiche con il protocollo MQTT per l’IoT

Il protocollo MQTT (Message Queue Telemetry Transport) è la migliore soluzione per implementare un completo sistema IoT. La sua relativa semplicità, unita alla sua affidabilità e sicurezza, permette di creare dispositivi universali capaci di collegarsi con qualunque sistema di comunicazione. Il fattore più interessante è quello di poter pilotare carichi elettrici con il proprio smartphone, in maniera estremamente semplice. Il progetto esposto in queste pagine può essere, ovviamente, ampliato prevedendo ulteriori funzionalità.

Il protocollo MQTT

Questo protocollo è abbastanza semplice da utilizzare (vedi schema a blocchi in figura 1). Anche se è usato in modo massiccio solo negli ultimi periodi, esso è molto maturo, essendo sviluppato da più di vent’anni. E’ un protocollo estremamente snello di tipo publish-subscribe, con cui le varie parti scambiano dati e risulta ideale per le applicazioni IoT. Con questo protocollo, quando un dispositivo (client) vuole comunicare con un altro dispositivo, deve pubblicare un messaggio su un determinato argomento (topic) verso il Broker. Quest’ultimo filtra, gestisce e distribuisce i messaggi tra i publishers e subscribers. E’ composto dai seguenti elementi:

  • il Broker;
  • il Publisher;
  • il Subscriber.

I clients MQTT non dispongono di indirizzi fisici ma possono iscriversi a molteplici topics. Ogni volta che viene pubblicato un nuovo messaggio di un determinato topic, il broker lo distribuisce a tutti i clients iscritti a quel topic. In teoria, tutti e tre i soggetti possono essere localizzati nel medesimo dispositivo.

Figura 1: la filosofia del protocollo MQTT

Oltre ai vantaggi della leggerezza e della semplicità, il protocollo ha diversi aspetti positivi come, ad esempio, non si richiede l’apertura di alcune porte, non si devono aprire connessioni in NAT e non è necessario conoscere alcun indirizzo IP pubblico. Il presente articolo non approfondirà le specifiche di tale protocollo, per le quali la Rete è una vera e propria fonte di informazioni, ma si focalizzerà esclusivamente su un esempio pratico e funzionale, da provare e realizzare immediatamente.

Capire il protocollo MQTT con Mosquitto

Esistono diversi software broker MQTT per piattaforme e sistemi operativi diversi. Mosquitto è uno dei più famosi e diffusi tra questi. Mosquitto supporta tutte le versioni del protocollo MQTT e si può installare facilmente su tutti i sistemi operativi. Anche su diversi embedded, come il Raspberry Pi, esso si può utilizzare con successo. La filosofia dell’MQTT, come detto prima e come si evince dallo schema generico a blocchi, è la seguente:

  • il Publisher, quando dovuto, invia un messaggio (una stringa) che fa capo a un topic (argomento). Per esempio:
    • topic: “lampada”; messaggio “Accendi”;
    • topic: “lampada”; messaggio “Spegni”;
    • topic: “motore”; messaggio “Gira a destra”;
    • topic: “motore”; messaggio “Gira a sinistra”.
  • il Subscriber riceve i messaggi solo dei topics che sono stati da esso sottoscritti. Tutti gli altri messaggi appartenenti a topics diversi saranno filtrati e rifiutati;
  • il Broker esegue “solo” una funzione gestionale, estremamente importante, indirizza, riceve e spedisce i messaggi ai vari soggetti del sistema. La sua presenza è, quindi, necessaria.

Dopo aver scaricato dal sito ufficiale il programma Mosquitto e installato sul proprio PC, si possono eseguire le seguenti operazioni, che danno luogo allo scenario visibile in figura 2. Stiamo provando il protocollo MQTT sullo stesso dispositivo (il computer), sia per quanto riguarda l’aspetto del Broker, quello del Publisher e quello del Subscriber. In pratica occorre aprire tre finestre di console in Windows, posizionarsi nella cartella degli eseguibili di Mosquitto e digitare quanto segue.

Finestra del Broker

In questa finestra di console lavora il Broker, in maniera silente e indipendente. L’operatore non deve interagire con esso ma il software, in modalità residente, provvede alla gestione e allo scambio di informazioni tra i vari dispositivi. Per avviare il Broker si digiti il seguente comando dal prompt di sistema operativo:

Mosquitto -v

Dopo aver confermato con il tasto invio, il software visualizza tutte le transazioni avvenute, grazie al parametro “-v” del comando stesso. Consultare i messaggi del Broker è utile per leggere, soprattutto, i vari Topics nei quali vengono inviati i messaggi.

Finestra del Publisher

In questa finestra di console si può simulare il comportamento del Publisher, inviando i messaggi su un determinato Topic. Per esempio, per accendere una lampada è possibile inoltrare il seguente comando da console:

mosquitto_pub.exe -h mosquitto_pub -h 127.0.0.1 -t lamp -m “Accendi lampada”

Oppure ancora, per spegnere la lampada, si può inviare il seguente comando:

mosquitto_pub.exe -h mosquitto_pub -h 127.0.0.1 -t lamp -m “Spegni lampada”

Si noti che a ogni comando corrisponde un aggiornamento della visualizzazione dei dati nella finestra del Broker. In aggiunta, nella finestra del Subscriber, viene visualizzato il relativo messaggio, a condizione che il Subscriber sia stato iscritto nel Topic corrispondente. Il seguente comando, infatti, non sortisce alcun effetto nella finestra del Subscriber:

mosquitto_pub.exe -h mosquitto_pub -h 127.0.0.1 -t motore -m “Spegni lampada”

I parametri utilizzati nel comando sono i seguenti:

  • mosquitto_pub.exe: è il comando vero e proprio del Publisher;
  • -h 127.0.0.1: è l’indirizzo dell’host da cui partono i messaggi. In questo caso si tratta del local host;
  • -t lamp: è il Topic del messaggio;
  • -m “Accendi lampada”: è il messaggio vero e proprio. Ovviamente esso può anche essere più ridotto, come numero di caratteri.

Per aumentare la sicurezza è possibile utilizzare il nome utente e la password durante l’invio di messaggi.

Finestra del Subscriber

Per attivare un Subscriber che “ascolti” i messaggi provenienti da qualsiasi Publisher ma appartenenti a un determinato Topic, si inoltri il seguente comando da console, una volta sola:

mosquitto_sub.exe -v -h 127.0.0.1 -t “lamp”

Con esso, il sistema si “mette in ascolto” e interpreta solo i comandi appartenenti a quel determinato Topic. Come si nota dalla illustrazione, il Subscriber visualizza a video il Topic e il messaggio ricevuto.

Figura 2: la simulazione del Broker, del Publisher e del Subscriber in uno stesso dispositivo (PC)

In un sistema composto da reali MCU o Embedded, sarà lo stesso firmware a gestire le transazioni dei dati e a ricevere, decodificare ed eseguire le azioni sui comandi ricevuti. I Topics possono essere anche in modalità multi livello, per esempio lamp/cucina e lamp/salotto.

Come intercettare i messaggi

Per la realizzazione di un progetto completo l’utilizzo di un solo PC, ovviamente, non è sufficiente. Un esempio realistico di sistema funzionante prevede le seguenti componenti:

  • il Broker, rappresentato da un computer e dal software Mosquitto;
  • il Publisher, rappresentato da uno smartphone e dalla relativa App di MQTT;
  • il Subscriber, rappresentato da un Embedded, per esempio Raspberry Pi.

Non devono mancare, ovviamente, il router WiFi e un attuatore generico, ad esempio un diodo LED per eseguire le prove (vedi esempio in figura 3). Per impartire gli ordini dallo smartphone si può utilizzare qualsiasi tipo di Client MQTT per Android come, ad esempio, MyMQTT. Dopo aver configurato, in esso, l’indirizzo IP del Broker che è installato sul Pc, si può definire il numero della porta, solitamente 1883, e il nome utente e la password facoltativa. Per rendere l’applicazione universale, e utilizzare il sistema da qualsiasi parte del mondo, si può utilizzare l’indirizzo di un broker remoto e pubblico.

Figura 3: con il protocollo MQTT è relativamente semplice approntare un sistema completo e funzionante

Conclusioni

MQTT è il protocollo più diffuso in ambito dell’IoT. Esso permette di scambiare messaggi in modo leggero, sicuro e utilizza pochissime risorse hardware e software. La maggior parte delle schede di sviluppo (Arduino, Esp32, Esp 8266, Raspberry, ecc) possiede delle ottime librerie per la sua completa gestione. Come si è visto, è molto semplice comprendere la filosofia che sta alla base del protocollo MQTT. Oggi, per i progettisti elettronici, realizzare un sistema completo e funzionante con il protocollo MQTT, ideale per applicazioni IoT, è molto importante. Con esso è possibile, in maniera facile, comandare qualsiasi dispositivo in tutto il mondo, tramite il proprio smartphone.

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.