Taula de continguts:

Com utilitzar MQTT amb Raspberry Pi i ESP8266: 8 passos (amb imatges)
Com utilitzar MQTT amb Raspberry Pi i ESP8266: 8 passos (amb imatges)

Vídeo: Com utilitzar MQTT amb Raspberry Pi i ESP8266: 8 passos (amb imatges)

Vídeo: Com utilitzar MQTT amb Raspberry Pi i ESP8266: 8 passos (amb imatges)
Vídeo: Live [ IoT ] MQTT com Raspberry Pi! 02/03/23 2024, Desembre
Anonim
Com s'utilitza MQTT amb Raspberry Pi i ESP8266
Com s'utilitza MQTT amb Raspberry Pi i ESP8266

En aquest instructiu, explicaré què és el protocol MQTT i com s’utilitza per comunicar-se entre dispositius. A continuació, com a demostració pràctica, us mostraré com configurar un sistema senzill de dos clients, on un mòdul ESP8266 enviarà un missatge. a un programa Python quan es prem un botó. En concret, estic fent servir un mòdul Adafruit HUZZAH per a aquest projecte, un Raspberry Pi i un ordinador de sobretaula. El Raspberry Pi actuarà com a broker MQTT i el client Python s'executarà des d'un ordinador d'escriptori independent (opcional, ja que es podria executar al Raspberry Pi).

Per seguir aquest Instructable, haureu de tenir coneixements bàsics d’electrònica i com utilitzar el programari Arduino. També hauríeu de familiaritzar-vos amb l’ús d’una interfície de línia d’ordres (per al Raspberry Pi). Amb sort, un cop hàgiu conegut què és MQTT i com s’utilitza en un escenari bàsic, podreu crear els vostres propis projectes IoT.

Peces obligatòries

  • 1 x Raspberry Pi, connectat a una xarxa local (executant Jessie)
  • 1 mòdul ESP8266 (Adafruit HUZZAH)
  • 1 x Taula de pa
  • 3 x cables de pont (home a home)
  • 1 x polsador
  • 1 resistència de 10 k ohmis (codi de color marró-negre-taronja)

He creat aquest Instructable, ja que MQTT sempre m'ha interessat com a protocol i hi ha moltes maneres diferents de fer-lo servir. Tanmateix, sembla que no podia entendre la manera de codificar els dispositius per utilitzar-lo. Això es deu al fet que no sabia / entenia el que realment passava per agafar el meu "Hola, món!" des del dispositiu A i enviar-lo al dispositiu B. Per tant, vaig decidir escriure aquest instructiu per (amb sort) ensenyar-vos el seu funcionament i reforçar la meva pròpia comprensió.

Pas 1: Què és MQTT?

Què és MQTT?
Què és MQTT?

MQTT, o MQ Telemetry Transport, és un protocol de missatgeria que permet que diversos dispositius parlin entre ells. Actualment, és un protocol popular per a Internet de les coses, tot i que s’ha utilitzat per a altres propòsits, per exemple, Facebook Messenger. Curiosament, MQTT es va inventar el 1999, és a dir, és tan vell com jo.

MQTT es basa en la idea que els dispositius poden publicar temes o subscriure-s’hi. Així, per exemple. Si el dispositiu núm. 1 ha registrat la temperatura des d'un dels seus sensors, pot publicar un missatge que conté el valor de temperatura que ha registrat a un tema (per exemple, "Temperatura"). Aquest missatge s'envia a un corredor MQTT, que podeu considerar com un commutador / enrutador en una xarxa d'àrea local. Un cop el MQTT Broker ha rebut el missatge, l’enviarà a qualsevol dispositiu (en aquest cas, Dispositiu núm. 2) que estigui subscrit al mateix tema.

En aquest projecte, publicarem un tema mitjançant un ESP8266 i crearem un script Python que subscriurà aquest mateix tema, mitjançant un Raspberry Pi que actuarà com a corredor MQTT. El millor de MQTT és que és lleuger, de manera que és perfecte per executar-se en microcontroladors petits com ara un ESP8266, però també està disponible àmpliament, de manera que també podem executar-lo en un script Python.

Amb sort, al final d’aquest projecte, podreu entendre què és MQTT i com utilitzar-lo per als vostres propis projectes en el futur.

Pas 2: Instal·lació del corredor MQTT al Raspberry Pi

Instal·lació del corredor MQTT al Raspberry Pi
Instal·lació del corredor MQTT al Raspberry Pi
Instal·lació del corredor MQTT al Raspberry Pi
Instal·lació del corredor MQTT al Raspberry Pi
Instal·lació del corredor MQTT al Raspberry Pi
Instal·lació del corredor MQTT al Raspberry Pi

Per configurar el nostre sistema MQTT, necessitem un intermediari, tal com s’explica al pas anterior. Per al Raspberry Pi, utilitzarem el broker MQTT "Mosquitto". Abans d’instal·lar-ho, sempre és millor actualitzar el nostre Raspberry Pi.

sudo apt-get update

sudo apt-get upgrade

Un cop fet això, instal·leu mosquitto i, a continuació, els paquets mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Quan hàgiu acabat d’instal·lar aquests dos paquets, haurem de configurar l’agent. El fitxer de configuració del corredor mosquitto es troba a /etc/mosquitto/mosquitto.conf, així que obriu-lo amb el vostre editor de text favorit. Si no teniu un editor de text preferit o no sabeu utilitzar cap dels editors de línia d'ordres, utilitzaré nano perquè pugueu seguir:

sudo nano /etc/mosquitto/mosquitto.conf

A la part inferior d’aquest fitxer, hauríeu de veure la línia:

include_dir /etc/mosquitto/conf.d

Suprimiu aquesta línia. Afegiu les línies següents a la part inferior del fitxer.

allow_anonymous fals

fitxer_contrasenya / etc / mosquitto / oient de fitxers pw 1883

En escriure aquestes línies, hem dit a mosquitto que no volem que ningú es connecti al nostre agent que no proporcioni un nom d’usuari i una contrasenya vàlids (els definirem en un segon) i que volem que mosquitto escolteu els missatges al número de port 1883.

Si no voleu que l’agent requereixi un nom d’usuari i una contrasenya, no incloeu les dues primeres línies que hem afegit (és a dir, allow_anonymous … i password_file …). Si ho heu fet, aneu a reiniciar el Raspberry Pi.

Ara tanqueu (i deseu) aquest fitxer. Si seguiu l'exemple nano, premeu CTRL + X i escriviu Y quan se us demani.

Com que acabem de dir a mosquitto que els usuaris que intenten utilitzar el broker MQTT han d’estar autenticats, ara hem d’indicar a mosquitto quins són el nom d’usuari i la contrasenya. Per tant, escriviu l’ordre següent: substituir el nom d’usuari pel nom d’usuari que desitgeu i, a continuació, introduïu la contrasenya que desitgeu quan se us demani (Nota: si, en editar el fitxer de configuració, heu especificat un altre camí password_file, substituïu el camí següent per un que heu utilitzat).

sudo mosquitto_passwd -c / etc / mosquitto / pwfile nom d'usuari

Com que acabem de canviar el fitxer de configuració mosquitto, hauríem de reiniciar el Raspberry Pi.

sudo reiniciar

Un cop Raspberry Pi hagi acabat de reiniciar-se, hauríeu de tenir un corredor MQTT que funcioni completament. A continuació, intentarem interactuar amb ell, utilitzant diversos dispositius / mètodes diferents.

Pas 3: provar el corredor

Prova del corredor
Prova del corredor

Un cop hàgiu instal·lat mosquitto al Raspberry Pi, podeu fer-ne una prova ràpida, només per assegurar-vos que tot funciona correctament. Amb aquest propòsit, hi ha dues ordres que podem utilitzar a la línia d’ordres. mosquitto_pub i mosquitto_sub. En aquest pas, us guiaré en l'ús de cadascun d'aquests per provar el nostre agent.

Per provar l’agent, haureu d’obrir dues finestres de línia d’ordres. Si utilitzeu Putty o un altre client SSH, això és tan senzill com obrir una altra finestra SSH i iniciar la sessió com de costum. Si accediu al vostre Pi des d’un terminal UNIX, això és exactament el mateix. Si utilitzeu directament el Raspberry Pi, haureu d’obrir dues finestres de terminal en mode GUI (l’ordre startx es pot utilitzar per iniciar la GUI).

Ara que heu obert dues finestres, podem començar a fer la prova. En un dels dos terminals, escriviu l'ordre següent, substituint el nom d'usuari i la contrasenya pels que heu configurat al pas anterior.

mosquitto_sub -d -u nom d'usuari -P contrasenya -t prova

Si heu decidit no establir un nom d'usuari i una contrasenya al pas anterior, a partir d'ara, ignoreu les marques -u i -P de les ordres. Per tant, com a exemple, l'ordre mosquitto_sub seria ara:

mosquitto_sub -d -t test

L'ordre mosquitto_sub se subscriurà a un tema i mostrarà tots els missatges que s'envien al tema especificat a la finestra del terminal. Aquí, -d significa mode de depuració, de manera que tots els missatges i activitats es mostraran a la pantalla. -u i -P s’han d’explicar per si mateixos. Finalment, -t és el nom del tema al qual volem subscriure - en aquest cas, "prova".

A continuació, a l’altra finestra del terminal, intentarem publicar un missatge al tema “test”. Escriviu el següent, recordant de nou per canviar el nom d'usuari i la contrasenya:

mosquitto_pub -d -u nom d'usuari -P contrasenya -t prova -m "Hola, món!"

Quan premeu Retorn, hauríeu de veure el vostre missatge "Hola, món!" apareixerà a la primera finestra del terminal que vam utilitzar (per subscriure-us). Si aquest és el cas, ja esteu a punt per començar a treballar a l’ESP8266.

Pas 4: Configuració de l'ESP8266 (Adafruit HUZZAH)

Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)
Configuració de l'ESP8266 (Adafruit HUZZAH)

Aquest pas és específic de l'Adafruit HUZZAH (ja que és el que estic fent servir per completar aquest projecte). Si utilitzeu un dispositiu Arduino / ESP8266 diferent, potser voldreu ometre aquest pas. Tanmateix, us aconsellaria que la llegiu descremada, per si de cas hi ha alguna informació que pugui ser rellevant per a vosaltres.

Per a aquest projecte, vaig a programar el HUZZAH amb el programari Arduino. Per tant, si encara no ho heu fet, assegureu-vos d’instal·lar el programari Arduino (més recent que l’1.6.4). Podeu descarregar-lo aquí.

Un cop instal·lat el programari Arduino, obriu-lo i aneu a Fitxer-> Preferències. Aquí hauríeu de veure (a prop de la part inferior de la finestra) un quadre de text amb l'etiqueta: "URL addicionals del gestor de taulers". En aquest quadre de text, copieu i enganxeu el següent enllaç:

arduino.esp8266.com/stable/package_esp8266com_index.json

Feu clic a D'acord per desar els canvis. Ara obriu el gestor de la junta (Eines-> Junta-> gestor de la junta) i cerqueu ESP8266. Instal·leu el paquet de la comunitat esp8266 per ESP8266. Reinicieu el programari Arduino.

Ara, abans de poder programar el tauler, hem de seleccionar algunes opcions diferents. A l’opció del menú Eines, seleccioneu Adafruit HUZZAH ESP8266 per a la placa, 80 MHz per a la freqüència de la CPU (podeu utilitzar 160 MHz si voleu overclock-la, però de moment faré servir 80 MHz), 4M (3M SPIFFS) per a la mida de Flash i 115200 per a la velocitat de càrrega. A més, assegureu-vos de seleccionar el port COM que utilitzeu (dependrà de la vostra configuració).

Abans de poder carregar qualsevol codi, heu d'assegurar-vos que el HUZZAH estigui en mode d'arrencada. Per activar-ho, manteniu premut el botó del tauler marcat amb GPIO0 i, mentre es mantingui premut, manteniu premut també el botó Restableix. A continuació, deixeu anar el botó Restableix i, a continuació, GPIO0. Si ho heu fet correctament, el LED vermell que es va encendre en prémer GPIO0 hauria d’estar poc il·luminat.

Per carregar codi al microcontrolador, primer assegureu-vos que el HUZZAH estigui en mode de carregador d’arrencada i, tot seguit, feu clic al botó de càrrega de l’IDE Arduino.

Si teniu problemes per configurar HUZZAH, trobareu més informació al propi tutorial d'Adafruit.

Pas 5: programació de l'ESP8266

Programació de l’ESP8266
Programació de l’ESP8266

Ara començarem a programar l’ESP8266, però abans de començar, haureu d’instal·lar les biblioteques següents al gestor de biblioteques Arduino (Sketch-> Inclou biblioteques-> Gestiona biblioteques)

  • Rebot 2
  • PubSubClient

Un cop hàgiu instal·lat aquestes biblioteques, podreu executar el codi que he inclòs en aquest instructable (MQTT_Publish.zip). M'he assegurat de comentar-ho perquè pugueu entendre el que fa cada secció i, amb sort, us permetrà adaptar-la a les vostres necessitats.

Recordeu canviar les constants a la part superior del codi perquè el vostre ESP8266 es pugui connectar a la vostra xarxa WiFi i al vostre corredor MQTT (el Raspberry Pi).

Si heu decidit no definir un nom d’usuari i una contrasenya per al corredor MQTT, descarregueu el fitxer MQTT_PublishNoPassword.zip.

Pas 6: Instal·lació del client Python (paho-mqtt)

Instal·lació del client Python (paho-mqtt)
Instal·lació del client Python (paho-mqtt)

Afortunadament, aquest pas és molt senzill. Per instal·lar el client mosquitto python, només heu d’escriure el següent a la línia d’ordres (Linux / Mac) o fins i tot a l’indicador d’ordres (Windows).

pip install paho-mqtt

Nota: L'indicador d'ordres de Windows pot tenir un problema en executar l'ordre pip si no heu especificat que voleu instal·lar pip i afegir python a la variable PATH quan vau instal·lar Python. Hi ha diverses maneres de solucionar-ho, però crec que només és fàcil reinstal·lar Python. Si teniu dubtes, doneu-li un google.

Pas 7: Client Python: subscripció

Client Python: subscripció
Client Python: subscripció

En aquest pas, configurarem l’escriptura Python (ja sigui al mateix Raspberry Pi o en un altre ordinador connectat a la xarxa) per gestionar tots els missatges que l’ESP8266 envia (publica) al tema MQTT.

He inclòs el codi python a continuació (PythonMQTT_Subscribe.py), que s'ha comentat per ajudar-vos a entendre què passa, però també aquí explicaré algunes de les principals característiques.

Si abans no heu definit cap nom d’usuari i contrasenya per a la connexió MQTT, descarregueu el fitxer PythonMQTT_SubscribeNoPassword.py.

Pas 8: Comunicació entre dispositius ESP8266

Comunicació entre dispositius ESP8266
Comunicació entre dispositius ESP8266

Si voleu configurar una xarxa IoT, per exemple, és possible que vulgueu comunicar-vos entre dispositius ESP8266. Afortunadament, això no és molt més complex que el codi que hem escrit abans, però hi ha un parell de canvis notables.

Perquè un ESP enviï dades a un altre, el primer ESP haurà de publicar-se al tema i el segon ESP haurà de subscriure-s’hi. Aquesta configuració permetrà una conversa unidireccional: ESP (1) a ESP (2). Si volem que ESP (2) torni a parlar amb ESP (1), podem crear un tema nou, al qual publicarà ESP (2), i ESP (1) es subscriurà. Afortunadament, podem tenir diversos subscriptors sobre el mateix tema, de manera que si voleu enviar dades a diversos sistemes, només necessitareu un tema (al qual es subscriuen tots, excepte el dispositiu que envia les dades, ja que estar publicant).

Si necessiteu ajuda per esbrinar què ha de fer cada dispositiu, penseu en el sistema com una sala de persones. Si ESP (1) publica, podeu imaginar-vos aquest dispositiu com a "altaveu" i tots els dispositius que estiguin subscrits al tema són "oients" en aquest exemple.

A continuació he inclòs algun exemple de codi, que demostra com un ESP8266 es pot subscriure a un tema i escoltar determinats missatges: 1 i 0. Si es rep 1, el LED integrat (per a l'HUZZAH - GPIO 0) està encès. Si es rep 0, aquest LED s’apaga.

Si voleu processar dades més complexes, cal fer-ho a la funció ReceivedMessage (vegeu el codi).

Per als vostres propis projectes, si heu d'enviar i rebre dades, podeu incorporar la funció de publicació de l'exemple anterior al codi inclòs en aquest pas. Això s'hauria de gestionar a la funció principal d'Arduino loop ().

Recordeu que heu de canviar les variables de la part superior del codi per adaptar-les a la vostra xarxa.

Recomanat: