Satura rādītājs:

Kā lietot MQTT ar Raspberry Pi un ESP8266: 8 soļi (ar attēliem)
Kā lietot MQTT ar Raspberry Pi un ESP8266: 8 soļi (ar attēliem)

Video: Kā lietot MQTT ar Raspberry Pi un ESP8266: 8 soļi (ar attēliem)

Video: Kā lietot MQTT ar Raspberry Pi un ESP8266: 8 soļi (ar attēliem)
Video: Умный выключатель в круглый подрозетник с радио повторителем, легкая и быстрая установка 2024, Novembris
Anonim
Kā lietot MQTT ar Raspberry Pi un ESP8266
Kā lietot MQTT ar Raspberry Pi un ESP8266

Šajā instrukcijā es paskaidrošu, kas ir MQTT protokols un kā tas tiek izmantots, lai sazinātos starp ierīcēm. Pēc tam kā praktisku demonstrāciju es parādīšu, kā iestatīt vienkāršu divu klientu sistēmu, kur ESP8266 modulis nosūtīs ziņojumu uz Python programmu, nospiežot pogu. Konkrēti, šim projektam es izmantoju Adafruit HUZZAH moduli, Raspberry Pi un galddatoru. Raspberry Pi darbosies kā MQTT brokeris, un Python klients tiks palaists no atsevišķa galddatora (pēc izvēles, jo to varētu palaist ar Raspberry Pi).

Lai sekotu līdzi šai instrukcijai, jums ir jābūt pamatzināšanām par elektroniku un Arduino programmatūras izmantošanu. Jums vajadzētu arī iepazīties ar komandrindas saskarnes izmantošanu (Raspberry Pi). Cerams, ka, tiklīdz būsiet ieguvis zināšanas par to, kas ir MQTT un kā to izmantot pamata scenārijā, varēsit izveidot savus IoT projektus!

Nepieciešamās detaļas

  • 1 x Raspberry Pi, savienots ar vietējo tīklu (darbojas Jessie)
  • 1 x ESP8266 modulis (Adafruit HUZZAH)
  • 1 x maizes dēlis
  • 3 x vadi (no vīriešiem līdz vīriešiem)
  • 1 x spiedpoga
  • 1 x 10k omu rezistors (brūns-melns-oranžs krāsu kods)

Esmu izveidojis šo pamācību, jo MQTT vienmēr ir interesējis mani kā protokolu, un ir daudz dažādu veidu, kā to izmantot. Tomēr es nevarēju saprast, kā kodēt ierīces, lai to izmantotu. Tas bija tāpēc, ka es nezināju/nesapratu, kas patiesībā notiek, lai uzņemtu manu "Sveiki, pasaule!" no ierīces A un nosūtīt to uz ierīci B. Tāpēc es nolēmu uzrakstīt šo pamācību, lai (cerams) iemācītu jums, kā tā darbojas, kā arī lai stiprinātu savu izpratni par to!

1. darbība: kas ir MQTT?

Kas ir MQTT?
Kas ir MQTT?

MQTT vai MQ telemetrijas transports ir ziņojumapmaiņas protokols, kas ļauj vairākām ierīcēm sarunāties savā starpā. Pašlaik tas ir populārs lietu interneta protokols, lai gan tas ir izmantots citiem mērķiem - piemēram, Facebook Messenger. Interesanti, ka MQTT tika izgudrots 1999. gadā - tas nozīmē, ka tas ir tikpat vecs kā es!

MQTT pamatā ir ideja, ka ierīces var publicēt vai abonēt tēmas. Tā, piemēram. Ja ierīce Nr. 1 ir reģistrējusi temperatūru no viena no saviem sensoriem, tā var publicēt ziņojumu par tematu (piemēram, "Temperatūra"), kurā ir ierakstītā temperatūras vērtība. Šis ziņojums tiek nosūtīts MQTT brokerim, kuru jūs varat uzskatīt par slēdzi/maršrutētāju lokālajā tīklā. Tiklīdz MQTT brokeris ir saņēmis ziņojumu, tas to nosūtīs uz visām ierīcēm (šajā gadījumā ierīci Nr. 2), kuras abonē to pašu tēmu.

Šajā projektā mēs publicēsim tēmu, izmantojot ESP8266, un izveidosim Python skriptu, kas abonēs šo pašu tēmu, izmantojot Raspberry Pi, kas darbosies kā MQTT brokeris. MQTT lieliskais ir tas, ka tas ir viegls, tāpēc ir ideāli piemērots darbam ar maziem mikrokontrolleriem, piemēram, ESP8266, taču tas ir arī plaši pieejams - lai mēs varētu to palaist arī ar Python skriptu.

Cerams, ka šī projekta beigās jums būs izpratne par to, kas ir MQTT un kā to izmantot saviem projektiem nākotnē.

2. solis: MQTT brokera instalēšana Raspberry Pi

MQTT brokera instalēšana Raspberry Pi
MQTT brokera instalēšana Raspberry Pi
MQTT brokera instalēšana Raspberry Pi
MQTT brokera instalēšana Raspberry Pi
MQTT brokera instalēšana Raspberry Pi
MQTT brokera instalēšana Raspberry Pi

Lai iestatītu mūsu MQTT sistēmu, mums ir nepieciešams starpnieks, kā paskaidrots iepriekšējā solī. Raspberry Pi mēs izmantosim MQTT brokeri "Mosquitto". Pirms mēs to instalējam, vienmēr vislabāk ir atjaunināt Raspberry Pi.

sudo apt-get update

sudo apt-get jauninājums

Kad esat to izdarījis, instalējiet mosquitto un pēc tam mosquitto-customers paketes.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-customers -g

Kad esat pabeidzis instalēt šīs divas paketes, mums būs jākonfigurē starpnieks. Moskītu māklera konfigurācijas fails atrodas vietnē /etc/mosquitto/mosquitto.conf, tāpēc atveriet to ar savu iecienītāko teksta redaktoru. Ja jums nav iecienītākā teksta redaktora vai jūs nezināt, kā izmantot kādu no komandrindas redaktoriem, es izmantošu nano, lai jūs varētu sekot līdzi:

sudo nano /etc/mosquitto/mosquitto.conf

Šī faila apakšā jums vajadzētu redzēt rindu:

include_dir /etc/mosquitto/conf.d

Izdzēsiet šo rindiņu. Pievienojiet šādas rindas faila apakšdaļā.

allow_anonymous false

Paroles_fails/etc/mosquitto/pwfile klausītājs 1883

Ievadot šīs rindiņas, mēs esam teikuši moskītu, ka nevēlamies, lai kāds ar mūsu brokeri pieslēgtos, kas nepiedāvā derīgu lietotājvārdu un paroli (mēs tos iestatīsim pēc sekundes) un ka mēs vēlamies, lai moskītu klausieties ziņas porta numurā 1883.

Ja nevēlaties, lai brokeris pieprasītu lietotājvārdu un paroli, neiekļaujiet pirmās divas pievienotās rindiņas (t.i., atļaut_anonīmu… un paroles_failu …). Ja esat to izdarījis, pārejiet pie Raspberry Pi restartēšanas.

Tagad aizveriet (un saglabājiet) šo failu. Ja sekojat nano paraugam, nospiediet CTRL+X un pēc uzvednes ierakstiet Y.

Tā kā mēs tikko teicām mosquitto, ka lietotājiem, kuri mēģina izmantot MQTT brokeri, ir jāautentificē, mums tagad jāpasaka mosquitto, kāds ir lietotājvārds un parole! Tātad, ierakstiet šādu komandu - aizstājot lietotājvārdu ar vēlamo lietotājvārdu - pēc tam ievadiet paroli, kuru vēlaties, kad tas tiek prasīts (Piezīme: ja, rediģējot konfigurācijas failu, esat norādījis citu ceļu paroli_faila vietā, nomainiet zemāk esošo ceļu ar vienu, kuru izmantojāt).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile lietotājvārds

Tā kā mēs tikko mainījām moskītu konfigurācijas failu, mums vajadzētu atsāknēt Raspberry Pi.

sudo atsāknēšana

Kad Raspberry Pi ir pabeidzis pārstartēšanu, jums vajadzētu būt pilnībā funkcionējošam MQTT brokerim! Tālāk mēs mēģināsim ar to mijiedarboties, izmantojot vairākas dažādas ierīces/metodes!

3. darbība: brokera pārbaude

Brokeru pārbaude
Brokeru pārbaude

Kad esat instalējis odu Raspberry Pi, varat veikt ātru pārbaudi - tikai, lai pārliecinātos, ka viss darbojas pareizi. Šim nolūkam komandrindā varam izmantot divas komandas. mosquitto_pub un mosquitto_sub. Šajā solī es jums norādīšu, kā izmantot katru no tiem, lai pārbaudītu mūsu brokeri.

Lai pārbaudītu starpnieku, jums būs jāatver divi komandrindas logi. Ja izmantojat Putty vai citu SSH klientu, tas ir tik vienkārši, kā atvērt citu SSH logu un pieteikties kā parasti. Ja piekļūstat savam Pi no UNIX termināļa, tas ir tieši tas pats. Ja Raspberry Pi izmantojat tieši, jums būs jāatver divi termināļa logi GUI režīmā (komandu startx var izmantot, lai palaistu GUI).

Tagad, kad esat atvēris divus logus, mēs varam sākt testēšanu. Vienā no diviem termināļiem ierakstiet šādu komandu, aizstājot lietotājvārdu un paroli ar tiem, kurus iestatījāt iepriekšējā solī.

mosquitto_sub -d -u lietotājvārds -P parole -t tests

Ja iepriekšējā solī esat nolēmis neiestatīt lietotājvārdu un paroli, tad turpmāk komandās ignorējiet karodziņus -u un -P. Tātad, piemēram, komanda mosquitto_sub tagad būtu:

mosquitto_sub -d -t tests

Komanda mosquitto_sub abonēs tēmu un termināļa logā parādīs visus ziņojumus, kas tiek nosūtīti uz norādīto tēmu. Šeit -d nozīmē atkļūdošanas režīmu, tāpēc visi ziņojumi un darbības tiks izvadītas ekrānā. -u un -P jābūt pašsaprotamiem. Visbeidzot, -t ir tēmas nosaukums, kuru mēs vēlamies abonēt - šajā gadījumā "tests".

Pēc tam otrā termināļa logā mēs mēģināsim publicēt ziņojumu tēmai "tests". Ierakstiet šo, atceroties vēlreiz mainīt lietotājvārdu un paroli:

mosquitto_pub -d -u lietotājvārds -P parole -t tests -m "Sveika, pasaule!"

Nospiežot taustiņu Enter, jums vajadzētu redzēt ziņojumu "Sveika, pasaule!" parādās pirmajā termināļa logā, kuru izmantojām (abonēšanai). Ja tas tā ir, jūs esat gatavs sākt strādāt pie ESP8266!

4. darbība. ESP8266 (Adafruit HUZZAH) iestatīšana

ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)
ESP8266 iestatīšana (Adafruit HUZZAH)

Šis solis, ja tas attiecas uz Adafruit HUZZAH (jo es to izmantoju, lai pabeigtu šo projektu). Ja izmantojat citu Arduino / ESP8266 ierīci, iespējams, vēlēsities izlaist šo darbību. Tomēr es ieteiktu jums to izlasīt, tikai gadījumā, ja šeit ir kāda informācija, kas jums varētu būt svarīga.

Šim projektam es programmēšu HUZZAH ar Arduino programmatūru. Tātad, ja vēl neesat to izdarījis, noteikti instalējiet Arduino programmatūru (jaunāku par 1.6.4). Jūs to varat lejupielādēt šeit.

Kad esat instalējis Arduino programmatūru, atveriet to un dodieties uz Fails-> Preferences. Šeit jums vajadzētu redzēt (loga apakšdaļā) tekstlodziņu ar uzrakstu: "Papildu dēļu pārvaldnieka vietrāži URL". Šajā tekstlodziņā nokopējiet un ielīmējiet šo saiti:

arduino.esp8266.com/stable/package_esp8266com_index.json

Noklikšķiniet uz Labi, lai saglabātu izmaiņas. Tagad atveriet valdes pārvaldnieku (Rīki-> Padome-> Valdes pārvaldnieks) un meklējiet ESP8266. Instalējiet kopienas pakotni esp8266 by ESP8266. Restartējiet Arduino programmatūru.

Tagad, pirms mēs varam programmēt dēli, mums jāizvēlas dažas dažādas iespējas. Izvēlnē Tools (Rīki) atlasiet Adafruit HUZZAH ESP8266 Board, 80 MHz CPU frekvencei (varat izmantot 160 MHz, ja vēlaties to pārspīlēt, bet pagaidām es izmantošu 80 MHz), 4M (3M SPIFFS) zibspuldzes izmēram un 115200 augšupielādes ātrumam. Noteikti atlasiet arī izmantoto COM portu (tas būs atkarīgs no iestatījumiem).

Pirms koda augšupielādes jums jāpārliecinās, vai HUZZAH ir sāknēšanas ielādes režīmā. Lai to iespējotu, turiet nospiestu tāfeles pogu, kas apzīmēta ar GPIO0, un, kamēr tā tiek turēta, turiet nospiestu arī pogu Atiestatīt. Pēc tam atlaidiet pogu Atiestatīt un pēc tam GPIO0. Ja esat to izdarījis pareizi, sarkanā gaismas diode, kas iedegās, nospiežot GPIO0, tagad būtu vāji iedegta.

Lai augšupielādētu kodu mikrokontrollerī, vispirms pārliecinieties, vai HUZZAH ir bootloader režīmā, pēc tam vienkārši noklikšķiniet uz augšupielādes pogas Arduino IDE.

Ja jums rodas problēmas ar HUZZAH iestatīšanu, papildu informāciju varat atrast pašas Adafruit apmācībā.

5. darbība: ESP8266 programmēšana

ESP8266 programmēšana
ESP8266 programmēšana

Tagad mēs sāksim programmēt ESP8266, bet pirms mēs varam sākt, jums būs jāinstalē šādas bibliotēkas Arduino bibliotēkas pārvaldniekā (Skice-> Iekļaut bibliotēkas-> Pārvaldīt bibliotēkas)

  • Atlekšana2
  • PubSubClient

Kad esat instalējis šīs bibliotēkas, varēsit palaist kodu, kuru esmu iekļāvis šajā pamācībā (MQTT_Publish.zip). Es noteikti to komentēju, lai jūs varētu saprast, ko katra sadaļa dara, un tam, cerams, vajadzētu ļaut jums to pielāgot savām vajadzībām.

Neaizmirstiet mainīt konstantes koda augšdaļā, lai jūsu ESP8266 varētu izveidot savienojumu ar jūsu WiFi tīklu un jūsu MQTT brokeri (Raspberry Pi).

Ja esat nolēmis nenoteikt lietotājvārdu un paroli MQTT brokerim, tā vietā lejupielādējiet failu MQTT_PublishNoPassword.zip.

6. darbība: instalējiet Python klientu (paho-mqtt)

Python klienta (paho-mqtt) instalēšana
Python klienta (paho-mqtt) instalēšana

Par laimi, šis solis ir ļoti vienkāršs! Lai instalētu mosquitto python klientu, jums vienkārši jāievada komandrindā (Linux/Mac) vai pat komandu uzvednē (Windows).

pip instalēt paho-mqtt

Piezīme. Windows komandu uzvednē var rasties problēma, izpildot komandu pip, ja, instalējot Python, nenorādījāt, ka vēlaties instalēt pip un pievienot Python mainīgajam PATH. Ir vairāki veidi, kā to labot, bet es domāju, ka vienkāršākais veids ir vienkārši pārinstalēt Python. Ja rodas šaubas - dodiet to google!

7. darbība: Python klients - abonēšana

Python klients - abonēšana
Python klients - abonēšana

Šajā solī mēs iestatīsim Python skriptu (vai nu pašā Raspberry Pi, vai citā datorā, kas savienots ar tīklu), lai apstrādātu visus ziņojumus, kurus ESP8266 sūta (publicē) uz tēmu MQTT.

Tālāk esmu iekļāvis python kodu (PythonMQTT_Subscribe.py), kas ir komentēts, lai palīdzētu jums saprast notiekošo, taču arī šeit es paskaidrošu dažas galvenās funkcijas.

Ja iepriekš neesat iestatījis lietotājvārdu un paroli MQTT savienojumam, tā vietā lejupielādējiet failu PythonMQTT_SubscribeNoPassword.py.

8. darbība. Saziņa starp ESP8266 ierīcēm

Saziņa starp ESP8266 ierīcēm
Saziņa starp ESP8266 ierīcēm

Piemēram, ja vēlaties izveidot IoT tīklu, iespējams, vēlēsities sazināties starp ESP8266 ierīcēm. Par laimi, tas nav daudz sarežģītāks par iepriekš rakstīto kodu, tomēr ir dažas ievērojamas izmaiņas.

Lai viens ESP varētu nosūtīt datus citam, pirmajam ESP būs jāpublicē tēma, bet otrajam ESP būs jāabonē šī tēma. Šī iestatīšana ļaus vienvirziena sarunai - no ESP (1) līdz ESP (2). Ja mēs vēlamies, lai ESP (2) atgrieztos ESP (1), mēs varam izveidot jaunu tēmu, kuru ESP (2) publicēs, un ESP (1) abonēs. Par laimi, mums var būt vairāki abonenti par vienu tēmu, tādēļ, ja vēlaties nosūtīt datus uz vairākām sistēmām, jums būs nepieciešama tikai viena tēma (kuru viņi visi abonē, izņemot ierīci, kas sūta datus). publicēt).

Ja jums nepieciešama palīdzība, lai noskaidrotu, kas katrai ierīcei jādara, domājiet par sistēmu kā par cilvēku istabu. Ja tiek publicēts ESP (1), jūs varat iedomāties šo ierīci kā “skaļruni”, un visas ierīces, kas abonē šo tēmu, šajā piemērā ir “klausītāji”.

Tālāk esmu iekļāvis koda piemēru, kas parāda, kā ESP8266 var abonēt tēmu un klausīties noteiktus ziņojumus - 1 un 0. Ja tiek saņemts 1, tiek ieslēgta iebūvētā gaismas diode (ierīcei HUZZAH - GPIO 0).. Ja tiek saņemts 0, šī gaismas diode tiek izslēgta.

Ja vēlaties apstrādāt sarežģītākus datus, tas jādara funkcijā ReceivedMessage (sk. Kodu).

Saviem projektiem, ja jums ir nepieciešams gan nosūtīt, gan saņemt datus, šajā posmā iekļautajā kodā varat iekļaut publicēšanas funkciju no iepriekšējā piemēra. Tas jārīkojas galvenajā Arduino cilpas () funkcijā.

Atcerieties mainīt mainīgos koda augšdaļā, lai tie atbilstu jūsu tīklam!

Ieteicams: