Taula de continguts:
- Pas 1: Què és MQTT?
- Pas 2: Instal·lació del corredor MQTT al Raspberry Pi
- Pas 3: provar el corredor
- Pas 4: Configuració de l'ESP8266 (Adafruit HUZZAH)
- Pas 5: programació de l'ESP8266
- Pas 6: Instal·lació del client Python (paho-mqtt)
- Pas 7: Client Python: subscripció
- Pas 8: Comunicació entre dispositius ESP8266
Vídeo: Com utilitzar MQTT amb Raspberry Pi i ESP8266: 8 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
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?
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
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
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)
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
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)
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ó
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
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:
Domòtica amb ESP8266 WiFi sense utilitzar Blynk !: 24 passos (amb imatges)
Domòtica amb WiFi ESP8266 sense fer servir Blynk !: En primer lloc, vull agrair a tothom que m’hagi guanyat al Concurs d’Automatització 2016 per aquest INSTRUCTABLE. Per tant, tal com us vaig prometre, aquí teniu allò que es pot instruir per controlar els electrodomèstics amb el mòdul WiFi ESP8266
Com utilitzar MQTT amb Raspberry Pi i ESP8266 / sonoff: 4 passos
Com s’utilitza MQTT amb el Raspberry Pi i l’ESP8266 / sonoff: Hola a tots! Avui us mostraré com configurar un commutador de relé wifi sonoff basat en el raspberry pi i l’SP8266 per controlar els electrodomèstics des de qualsevol part del món. d'aquest instructable, si heu seguit amb atenció la meva instrucció
PiTextReader: un lector de documents fàcil d'utilitzar per a visions amb discapacitat: 8 passos (amb imatges)
PiTextReader: un lector de documents fàcil d’utilitzar per a visions deteriorades: Visió general Actualització: demostració de vídeo breu: https://youtu.be/n8-qULZp0GoPiTextReader permet a una persona amb una visió deficient "llegir" text de sobres, cartes i altres elements. Captura una imatge de l’ítem, es converteix en text pla amb OCR (Optical Char
Com utilitzar l'escàner làser 360 ° RPLIDAR amb Arduino: 3 passos (amb imatges)
Com utilitzar l’escàner làser 360 ° RPLIDAR amb Arduino: sóc un gran fan de la creació de robots de sumo i sempre busco nous materials i sensors interessants per construir un robot millor, més ràpid i més intel·ligent. Em vaig assabentar del RPLIDAR A1 que podeu obtenir per 99 dòlars a DFROBOT.com. Vaig dir que era inte
Com utilitzar DMX512 / RDM amb Raspberry Pi: 6 passos (amb imatges)
Com utilitzar DMX512 / RDM amb Raspberry Pi: el Raspberry Pi es pot utilitzar per a controls d’il·luminació mitjançant el bus DMX512. En sistemes de bus DMX512 s’utilitza RS-485 com a capa física. El nostre RS422 / RS485 Serial HAT és un HAT de comunicació sèrie aïllat totalment galvànic dissenyat per utilitzar-lo amb el Raspberry Pi