Cuprins:

Cum se utilizează MQTT cu Raspberry Pi și ESP8266: 8 pași (cu imagini)
Cum se utilizează MQTT cu Raspberry Pi și ESP8266: 8 pași (cu imagini)

Video: Cum se utilizează MQTT cu Raspberry Pi și ESP8266: 8 pași (cu imagini)

Video: Cum se utilizează MQTT cu Raspberry Pi și ESP8266: 8 pași (cu imagini)
Video: Automatizari fotovoltaice incepatori Ep.1: Instalare și prezentare Solar Assistant 2024, Iunie
Anonim
Cum se folosește MQTT cu Raspberry Pi și ESP8266
Cum se folosește MQTT cu Raspberry Pi și ESP8266

În acest Instructable, voi explica ce este protocolul MQTT și cum este utilizat pentru a comunica între dispozitive. Apoi, ca demonstrație practică, vă voi arăta cum să configurați un sistem simplu cu doi clienți, unde un modul ESP8266 va trimite un mesaj la un program Python când este apăsat un buton. Mai exact, folosesc un modul Adafruit HUZZAH pentru acest proiect, un Raspberry Pi și un computer desktop. Raspberry Pi va acționa ca broker MQTT, iar clientul Python va fi rulat de pe un computer desktop separat (opțional, deoarece acesta ar putea fi rulat pe Raspberry Pi).

Pentru a urma împreună cu acest instructabil, va trebui să aveți cunoștințe de bază despre electronică și cum să utilizați software-ul Arduino. De asemenea, ar trebui să vă familiarizați cu utilizarea unei interfețe de linie de comandă (pentru Raspberry Pi). Sperăm că, odată ce ați dobândit cunoștințele despre ceea ce este MQTT și cum să îl utilizați într-un scenariu de bază, veți putea să vă creați propriile proiecte IoT!

Piese necesare

  • 1 x Raspberry Pi, conectat la o rețea locală (care rulează Jessie)
  • 1 x modul ESP8266 (Adafruit HUZZAH)
  • 1 x panou de pâine
  • 3 x fire jumper (de la bărbat la bărbat)
  • 1 x buton
  • 1 rezistor 10 x Ohm (cod culoare maro-negru-portocaliu)

Am creat acest Instructable, deoarece MQTT m-a interesat întotdeauna ca protocol și există multe moduri diferite în care ar putea fi folosit. Cu toate acestea, nu am putut să-mi dau seama cum să codez dispozitivele pentru ao folosi. Acest lucru se datorează faptului că nu știam / înțelegeam ce se întâmplă de fapt pentru a-mi lua „Bună ziua, lume!” de la dispozitivul A și trimiterea la dispozitivul B. Prin urmare, am decis să scriu acest instructabil pentru (să sperăm) să vă învăț cum funcționează și, de asemenea, să-mi întăresc propria înțelegere!

Pasul 1: Ce este MQTT?

Ce este MQTT?
Ce este MQTT?

MQTT, sau MQ Telemetry Transport, este un protocol de mesagerie care permite mai multor dispozitive să vorbească între ele. În prezent, este un protocol popular pentru Internetul obiectelor, deși a fost folosit în alte scopuri - de exemplu, Facebook Messenger. Interesant este că MQTT a fost inventat în 1999 - adică este la fel de vechi ca mine!

MQTT se bazează pe ideea că dispozitivele pot publica sau se pot abona la subiecte. Deci, de exemplu. Dacă dispozitivul nr. 1 a înregistrat temperatura de la unul dintre senzorii săi, acesta poate publica un mesaj care conține valoarea de temperatură pe care a înregistrat-o la un subiect (de exemplu, „Temperatură”). Acest mesaj este trimis unui broker MQTT, la care vă puteți gândi ca un switch / router într-o rețea locală. Odată ce brokerul MQTT a primit mesajul, acesta îl va trimite către toate dispozitivele (în acest caz, dispozitivul nr. 2) care sunt abonate la același subiect.

În acest proiect, vom publica pe un subiect folosind un ESP8266 și vom crea un script Python care se va abona la același subiect, prin intermediul unui Raspberry Pi care va acționa ca Broker MQTT. Lucrul grozav despre MQTT este că este ușor, deci este perfect pentru a rula pe microcontrolere mici, cum ar fi un ESP8266, dar este, de asemenea, disponibil pe scară largă - deci îl putem rula și pe un script Python.

Sperăm că, la sfârșitul acestui proiect, veți avea o înțelegere a ceea ce este MQTT și cum să îl utilizați pentru propriile proiecte în viitor.

Pasul 2: Instalarea MQTT Broker pe Raspberry Pi

Instalarea MQTT Broker pe Raspberry Pi
Instalarea MQTT Broker pe Raspberry Pi
Instalarea MQTT Broker pe Raspberry Pi
Instalarea MQTT Broker pe Raspberry Pi
Instalarea MQTT Broker pe Raspberry Pi
Instalarea MQTT Broker pe Raspberry Pi

Pentru a configura sistemul MQTT, avem nevoie de un broker, așa cum s-a explicat în pasul anterior. Pentru Raspberry Pi, vom folosi brokerul "Mosquitto" MQTT. Înainte de a instala acest lucru, este întotdeauna cel mai bine să ne actualizăm Raspberry Pi.

sudo apt-get update

sudo apt-get upgrade

După ce ați făcut acest lucru, instalați mosquitto și apoi pachetele mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

După ce ați terminat de instalat aceste două pachete, va trebui să configurăm brokerul. Fișierul de configurare al brokerului mosquitto se află la /etc/mosquitto/mosquitto.conf, deci deschideți-l cu editorul de text preferat. Dacă nu aveți un editor de text preferat sau nu știți cum să utilizați oricare dintre editorii de linie de comandă, voi folosi nano, astfel încât să puteți urmări:

sudo nano /etc/mosquitto/mosquitto.conf

În partea de jos a acestui fișier, ar trebui să vedeți linia:

include_dir /etc/mosquitto/conf.d

Ștergeți această linie. Adăugați următoarele rânduri în partea de jos a fișierului.

allow_anonymous false

password_file / etc / mosquitto / pwfile listener 1883

Tastând acele linii, i-am spus mosquitto că nu dorim ca cineva să se conecteze la brokerul nostru care nu furnizează un nume de utilizator și o parolă valide (vom începe să le setăm într-o secundă) și că vrem să mosquitto să ascultați mesajele de pe numărul de port 1883.

Dacă nu doriți ca brokerul să solicite un nume de utilizator și o parolă, nu includeți primele două linii pe care le-am adăugat (adică allow_anonymous … și password_file …). Dacă ați făcut acest lucru, treceți la repornirea Raspberry Pi.

Acum închideți (și salvați) acel fișier. Dacă urmăriți împreună cu exemplul nano, apăsați CTRL + X și tastați Y când vi se solicită.

Deoarece tocmai am spus mosquitto că utilizatorii care încearcă să utilizeze brokerul MQTT trebuie să fie autentificați, acum trebuie să îi spunem mosquitto care sunt numele de utilizator și parola! Deci, tastați următoarea comandă - înlocuind numele de utilizator cu numele de utilizator pe care l-ați dori - apoi introduceți parola pe care ați dori-o când vi se solicită (Notă: dacă, la editarea fișierului de configurare, ați specificat o altă cale password_file, înlocuiți calea de mai jos cu unul pe care l-ai folosit).

sudo mosquitto_passwd -c / etc / mosquitto / pwfile nume de utilizator

Deoarece tocmai am schimbat fișierul de configurare mosquitto, ar trebui să repornim Raspberry Pi.

sudo reboot

După ce Raspberry Pi a terminat repornirea, ar trebui să aveți un broker MQTT pe deplin funcțional! În continuare, vom încerca să interacționăm cu acesta, folosind o serie de dispozitive / metode diferite!

Pasul 3: Testarea brokerului

Testarea brokerului
Testarea brokerului

Odată ce ați instalat mosquitto pe Raspberry Pi, puteți să-i faceți un test rapid - doar pentru a vă asigura că totul funcționează corect. În acest scop, există două comenzi pe care le putem folosi pe linia de comandă. mosquitto_pub și mosquitto_sub. În acest pas, vă voi ghida prin utilizarea fiecăruia dintre acestea pentru a testa brokerul nostru.

Pentru a testa brokerul, va trebui să deschideți două ferestre din linia de comandă. Dacă utilizați Putty sau un alt client SSH, acest lucru este la fel de simplu ca să deschideți o altă fereastră SSH și să vă conectați ca de obicei. Dacă accesați Pi-ul dvs. de la un terminal UNIX, acesta este exact același lucru. Dacă utilizați direct Raspberry Pi, va trebui să deschideți două ferestre de terminal în modul GUI (comanda startx poate fi utilizată pentru a porni GUI).

Acum că ați deschis două ferestre, putem începe testarea. În unul dintre cele două terminale, tastați următoarea comandă, înlocuind numele de utilizator și parola cu cele pe care le-ați configurat în pasul anterior.

mosquitto_sub -d -u nume de utilizator -P parolă -t test

Dacă ați decis să nu setați un nume de utilizator și o parolă în pasul anterior, atunci de acum înainte, ignorați steagurile -u și -P din comenzi. Deci, ca exemplu, comanda mosquitto_sub ar fi acum:

mosquitto_sub -d -t test

Comanda mosquitto_sub se va abona la un subiect și va afișa toate mesajele trimise către subiectul specificat în fereastra terminalului. Aici, -d înseamnă modul de depanare, deci toate mesajele și activitatea vor fi afișate pe ecran. -u și -P ar trebui să fie auto-explicative. În cele din urmă, -t este numele subiectului la care dorim să ne abonăm - în acest caz, „test”.

Apoi, în cealaltă fereastră a terminalului, vom încerca să publicăm un mesaj pe subiectul „test”. Tastați următoarele, amintindu-vă din nou pentru a schimba numele de utilizator și parola:

mosquitto_pub -d -u nume de utilizator -P parolă -t test -m "Bună ziua, lume!"

Când apăsați Enter, ar trebui să vedeți mesajul dvs. „Bună ziua, lume!” apare în prima fereastră de terminal pe care am folosit-o (pentru a vă abona). Dacă acesta este cazul, sunteți gata să începeți să lucrați la ESP8266!

Pasul 4: Configurarea ESP8266 (Adafruit HUZZAH)

Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)
Configurarea ESP8266 (Adafruit HUZZAH)

Acest pas este specific Adafruit HUZZAH (deoarece acesta este ceea ce folosesc pentru a finaliza acest proiect). Dacă utilizați un alt dispozitiv Arduino / ESP8266, vă recomandăm să săriți peste acest pas. Cu toate acestea, v-aș sfătui să o citiți, în cazul în care există informații care ar putea fi relevante pentru dvs.

Pentru acest proiect, voi programa HUZZAH cu software-ul Arduino. Deci, dacă nu ați făcut-o deja, asigurați-vă că instalați software-ul Arduino (mai nou decât 1.6.4). O puteți descărca de aici.

După ce ați instalat software-ul Arduino, deschideți-l și navigați la Fișier-> Preferințe. Aici ar trebui să vedeți (aproape de partea de jos a ferestrei) o casetă de text cu eticheta: „Adrese URL suplimentare pentru managerul de panouri”. În această casetă de text, copiați și lipiți următorul link:

arduino.esp8266.com/stable/package_esp8266com_index.json

Faceți clic pe OK pentru a salva modificările. Acum deschideți Board Manager (Instrumente-> Board-> Board Manager) și căutați ESP8266. Instalați pachetul comunitar esp8266 by ESP8266. Reporniți software-ul Arduino.

Acum, înainte de a putea programa placa, trebuie să selectăm câteva opțiuni diferite. În opțiunea meniului Instrumente, selectați Adafruit HUZZAH ESP8266 pentru placă, 80 MHz pentru frecvența procesorului (puteți utiliza 160 MHz dacă doriți să o overclockați, dar deocamdată voi folosi 80 MHz), 4M (3M SPIFFS) pentru dimensiunea blițului și 115200 pentru viteza de încărcare. De asemenea, asigurați-vă că selectați portul COM pe care îl utilizați (acest lucru va depinde de configurarea dvs.).

Înainte de a putea încărca orice cod, trebuie să vă asigurați că HUZZAH este în modul bootloader. Pentru a activa acest lucru, țineți apăsat butonul de pe placa marcat cu GPIO0 și, în timp ce acesta este ținut, țineți apăsat și butonul Reset. Apoi, eliberați butonul Resetare, apoi GPIO0. Dacă ați făcut acest lucru corect, LED-ul roșu care a aprins când ați apăsat GPIO0 ar trebui să fie acum slab luminat.

Pentru a încărca codul pe microcontroler, asigurați-vă mai întâi că HUZZAH este în modul bootloader, apoi pur și simplu faceți clic pe butonul de încărcare din ID-ul Arduino.

Dacă aveți probleme la configurarea HUZZAH, informații suplimentare pot fi găsite la propriul tutorial Adafruit.

Pasul 5: Programarea ESP8266

Programarea ESP8266
Programarea ESP8266

Acum vom începe să programăm ESP8266, dar înainte să putem începe, va trebui să instalați următoarele biblioteci în managerul Arduino Library (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

După ce ați instalat acele biblioteci, veți putea rula codul pe care l-am inclus în acest Instructable (MQTT_Publish.zip). M-am asigurat să-l comentez, astfel încât să puteți înțelege ce face fiecare secțiune, iar acest lucru ar trebui să vă permită să îl adaptați la nevoile dvs.

Nu uitați să schimbați constantele din partea de sus a codului, astfel încât ESP8266 să se poată conecta la rețeaua WiFi și la brokerul MQTT (Raspberry Pi).

Dacă ați decis să nu setați un nume de utilizator și o parolă pentru Brokerul MQTT, descărcați în schimb fișierul MQTT_PublishNoPassword.zip.

Pasul 6: Instalarea Python Client (paho-mqtt)

Instalarea Python Client (paho-mqtt)
Instalarea Python Client (paho-mqtt)

Din fericire, acest pas este foarte simplu! Pentru a instala clientul mosquitto python, trebuie doar să tastați următoarele în linia de comandă (Linux / Mac) sau chiar în promptul de comandă (Windows).

pip instala paho-mqtt

Notă: promptul de comandă Windows poate avea o problemă la executarea comenzii pip dacă nu ați specificat că doriți să instalați pip și să adăugați python la variabila PATH când ați instalat Python. Există o serie de moduri de a remedia acest lucru, dar cred că doar reinstalarea Python este cea mai ușoară cale. Dacă aveți dubii - dați-i un google!

Pasul 7: Client Python - Abonare

Client Python - Abonare
Client Python - Abonare

În acest pas, vom configura scriptul Python (fie pe Raspberry Pi în sine, fie pe un alt computer conectat la rețea) pentru a gestiona toate mesajele trimise (publicate) de către ESP8266 la subiectul MQTT.

Am inclus mai jos codul python (PythonMQTT_Subscribe.py), care a fost comentat pentru a vă ajuta să înțelegeți ce se întâmplă, dar voi explica și câteva dintre principalele caracteristici aici.

Dacă nu ați setat mai devreme un nume de utilizator și o parolă pentru conexiunea MQTT, descărcați în schimb fișierul PythonMQTT_SubscribeNoPassword.py.

Pasul 8: Comunicarea între dispozitivele ESP8266

Comunicarea între dispozitivele ESP8266
Comunicarea între dispozitivele ESP8266

De exemplu, dacă doriți să configurați o rețea IoT, vă recomandăm să comunicați între dispozitivele ESP8266. Din fericire, acest lucru nu este mult mai complex decât codul pe care l-am scris înainte, totuși, există câteva modificări notabile.

Pentru ca un ESP să trimită date către altul, primul ESP va trebui să publice pe subiect, iar al doilea ESP va trebui să se aboneze la acel subiect. Această configurare va permite o conversație într-un singur sens - ESP (1) la ESP (2). Dacă dorim ca ESP (2) să vorbească cu ESP (1), putem crea un subiect nou, la care ESP (2) va publica și ESP (1) se va abona. Din fericire, putem avea mai mulți abonați pe același subiect, așa că, dacă doriți să trimiteți date către mai multe sisteme, veți avea nevoie doar de un subiect (la care se abonează toți, cu excepția dispozitivului care trimite datele, așa cum va fi publicarea).

Dacă aveți nevoie de ajutor pentru a afla ce trebuie să facă fiecare dispozitiv, gândiți-vă la sistem ca la o cameră de oameni. Dacă ESP (1) publică, vă puteți imagina acest dispozitiv ca un „difuzor”, iar orice dispozitiv care se abonează la subiect este „ascultător” în acest exemplu.

Am inclus câteva exemple de cod mai jos, care demonstrează modul în care un ESP8266 se poate abona la un subiect și poate asculta anumite mesaje - 1 și 0. Dacă se primește 1, LED-ul de la bord (pentru HUZZAH - GPIO 0) este pornit. Dacă se primește 0, acest LED este oprit.

Dacă doriți să procesați date mai complexe, acest lucru trebuie făcut în funcția ReceivedMessage (a se vedea codul).

Pentru propriile proiecte, dacă trebuie să trimiteți și să primiți date, puteți încorpora funcția de publicare din exemplul anterior în codul inclus în acest pas. Acest lucru ar trebui gestionat în funcția principală loop Arduino ().

Nu uitați să modificați variabilele din partea de sus a codului pentru a se potrivi rețelei dvs.!

Recomandat: