Primi passi con MQTT e Arduino

Ciao!

In questo post vedremo come iniziare ad utilizzare il protocollo MQTT (wiki),
protocollo pensato (quasi 20 anni fa!) per essere semplice, leggero e flessibile.

Una particolarità dell'MQTT è l'essere di tipo publish/subscribe.
Questo significa che non c'è una trasmissioni di dati diretta tra chi chiede l'informazione e chi la fornisce, ma c'è invece un intermediario.

Questo intermediario si chiama "Broker", è lui che si occupa di smistare i messaggi tra chi li sottoscrive (Subscriber) e chi li pubblica (Publisher).
Chi pubblica il messaggio non li invia direttamente a chi li ha sottoscritti, ma li invia solamente al Broker.
Sottoscrivere un messaggio significa dire al Broker di inviarci il valore della variabile, che abbiamo sottoscritto appunto, nel momento in cui c'è una variazione del suddetto valore.




Ora che abbiamo visto la parte "teorica", passiamo alla pratica e proviamo ad utilizzare questo protocollo.

Come abbiamo visto sopra, necessitiamo sicuramente di un Broker.
Il Broker può essere un servizio esterno (ad esempio Amazon AWS e Adafruit IO) oppure possiamo farci il nostro Broker direttamente sul nostro pc grazie a Mosquitto.

Io ho deciso di seguire la seconda strada.
Per ottenere il vostro broker Mosquitto, è sufficiente recarsi qui, scaricare e scompattare i "Mosquitto install files".

Dopo aver ottenuto il vostro Broker, è ora di creare il nostro primo Client MQTT con Arduino.
Per prima cosa installiamo la libreria PubSubClient direttamente dall'IDE di Arduino,
come mostrato in questi printscreen:




Installiamo l'ultima versione disponibile:




Per il mio esempio ho utilizzato una scheda Wemos (link eBay), basata su esp8266, chip dotato di modulo wifi.

Una volta installata la libreria aprite l'esempio che trovate sotto "Esempi", "PubSubClient", "mqtt_esp8266".
Modificate il codice inserendo ssid e password della rete wifi a cui si collegherà la Wemos, poi inserite come "mqtt_server" l'indirizzo ip del pc su cui state facendo girare Mosquitto (su windows potete scoprire l'indirizzo ip digitando "ipconfig" nel prompt dei comandi).

Adesso aprite un prompt dei comandi per avviare il broker Mosquitto (nel print sotto è quello in alto a sinistra) e un altro prompt per sottoscrivervi al topic "outTopic" (immagine a destra).
Il prompt in basso a sinistra è utilizzato per pubblicare un dato nel topic outTopic, ma questo è facoltativo, infatti sarà il nostro Arduino a farlo.


I comandi sono:

Per avviare il broker
PosizioneCartellaMosquitto\mosquitto.exe -v

Per sottoscrivere un topic:
PosizioneCartellaMosquitto\mosquitto_sub.exe -h [IP del broker] -t [topic da sottoscrivere]

Per pubblicare un messaggio:
PosizioneCartellaMosquitto\mosquitto_pub -h [IP del broker] -i [client id] -t [topic in cui pubblicare] -m [messaggio]

Attenzione!
tentando di avviare il broker, potrebbe apparirvi il seguente errore:
"Error: di norma è consentito un solo utilizzo di ogni indirizzo di socket (protocollo/indirizzo di rete/porta)."

Questo significa che il broker è già in esecuzione sul vostro pc (probabilmente come servizio).

Se volete disabilitarlo, per vedere l'output verboso sul prompt dei comandi, dovete farlo da gestione attività (premendo CTRL+ALT+CANC, "gestione attività", "servizi", click con il tasto dx su mosquitto, "arresta sevizio")

Se volete disabilitare in modo permanente l'avvio come servizio di Mosquitto, digitate "msconfig" nel menu start e disabilitare il servizio mosquitto.

Una volta che avete il Broker attivo, e la Wemos programmata, dovreste vedere sui 2 prompt qualcosa di simile a questo:


Sulla sinistra gira il client dove è stata fatta la sottoscrizione al topic "outTopic", ogni riga è un messaggio pubblicato dalla Wemos.
Nel prompt a destra gira il Broker, vengono mostrate le richieste smistate.

Questo è tutto!
Senza dubbio tornerò a fare test con questo protocollo adattabile a svariati utilizzi.

Link utili e fonti:

Segui Daniele Alberti su Google+ per rimanere sempre aggiornato su nuovi post.

6 commenti:

  1. Bell'articolo... io sono un po' restio alla WiFi su arduino ... pensavo a nRF24L01+ e Raspberry come Broker ...

    RispondiElimina
    Risposte
    1. Intendi per motivi di sicurezza? Se è questo il motivo, anche io sono un po' restio, però pensavo di utilizzarlo creando una rete senza accesso ad internet, per fare della domotica, magari con si un rasp come broker. Alla fine i costi si equivalgono ma si ha la praticità del MQTT

      Elimina
  2. in caso di mancanza di wifi, si può fare utilizzando la rete 3g o 4g?

    RispondiElimina
    Risposte
    1. Direttamente non saprei, in alternativa potresti creare un hotspot e poi appoggiarti a quello

      Elimina
  3. Ciao avete provato thingsBoard? Ha un broker mqtt integrato ma gestisce anche anche altri standard industriali. Io l'ho installato sul raspy, figata pazzesca (da nerd naturalmente...)

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post