INHOUDSOPGAWE:

Hoe om MQTT te gebruik met die Raspberry Pi en ESP8266: 8 stappe (met foto's)
Hoe om MQTT te gebruik met die Raspberry Pi en ESP8266: 8 stappe (met foto's)

Video: Hoe om MQTT te gebruik met die Raspberry Pi en ESP8266: 8 stappe (met foto's)

Video: Hoe om MQTT te gebruik met die Raspberry Pi en ESP8266: 8 stappe (met foto's)
Video: tutorial install home assistant on stb 2024, November
Anonim
Hoe om MQTT te gebruik met die Framboos Pi en ESP8266
Hoe om MQTT te gebruik met die Framboos Pi en ESP8266

In hierdie instruksies sal ek verduidelik wat die MQTT -protokol is en hoe dit gebruik word om tussen toestelle te kommunikeer. Dan, as 'n praktiese demonstrasie, sal ek jou wys hoe om 'n eenvoudige tweekliënte -stelsel op te stel, waar 'n ESP8266 -module 'n boodskap sal stuur na 'n Python -program as 'n knoppie gedruk word. Ek gebruik spesifiek 'n Adafruit HUZZAH -module vir hierdie projek, 'n Framboos Pi en 'n tafelrekenaar. Die Raspberry Pi tree op as die MQTT -makelaar, en die Python -kliënt word vanaf 'n aparte tafelrekenaar bestuur (opsioneel, aangesien dit op die Raspberry Pi uitgevoer kan word).

Om hierdie instruksies te volg, moet u basiese kennis van elektronika hê en hoe u die Arduino -sagteware kan gebruik. U moet ook vertroud wees met die gebruik van 'n opdragreël -koppelvlak (vir die Raspberry Pi). Hopelik, as u die kennis opgedoen het van wat MQTT is en hoe u dit in 'n basiese scenario kan gebruik, sal u u eie IoT -projekte kan skep!

Vereiste onderdele

  • 1 x Raspberry Pi, gekoppel aan 'n plaaslike netwerk (met Jessie)
  • 1 x ESP8266 -module (Adafruit HUZZAH)
  • 1 x broodbord
  • 3 x springdrade (man-tot-man)
  • 1 x drukknop
  • 1 x 10k ohm weerstand (bruin-swart-oranje kleurkode)

Ek het hierdie Instructable geskep, aangesien MQTT my altyd as 'n protokol geïnteresseerd het en daar is baie verskillende maniere waarop dit gebruik kan word. Dit lyk egter nie asof ek my kop kon uitsteek oor hoe om toestelle te kodeer om dit te gebruik nie. Dit was omdat ek nie geweet/verstaan het wat eintlik aan die gang was met my "Hallo, wêreld!" vanaf toestel A en stuur dit na toestel B. Daarom het ek besluit om hierdie instruksies te skryf om u (hopelik) te leer hoe dit werk, en ook my eie begrip daarvan te versterk!

Stap 1: Wat is MQTT?

Wat is MQTT?
Wat is MQTT?

MQTT, of MQ Telemetry Transport, is 'n boodskapprotokol waarmee verskeie toestelle met mekaar kan praat. Tans is dit 'n gewilde protokol vir die Internet of Things, hoewel dit vir ander doeleindes gebruik is - byvoorbeeld Facebook Messenger. Interessant genoeg is MQTT in 1999 uitgevind, wat beteken dat dit net so oud soos ek is!

MQTT is gebaseer op die idee dat toestelle onderwerpe kan publiseer of inteken. So, byvoorbeeld. As toestel #1 die temperatuur van een van sy sensors opgeteken het, kan dit 'n boodskap publiseer wat die temperatuurwaarde bevat wat dit aangeteken het, na 'n onderwerp (bv. "Temperatuur"). Hierdie boodskap word gestuur na 'n MQTT -makelaar, waaraan u kan dink as 'n skakelaar/router op 'n plaaslike netwerk. Sodra die MQTT -makelaar die boodskap ontvang het, stuur dit dit na enige toestelle (in hierdie geval, toestel #2) wat op dieselfde onderwerp ingeteken is.

In hierdie projek publiseer ons 'n onderwerp met behulp van 'n ESP8266, en skep ons 'n Python -skrif wat op dieselfde onderwerp inskryf, via 'n Raspberry Pi wat as die MQTT -makelaar sal dien. Die wonderlike van MQTT is dat dit liggewig is, dus dit is ideaal om op klein mikrobeheerders soos 'n ESP8266 te werk, maar dit is ook wyd beskikbaar - sodat ons dit ook op 'n Python -script kan uitvoer.

Hopelik sal u aan die einde van hierdie projek 'n begrip hê van wat MQTT is en hoe u dit in die toekoms vir u eie projekte kan gebruik.

Stap 2: Installeer die MQTT Broker op die Raspberry Pi

Die installering van die MQTT Broker op die Raspberry Pi
Die installering van die MQTT Broker op die Raspberry Pi
Die installering van die MQTT Broker op die Raspberry Pi
Die installering van die MQTT Broker op die Raspberry Pi
Die installering van die MQTT Broker op die Raspberry Pi
Die installering van die MQTT Broker op die Raspberry Pi

Om ons MQTT -stelsel op te stel, benodig ons 'n makelaar, soos verduidelik in die vorige stap. Vir die Raspberry Pi gebruik ons die "Mosquitto" MQTT -makelaar. Voordat ons dit installeer, is dit altyd die beste om ons Raspberry Pi op te dateer.

sudo apt-get update

sudo apt-get upgrade

Sodra u dit gedoen het, installeer u muskiete en dan die pakkette vir muskietkliënte.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

As u klaar is met die installering van hierdie twee pakkette, moet ons die makelaar instel. Die konfigurasielêer van die muskietmakelaar is geleë op /etc/mosquitto/mosquitto.conf, maak dit oop met u gunsteling teksredakteur. As u nie 'n gunsteling teksredakteur het nie of nie weet hoe u een van die opdragreëlredakteurs moet gebruik nie, gebruik ek nano sodat u kan volg:

sudo nano /etc/mosquitto/mosquitto.conf

Onderaan hierdie lêer behoort u die reël te sien:

include_dir /etc/mosquitto/conf.d

Vee hierdie reël uit. Voeg die volgende reëls onderaan die lêer by.

allow_anonymous vals

password_file/etc/mosquitto/pwfile listener 1883

Deur hierdie reëls te tik, het ons vir muskiet gesê dat ons nie wil hê dat iemand met ons makelaar moet skakel wat nie 'n geldige gebruikersnaam en wagwoord verskaf nie (ons stel dit eers in 'n sekonde) en dat ons wil dat muskiet luister na boodskappe op poortnommer 1883.

As u nie wil hê dat die makelaar 'n gebruikersnaam en wagwoord benodig nie, moenie die eerste twee reëls wat ons bygevoeg het nie (dit wil sê allow_anonymous … en password_file …) insluit. As u dit gedoen het, gaan dan verder met die herlaai van die Raspberry Pi.

Maak die lêer toe (en stoor dit). As u die nano -voorbeeld volg, druk CTRL+X en tik Y wanneer u gevra word.

Omdat ons pas aan muskiet gesê het dat gebruikers wat probeer om die MQTT -makelaar te gebruik, geverifieer moet word, moet ons nou vir muskiet vertel wat die gebruikersnaam en wagwoord is! Tik dus die volgende opdrag - vervang gebruikersnaam met die gebruikersnaam wat u wil hê - voer dan die wagwoord in wat u sou wou hê (let op: as u 'n ander password_file -pad tydens die wysiging van die konfigurasielêer vervang, vervang die pad hieronder met die een wat u gebruik het).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile gebruikersnaam

Aangesien ons pas die konfigurasie -lêer van die muskiet verander het, moet ons die Raspberry Pi herlaai.

sudo herlaai

Sodra die Raspberry Pi klaar is met herlaai, moet u 'n ten volle funksionerende MQTT -makelaar hê! Vervolgens gaan ons probeer om daarmee te werk, met behulp van 'n aantal verskillende toestelle/metodes!

Stap 3: Toets die makelaar

Toets die makelaar
Toets die makelaar

Nadat u die muskiet op die Raspberry Pi geïnstalleer het, kan u dit vinnig toets - net om seker te maak dat alles reg werk. Vir hierdie doel is daar twee opdragte wat ons op die opdragreël kan gebruik. mosquitto_pub en muskiet_sub. In hierdie stap sal ek u lei deur elkeen hiervan te gebruik om ons makelaar te toets.

Om die makelaar te toets, moet u twee opdragreëlvensters oopmaak. As u Putty of 'n ander SSH -kliënt gebruik, is dit so eenvoudig soos om 'n ander SSH -venster oop te maak en aan te meld soos gewoonlik. As u toegang tot u Pi verkry vanaf 'n UNIX -terminale, is dit presies dieselfde. As u die Raspberry Pi direk gebruik, moet u twee terminale vensters in die GUI -modus oopmaak (die opdrag startxcan kan gebruik word om die GUI te begin).

Noudat u twee vensters oopgemaak het, kan ons met die toets begin. Tik in een van die twee terminale die volgende opdrag en vervang gebruikersnaam en wagwoord met die wat u in die vorige stap opgestel het.

mosquitto_sub -d -u gebruikersnaam -P wagwoord -t toets

As u besluit het om nie 'n gebruikersnaam en wagwoord in die vorige stap in te stel nie, ignoreer u van nou af die -u en -P vlae in die opdragte. As voorbeeld sou die opdrag van mosquitto_sub nou wees:

muskiet_sub -d -t toets

Die mosquitto_sub -opdrag teken in op 'n onderwerp en vertoon alle boodskappe wat na die gespesifiseerde onderwerp gestuur word in die terminale venster. Hier beteken -d die ontfoutingsmodus, sodat alle boodskappe en aktiwiteite op die skerm verskyn. -u en -P moet selfverduidelikend wees. Ten slotte, -t is die naam van die onderwerp waarop ons wil inteken - in hierdie geval 'toets'.

Vervolgens, in die ander terminaalvenster, gaan ons probeer om 'n boodskap oor die 'toets' -onderwerp te publiseer. Tik die volgende en onthou weer om gebruikersnaam en wagwoord te verander:

mosquitto_pub -d -u gebruikersnaam -P wagwoord -t toets -m "Hallo, wêreld!"

As u op enter druk, moet u die boodskap "Hallo, wêreld!" verskyn in die eerste terminale venster wat ons gebruik het (om in te teken). As dit die geval is, is u gereed om aan die ESP8266 te begin werk!

Stap 4: Die opstel van die ESP8266 (Adafruit HUZZAH)

Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)
Die opstel van die ESP8266 (Adafruit HUZZAH)

Hierdie stap is spesifiek vir die Adafruit HUZZAH (dit is wat ek gebruik om hierdie projek te voltooi). As u 'n ander Arduino / ESP8266 -toestel gebruik, kan u hierdie stap oorslaan. Ek raai u egter aan om dit vinnig te lees, ingeval daar inligting is wat vir u relevant kan wees.

Vir hierdie projek gaan ek die HUZZAH met die Arduino -sagteware programmeer. As u dit nog nie gedoen het nie, moet u die Arduino -sagteware (nuwer as 1.6.4) installeer. U kan dit hier aflaai.

Sodra u die Arduino-sagteware geïnstalleer het, maak dit oop en navigeer na File-> Preferences. Hier moet u (naby aan die onderkant van die venster) 'n tekskassie sien met die etiket: "Bykomende bestuurders -URL's". Kopieer en plak die volgende skakel in hierdie tekskassie:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klik op OK om u veranderinge te stoor. Maak nou die direksiebestuurder (gereedskap-> raad-> direksiebestuurder) oop en soek na ESP8266. Installeer die esp8266 by ESP8266 Community -pakket. Herbegin die Arduino -sagteware.

Nou, voordat ons die bord kan programmeer, moet ons 'n paar verskillende opsies kies. Kies Adafruit HUZZAH ESP8266 vir die bord, 80 MHz vir die CPU -frekwensie in die kieslys Gereedskap (u kan 160 MHz gebruik as u dit wil oorklok, maar vir eers gebruik ek 80 MHz), 4M (3M SPIFFS) vir die flitsgrootte en 115200 vir die oplaaisnelheid. Maak ook seker dat u die COM -poort kies wat u gebruik (dit sal afhang van u opstelling).

Voordat u enige kode kan oplaai, moet u seker maak dat die HUZZAH in die laaiprogram is. Om dit moontlik te maak, hou die knoppie op die bord gemerk GPIO0 ingedruk, en terwyl dit ingedruk word, hou ook die Reset -knoppie ingedruk. Laat dan die Reset -knoppie los en dan GPIO0. As u dit korrek gedoen het, moet die rooi LED wat aangeskakel het toe u op GPIO0 gedruk het, nou maar lig wees.

Om die kode na die mikrobeheerder op te laai, moet u eers seker maak dat die HUZZAH in die laaiprogram is, en dan op die oplaai -knoppie in die Arduino IDE klik.

As u probleme ondervind met die opstel van die HUZZAH, kan u meer inligting vind by die eie tutoriaal van Adafruit.

Stap 5: Programmering van die ESP8266

Die programmering van die ESP8266
Die programmering van die ESP8266

Nou begin ons met die programmering van die ESP8266, maar voordat ons kan begin, moet u die volgende biblioteke in die Arduino-biblioteekbestuurder installeer (Sketch-> Include Libraries-> Manage Libraries)

  • Weiering 2
  • PubSubClient

Sodra u die biblioteke geïnstalleer het, kan u die kode wat ek in hierdie Instructable (MQTT_Publish.zip) ingesluit het, uitvoer. Ek het seker gemaak om kommentaar te lewer sodat u kan verstaan wat elke afdeling doen, en dit sal u hopelik in staat stel om dit aan te pas by u behoeftes.

Onthou om die konstantes bo -aan die kode te verander sodat u ESP8266 kan koppel aan u WiFi -netwerk en u MQTT Broker (die Raspberry Pi).

As u besluit het om nie 'n gebruikersnaam en wagwoord vir die MQTT -makelaar in te stel nie, laai dan die lêer MQTT_PublishNoPassword.zip af.

Stap 6: Installeer Python-kliënt (paho-mqtt)

Installeer Python-kliënt (paho-mqtt)
Installeer Python-kliënt (paho-mqtt)

Gelukkig is hierdie stap baie eenvoudig! Om die muskiet -python -kliënt te installeer, tik u net die volgende in die opdragreël (Linux/Mac) of selfs opdragprompt (Windows).

pip installeer paho-mqtt

Opmerking: daar kan 'n probleem wees met die Windows -opdragprompt met die pip -opdrag as u nie spesifiseer dat u pip geïnstalleer wil hê en dat python by u PATH -veranderlike moet voeg toe u Python geïnstalleer het nie. Daar is 'n aantal maniere om dit reg te stel, maar ek dink net om Python weer te installeer, is die maklikste manier. As jy twyfel - gaan loer gerus!

Stap 7: Python -kliënt - teken in

Python -kliënt - teken in
Python -kliënt - teken in

In hierdie stap gaan ons die Python -script opstel (óf op die Raspberry Pi self óf op 'n ander rekenaar wat aan die netwerk gekoppel is) om al die boodskappe wat deur die ESP8266 gestuur word (gepubliseer) na die MQTT -onderwerp te hanteer.

Ek het die onderstaande python -kode (PythonMQTT_Subscribe.py) ingesluit, waarop kommentaar gelewer is om u te help verstaan wat aangaan, maar ek sal ook 'n paar van die belangrikste kenmerke hier verduidelik.

As u nie vroeër 'n gebruikersnaam en wagwoord vir die MQTT -verbinding opgestel het nie, laai die PythonMQTT_SubscribeNoPassword.py -lêer eerder af.

Stap 8: Kommunikeer tussen ESP8266 -toestelle

Kommunikasie tussen ESP8266 -toestelle
Kommunikasie tussen ESP8266 -toestelle

As u byvoorbeeld 'n IoT -netwerk wil opstel, wil u moontlik tussen ESP8266 -toestelle kommunikeer. Gelukkig is dit nie veel ingewikkelder as die kode wat ons voorheen geskryf het nie, maar daar is 'n paar noemenswaardige veranderinge.

Vir een ESP om data na 'n ander te stuur, moet die eerste ESP vir die onderwerp publiseer, en die tweede ESP moet op die onderwerp inskryf. Hierdie opstelling maak voorsiening vir 'n eenrigtinggesprek - ESP (1) tot ESP (2). As ons wil hê dat ESP (2) met ESP (1) moet terug praat, kan ons 'n nuwe onderwerp skep waarop ESP (2) sal publiseer en ESP (1) sal inteken. Gelukkig kan ons verskeie intekenare oor dieselfde onderwerp hê, so as u data na 'n aantal stelsels wil stuur, benodig u slegs een onderwerp (waarop almal inteken, behalwe die toestel wat die data stuur). publiseer).

As u hulp nodig het om uit te vind wat elke toestel moet doen, dink aan die stelsel as 'n kamer van mense. As ESP (1) publiseer, kan u hierdie toestel as 'n 'luidspreker' voorstel, en enige toestelle wat op die onderwerp inteken, is 'luisteraars' in hierdie voorbeeld.

Ek het 'n voorbeeldkode hieronder ingesluit, wat demonstreer hoe 'n ESP8266 op 'n onderwerp kan inteken en na sekere boodskappe kan luister - 1 en 0. As 1 ontvang word, word die ingeboude LED (vir die HUZZAH - GPIO 0) aangeskakel. As 0 ontvang word, is hierdie LED afgeskakel.

As u meer ingewikkelde data wil verwerk, moet dit gedoen word in die ReceMessage -funksie (sien kode).

As u data vir u eie projekte moet stuur en ontvang, kan u die publiseerfunksie uit die vorige voorbeeld in die kode in hierdie stap opneem. Dit moet hanteer word in die belangrikste Arduino lus () funksie.

Onthou om die veranderlikes bo -aan die kode te verander om by u netwerk te pas!

Aanbeveel: