MQTT(Mosquitto) e Raspberry Pi

MQTT(Mosquitto) e Raspberry Pi

MQTT è un protocollo di messaggistica di tipologia publish-subscribe ti tipo ISO standard.

Fu progettato per situazioni in cui è richiesto un minimo impatto e banda limitata. Per funzionare ha bisogno di un Broker che è responsabile di distribuire i messaggi ai client collegati.

In questo articolo vedremo come utilizzare il nostro Raspberry Pi (nel mio caso il 4 ) come broker con l’utilizzo di Mosquitto, mentre come client utilizzerò lo stesso Mosquitto, Node-RED e alcune app android in modo da dimostrare come possiamo in maniera semplice inviare e ricevere messaggi.

Lo scopo dell’utilizzo di MQTT è appunto dare la possibilità di ricevere ed inviare messaggi in maniera semplice e veloce, ad esempio io ho iniziato a usare MQTT per alcuni progetti con Arduino o NodeMCU dove avevo bisogno di mettere in comunicazione i vari dispositivi con alcuni flow di Node-red in modo da pilotare in maniera semplice tutte le funzioni che mi servivano.

Nello schema riportato sopra vediamo appunto che Il Raspberry Pi con installato Mosquitto fa da broker, alla quale alcuni client si sottoscrivono su specifici token e quando un client pubblica sul medesimo token, il broker non fa altro che ricevere il messaggio e mandarlo a tutti i client sottoscritti.



Per procedere abbiamo quindi bisogno di un Raspberri Pi, io utlizzo il mio Raspberry Pi 4 da 4 GB con installato Raspbian.

Procediamo aprendo una console ed eseguiamo il comando:

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

Questo importerà il package necessario direttamente dal repository, aggiungeremo quind la key

sudo apt-key add mosquitto-repo.gpg.key

In questo modo il repository sarà disponibile ad apt. Aggiorniamo quindi la source list

apt-get update

Una volta completato possiamo installare Mosquitto broker

apt-get install mosquitto

Mosquitto sarà subito disponibile e verrà avviato al boot in automatico, possiamo verificare che il broker sia attivo provando ad eseguire semplicemente il comando

mosquitto

Dovremmo ricevere un messaggio di errore che ci avvisa che Mosquitto è già in uso. Di default il broker comunica sulla porta 1883.

Ora possiamo installare il client per effettuare il primo test. Eseguiamo il comando:

apt-get install mosquitto-clients

Effettuiamo quindi il primo test con MQTT aprendo due terminali. Nel primo effettueremo una subscribe, il terminale client si collegherà quindi al broker e resterà in attesa di ricevere messaggi. Nel secondo effettueremo una publish andando ad inviare un messaggio MQTT sullo stesso topic.



Effettuiamo la subscribe sul topic ‘test/topic’ con il comando:

mosquitto_sub -v -t 'test/topic'

Effettuiamo quindi il publish del messaggio ‘Hello World’ sullo stesso topic con il comando:

 mosquitto_pub  -t 'test/topic' -m 'Hello World!'

Come possiamo vedere il terminale dove abbiamo effettuato la subscribe riceve immediatamente il messaggio pubblicato.

Abbiamo inviato il nostro primo messaggio MQTT!!

Ora vediamo come comunicare in MQTT utilizzando Node-RED. Andremo a creare un nuovo Flow che chiameremo MQTT_test dove inseriremo alcuni nodi per sottoscriversi a dei topic e per pubblicare messaggi sugli stessi.

Il primo nodo che inseriremo é quello per pubblicare il messaggio su un topic, “mqtt out”.

Quando inserisci un nodo MQTT in un qualsiasi flusso viene richiesto di definire almeno un MQTT Broker alla quale collegarsi. Nel nostro caso il Broker è lo stesso Raspberry Pi quindi inseriremo nel server localhost o 127.0.0.1.

Il nodo di publish oltre al broker necessità di un nodo che gli dia l’input, ossia il messaggio, che sarà nel msg.payload, a questo scopo usiamo un classico nodo di Inject di tipo testo dove scriveremo il messaggio ‘Hello world Node-RED’. Nel nodo di publish andremo quindi a compilare il campo topic con ad esempio ‘noderedmsg’.

Ora possiamo creare il nodo di subscribe, “mqtt in”, e configurarlo sul solito broker e solito topic. Come output useremo il nodo di debug che andrà a scrivere in console i messaggi ricevuti.

Deployamo il nostro Flow e siamo pronti a testare la comunicazione. Ci spostiamo in debug e clicchiamo il pulsante del nodo Inject.

Come è possibile vedere nella console di debug riceviamo immediatamente il messaggio pubblicato.

Trovate il flow su github

Conclusioni

Questo tipo di protocollo per lo scambio di messaggi, come abbiamo visto, è molto semplice da utilizzare. MQTT ci permette rapidamente di creare comunicazioni tra dispositivi in rete, io ad esempio lo utilizzo per comandare alcuni dispositivi come arduino, NodeMCU o altri Node-RED.

Esistono anche delle app come ad esempio Mqtt Dashboard – IoT and Node-RED controller che consente di creare in maniera estremamente semplice una Dashboard con la quale ricevere o inviare messaggi verso il nostro Broker, in questo modo non dovrete sviluppare da soli la vostra interfaccia ma potrete averne una subito disponibile con pochi click.

 

Nessun commento

Aggiungi il tuo commento