Mosquitto MQTT Broker a la RPi

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Instal·lació Mosquitto

Presentació Jordi Binefa de MQTT:

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
Enter the following for wheezy
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
for jessie
sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto 
i el client:

sudo apt-get install mosquitto-clients
$ service mosquitto status
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled)
   Active: active (running) since Tue 2018-06-26 14:23:12 UTC; 38s ago

En una finestra, creem una subscripció:

$ mosquitto_sub –d –t armtronix_mqtt

en una altra finestra (de la RPi), ens adherim a aquesta subscripció: mosquitto_pub -d -t armtronix_mqtt -m "Hello armtronix"

i si em vull connectar des del portàtil (Ubuntu), he d'instal·lar el client:

$ sudo apt install mosquitto-clients

Em subscric i tot seguit puc publicar:

$ mosquitto_sub -h 192.168.1.35 -t armtronix_mqtt
$ mosquitto_pub -h 192.168.1.35 -t armtronix_mqtt -m "Hi this is Armtronix_server"

Pràctica MQTT + ESP8266 + RPi + NodeRed

A la RPi tinc el MQTT broker, i en el NodeMCU (ESP8266) necessitaré una llibreria que fa que l'arduino IDE es comporti com un client de MQTT:

(ja la tenia instal·lada). PubSubClient es una librería compatible con Arduino y ESP8266. Básicamente hace que nuestra placa se comporte como un cliente MQTT es decir, que podamos publicar mensajes y suscribirnos a un topic o varios para recibir mensajes.

...
Publish message: hello world #52
Publish message: hello world #53
Publish message: hello world #54
...

El que fa el programa mqtt_esp8266.ino:

  It connects to an MQTT server then:
  - publishes "hello world" to the topic "outTopic" every two seconds
  - subscribes to the topic "inTopic", printing out any messages
    it receives. NB - it assumes the received payloads are strings not binary
  - If the first character of the topic "inTopic" is an 1, switch ON the ESP Led,
    else switch it off

Des del portàtil llenço un missatge al tema inTopic (al broker de la RPi), i el meu client de l'Arduino se n'entera, doncs està subscrit.

portàtil $ mosquitto_pub -h 192.168.1.35 -t inTopic -m "Hola"

Arduino:

...
Publish message: hello world #268
Message arrived [inTopic] Hola
...

Des del portàtil llenço un missatge al tema inTopic (al broker de la RPi), i el meu client de l'Arduino se n'entera, doncs està subscrit.

portàtil $ mosquitto_pub -h 192.168.1.35 -t inTopic -m "Hola"

Arduino:

...
Publish message: hello world #268
Message arrived [inTopic] Hola
...

I aleshores ja puc encendre i apagar el LED del NodeMCU, només cal enviar missatges que comencin per 1 ó 0:

portàtil $ mosquitto_pub -h 192.168.1.35 -t inTopic -m "1Hola"
portàtil $ mosquitto_pub -h 192.168.1.35 -t inTopic -m "0Hola"

De la mateixa manera, com que el meu NodeMCU està enviant missatges al tema outTopic, jo des del portàtil em puc subscriure a aquest tema i rebo els missatges que provenen del nodeMCU:

$ mosquitto_sub -h 192.168.1.35 -t outTopic
hello world #21
hello world #22
...

Finalment, per acabar la pràctica, en la RPi tinc el servidor de NodeRed, que accedeixo des del portàtil:

Creo un nou flux, prova NodeMCU, i com a entrada fico un input de MQTT, que configuro dient que vull escoltar el tema outTopic que està en el servidor 192.168.1.35 (port 1883, que és el port per defecte de MQTT). I com a sortida fico un debug normal i corrent. I així veig com des del client web de NodeRed tinc la notificació de com vaig rebent els missatges que s'envien del NodeMCU.

Aplicació Android: MQTT Dash

De la mateixa manera, per a dispositius Android també tenim clients MQTT. Això és interessant, doncs significa que per exemple des del mòbil podem activar relés, llegir valors de sensors, etc.

Primer de tot m'he de subscriure a outTopic, i aleshores podré veure els missatges que arriben al nodeMCU (a través del broker de la RPi)

També creo un botó per publicar a inTopic, i el botó l'associo al 1 (activat) i al 0 (desactivat), que és el que espera rebre el NodeMCU per activar/desactivar el led integrat.

També puc fer un tercer botó per activar/desactivar el led, i que controlo amb el hadler de Javascript OnTap.

però no queda clar com s'ha de fer això.


creat per Joan Quintana Compte, juny 2018

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines