in Architettura Software, Informatica

MQTT con Raspberry PI Zero 2 W – prima parte

Nei post precedenti abbiamo analizzato il codice di un semplice client MQTT in C#. In questo post installeremo un broker MQTT all’interno di un raspberry pi zero 2 W configurandone gli aspetti essenziali.

MQTT è un protocollo di comunicazione creato da IBM nel 1999 con lo scopo principale di fornire un meccanismo di comunicazione in ambito satellitare, ma ben presto è diventato uno standard nell’IOT.

Il protocollo prevede l’invio di messaggi verso dispositivi IOT e la ricezione di messaggi di risposta. Sfruttando il protocollo TCP/IP, ha delle performance miglirori rispetto al protocollo HTTP, con messaggi molto piu piccoli e senza header. Altro punto di forza è rappresentato dalla possibilità di distribuire i messaggi soltanto ai client che sono interessati ad un certo tipo di contenuto.

Prima di entrare nel dettaglio del progetto, è necessario introdurre un po di terminologia. Nel protocollo MQTT è presente un sender (chiamato Publisher) che invia un messaggio, ed un receiver (chiamato Subscriber) che riceverà il messaggio. In mezzo a queste entità è presente un terzo elemento chiamato Broker, che ha la funzione di intermediario.

Possiamo, ad esempio, immaginare un sensore di temperatura che invia un messaggio al broker, che lo accetta e lo memorizza al suo interno. Il broker, a questo punto, invierà il messaggio a tutti i devices che ne hanno fatto la sottoscrizione.

Concetti principali

In MQQT sono presenti 5 concetti principali:

  • Publisher: è il nodo che invia i dati o i messaggi relativo ad un topic. Per esempio un nodo può essere un sensore di temperatura che invia i dati relativi alla temperatura.
  • Subscriber: può essere un computer, uno smartphone, un microcontroller o qualsiasi altro dispositivo che si sottoscrive per la ricezione di dati/messaggi.
  • Messages: i messaggi sono informazioni che vengono scambiati all’interno della rete MQTT. Un messaggio può essere un dato o un comando. Un messaggio ad esempio può esssere un valore della temperatura oppure un comando di accensione per un device.
  • Topics: sono un concetto molto importante per MQTT. Sono il meccanismo che consente di effettuare la registrazione dell’interesse ad un particolar tipo di messaggi o come verranno pubblicati i messaggi. La rappresentazione di un topic viene effettuta utilizzando una stringa di caratteri separati da uno slash. Ogni slash indica il livello del topiscs. Ad esempio:

/home/kitchen/led rappresenta un topic relativo al led presente in kitchen. Nell’ottica di creazione di un topic si possono utilizzare quelli che il protocollo definisce come single level wildcards e le multi level wildcards.

  • Broker: il broker riceve tutti i messaggi, li filtra e decide chi è interessato ed inoltra i messaggi a tutti i clients che si sono sottoscritti

Esempio di progetto

Supponiamo di avere a disposizione un sensore ON/OFF (e di un processore che ne rileva la il valore). Il microprocessore pubblica le informazioni proveniente dal sensore, utilizzando come topic (home/kitchen/led). Un raspberry PI 2 W riceve il messaggio con il topic ON / OFF ed effettuerà l’attivazione del led associato.

Come descritto in precedenza il Broker è un elemento fondamentale per il protocollo MQTT. Sono numerosi i software che possono essere utilizzati, ma nel nostro caso utilizzeremo Mosquitto, un progetto opensource scaricabile da qui.

Installazione di Mosquitto

Prerequisito fondamentale per l’installazione e la sua configurazione è quello di aver già configuratato il rapsberry con una distribuzione linux e perfettamente funzionante.

Ed eccoci quindi pronti per l’installazione. Una volta collegati sulla console del raspberry:

pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install mosquitto mosquitto-clients

che installerà tutto il necessario per poter configurare il broker.

Per poter avviare all’avvio mosquitto è necessario utilizzare il comando:

pi@raspberry:~ $ sudo systemctl enable mosquitto.service

Per verificar eche tutto sia stato installato e configurato correttamente possiamo utilizzare il comando:

mosquitto –v

che consente di stampare a video la versione del broker e la configurazione (che a questo punto non è ancora stata effettuata).

Un ulteriore test del corretto funzionamento è rappresentato dalla sottoscrizione ad un topic e dalla sua generazione:

mosquitto_sub –t "TestTopic"

che consente di effettuare la sottoscrizione al topic chiamato “TestTopic”. A questo punto è stata effettuata la sottoscrizione (che è bloccante). Aprendo un nuovo terminale, possiamo inviare un messaggio con il comando:

mosquitto_pub –t "TestTopic" –m "Hello There!

Il messaggio viene quindi visualizzato all’interno del subscriber.

Nel prossimo post vedremo come effettuara la configurazione di un semplice ambiente IOT sfruttando le caratteristiche di MQTT.