Sadržaj:

Kako koristiti MQTT s Raspberry Pi i ESP8266: 8 koraka (sa slikama)
Kako koristiti MQTT s Raspberry Pi i ESP8266: 8 koraka (sa slikama)

Video: Kako koristiti MQTT s Raspberry Pi i ESP8266: 8 koraka (sa slikama)

Video: Kako koristiti MQTT s Raspberry Pi i ESP8266: 8 koraka (sa slikama)
Video: Домашняя автоматизация своими руками — ESP32, Raspberry Pi, Node Red, MQTT, Умный дом || Проект Интернета вещей. Часть 1. 2024, Jun
Anonim
Kako koristiti MQTT s Raspberry Pi i ESP8266
Kako koristiti MQTT s Raspberry Pi i ESP8266

U ovom Instructable -u ću objasniti šta je MQTT protokol i kako se koristi za komunikaciju između uređaja. Zatim ću vam, kao praktičnu demonstraciju, pokazati kako postaviti jednostavan sistem sa dva klijenta, gdje će modul ESP8266 poslati poruku u Python program kada se pritisne dugme. Konkretno, za ovaj projekat koristim Adafruit HUZZAH modul, Raspberry Pi i desktop računar. Raspberry Pi će djelovati kao MQTT posrednik, a Python klijent će se pokretati sa zasebnog desktop računara (opcionalno, jer bi se to moglo pokrenuti na Raspberry Pi).

Da biste pratili ovaj Instructable, morat ćete imati osnovno znanje o elektronici i načinu korištenja Arduino softvera. Također biste trebali biti upoznati s korištenjem sučelja naredbene linije (za Raspberry Pi). Nadajmo se da ćete, nakon što ste stekli znanje o tome što je MQTT i kako ga koristiti u osnovnom scenariju, moći stvarati vlastite IoT projekte!

Potrebni dijelovi

  • 1 x Raspberry Pi, povezan na lokalnu mrežu (pokreće Jessie)
  • 1 x ESP8266 modul (Adafruit HUZZAH)
  • 1 x Oglasna ploča
  • 3 x kratkospojne žice (muško-muški)
  • 1 x Taster
  • 1 x 10k Ohm otpornik (smeđa-crno-narandžasta oznaka boje)

Napravio sam ovaj Instructable jer me MQTT oduvijek zanimao kao protokol i postoji mnogo različitih načina na koje se može koristiti. Međutim, nikako nisam mogao razmišljati o tome kako kodirati uređaje za upotrebu. To je bilo zato što nisam znala/razumjela šta se zapravo dešava da dobijem moj "Zdravo, svijete!" s uređaja A i poslati ga na uređaj B. Stoga sam odlučio napisati ovaj Instructable kako bih vas (nadam se) naučio kako radi, te kako bih ojačao vlastito razumijevanje toga!

Korak 1: Šta je MQTT?

Šta je MQTT?
Šta je MQTT?

MQTT ili MQ telemetrijski transport je protokol za razmjenu poruka koji omogućava više uređaja da međusobno razgovaraju. Trenutno je popularan protokol za Internet stvari, iako se koristio u druge svrhe - na primjer, Facebook Messenger. Zanimljivo je da je MQTT izumljen 1999. godine - što znači da je star koliko i ja!

MQTT se temelji na ideji da uređaji mogu objavljivati teme ili se pretplatiti na njih. Tako, na primjer. Ako je uređaj #1 zabilježio temperaturu s jednog od svojih senzora, može objaviti poruku koja sadrži vrijednost temperature koju je snimio, temi (npr. "Temperatura"). Ova poruka se šalje MQTT brokeru, kojeg možete zamisliti kao prekidač/usmjerivač na lokalnoj mreži. Nakon što MQTT posrednik primi poruku, poslat će je na sve uređaje (u ovom slučaju, uređaj #2) koji su pretplaćeni na istu temu.

U ovom projektu ćemo objavljivati temu pomoću ESP8266 i kreirati Python skriptu koja će se pretplatiti na istu temu, putem Raspberry Pi -a koji će djelovati kao MQTT posrednik. Odlična stvar kod MQTT -a je što je lagan, pa je savršen za rad na malim mikrokontrolerima poput ESP8266, ali je i široko dostupan - tako da ga možemo pokrenuti i na Python skripti.

Nadamo se da ćete na kraju ovog projekta razumjeti što je MQTT i kako ga koristiti u budućnosti za vlastite projekte.

Korak 2: Instaliranje MQTT brokera na Raspberry Pi

Instaliranje MQTT brokera na Raspberry Pi
Instaliranje MQTT brokera na Raspberry Pi
Instaliranje MQTT brokera na Raspberry Pi
Instaliranje MQTT brokera na Raspberry Pi
Instaliranje MQTT brokera na Raspberry Pi
Instaliranje MQTT brokera na Raspberry Pi

Za postavljanje našeg MQTT sistema potreban nam je posrednik, kako je objašnjeno u prethodnom koraku. Za Raspberry Pi koristit ćemo "Mosquitto" MQTT brokera. Prije nego što ovo instaliramo, uvijek je najbolje ažurirati naš Raspberry Pi.

sudo apt-get update

sudo apt-get nadogradnja

Nakon što to učinite, instalirajte komare, a zatim pakete za klijente komaraca.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Kad završite s instaliranjem ova dva paketa, morat ćemo konfigurirati posrednika. Konfiguracijska datoteka posrednika komaraca nalazi se na /etc/mosquitto/mosquitto.conf, pa je otvorite svojim omiljenim uređivačem teksta. Ako nemate omiljeni uređivač teksta ili ne znate koristiti bilo koji od uređivača naredbenog retka, ja ću koristiti nano tako da možete pratiti:

sudo nano /etc/mosquitto/mosquitto.conf

Na dnu ove datoteke trebali biste vidjeti redak:

include_dir /etc/mosquitto/conf.d

Izbrišite ovu liniju. Dodajte sljedeće redove na dno datoteke.

allow_anonymous false

lozinka_datoteka/etc/mosquitto/pwfile slušalac 1883

Ukucavanjem ovih redova rekli smo Mosquitto -u da ne želimo da se bilo ko povezuje s našim posrednikom koji ne navede valjano korisničko ime i lozinku (mi ćemo ih postaviti za sekundu) i da želimo da se komarac poslušajte poruke na portu broj 1883.

Ako ne želite da posrednik zahtijeva korisničko ime i lozinku, nemojte uključivati prve dvije linije koje smo dodali (tj. Allow_anonymous… i password_file …). Ako ste to učinili, preskočite na ponovno podizanje sustava Raspberry Pi.

Sada zatvorite (i spremite) tu datoteku. Ako pratite nano primjer, pritisnite CTRL+X i upišite Y kada se to od vas zatraži.

Budući da smo upravo rekli Mosquitto -u da se korisnici koji pokušavaju koristiti MQTT brokera moraju provjeriti autentičnost, sada moramo Mosquittu reći koje su korisničko ime i lozinka! Dakle, upišite sljedeću naredbu - zamjenjujući korisničko ime s korisničkim imenom koje želite - zatim unesite lozinku koju biste željeli kada se to od vas zatraži (Napomena: ako ste prilikom uređivanja konfiguracijske datoteke naveli drugu putanju datoteke datoteke lozinke, donju putanju zamijenite sa koju ste koristili).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile korisničko ime

Kako smo upravo promijenili mosquitto konfiguracijsku datoteku, trebali bismo ponovno pokrenuti Raspberry Pi.

sudo reboot

Kada Raspberry Pi završi ponovno pokretanje, trebali biste imati potpuno funkcionalnog posrednika MQTT! Zatim ćemo pokušati komunicirati s njim, koristeći niz različitih uređaja/metoda!

Korak 3: Testiranje brokera

Testiranje brokera
Testiranje brokera

Nakon što instalirate komarac na Raspberry Pi, možete ga brzo testirati - samo kako biste bili sigurni da sve radi ispravno. U tu svrhu postoje dvije naredbe koje možemo koristiti u komandnoj liniji. mosquitto_pub i mosquitto_sub. U ovom koraku ću vas voditi kroz korištenje svakog od ovih za testiranje našeg posrednika.

Da biste testirali posrednika, morate otvoriti dva prozora komandne linije. Ako koristite Putty ili neki drugi SSH klijent, ovo je jednostavno kao otvaranje drugog SSH prozora i prijava kao i obično. Ako svom Pi pristupate s UNIX terminala, to je potpuno isto. Ako izravno koristite Raspberry Pi, morat ćete otvoriti dva terminala u GUI načinu (naredba startxcan može se koristiti za pokretanje GUI -ja).

Sada kada ste otvorili dva prozora, možemo početi s testiranjem. U jedan od dva terminala upišite sljedeću naredbu, zamjenjujući korisničko ime i lozinku onima koji ste postavili u prethodnom koraku.

mosquitto_sub -d -u korisničko ime -P lozinka -t test

Ako ste odlučili da u prethodnom koraku ne postavite korisničko ime i lozinku, od sada zanemarite zastavice -u i -P u naredbama. Dakle, kao primjer, naredba mosquitto_sub sada bi bila:

mosquitto_sub -d -t test

Naredba mosquitto_sub će se pretplatiti na temu i u prozoru terminala prikazati sve poruke koje se šalju na određenu temu. Ovdje -d znači način otklanjanja grešaka, tako da će se sve poruke i aktivnosti izlaziti na ekran. -u i -P bi trebali biti jasni. Konačno, -t je naziv teme na koju se želimo pretplatiti - u ovom slučaju "test".

Zatim ćemo u drugom prozoru terminala pokušati objaviti poruku na temu "test". Upišite sljedeće, sjećajući se ponovo da promijenite korisničko ime i lozinku:

mosquitto_pub -d -u korisničko ime -P lozinka -t test -m "Zdravo, Svijete!"

Kada pritisnete enter, trebali biste vidjeti svoju poruku "Zdravo, svijete!" pojavljuju se u prvom prozoru terminala koji smo koristili (za pretplatu). U tom slučaju, spremni ste za početak rada na ESP8266!

Korak 4: Postavljanje ESP8266 (Adafruit HUZZAH)

Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)
Postavljanje ESP8266 (Adafruit HUZZAH)

Ovaj korak ako je specifičan za Adafruit HUZZAH (jer to je ono što koristim za dovršetak ovog projekta). Ako koristite drugi Arduino / ESP8266 uređaj, možda ćete htjeti preskočiti ovaj korak. Međutim, savjetovao bih vam da je pročitate, samo u slučaju da ovdje postoje informacije koje bi vam mogle biti relevantne.

Za ovaj projekt ću programirati HUZZAH sa Arduino softverom. Dakle, ako već niste, svakako instalirajte Arduino softver (noviji od 1.6.4). Možete ga preuzeti ovdje.

Nakon što instalirate Arduino softver, otvorite ga i idite na Datoteka-> Postavke. Ovdje biste trebali vidjeti (pri dnu prozora) tekstualni okvir s oznakom: "Dodatni URL -ovi upravitelja ploča". U ovo tekstualno polje kopirajte i zalijepite sljedeću vezu:

arduino.esp8266.com/stable/package_esp8266com_index.json

Pritisnite U redu da biste spremili promjene. Sada otvorite Upravitelj odbora (Alati-> Board-> Upravitelj odbora) i potražite ESP8266. Instalirajte esp8266 pomoću paketa ESP8266 zajednice. Ponovo pokrenite softver Arduino.

Sada, prije nego što možemo programirati ploču, moramo odabrati nekoliko različitih opcija. U opciji izbornika Alati odaberite Adafruit HUZZAH ESP8266 za ploču, 80 MHz za frekvenciju procesora (možete koristiti 160 MHz ako želite da je overklokirate, ali zasad ću koristiti 80 MHz), 4M (3M SPIFFS) za veličinu blica i 115200 za brzinu otpremanja. Također, obavezno odaberite COM port koji koristite (to će ovisiti o vašim postavkama).

Prije nego što možete učitati bilo koji kôd, morate se uvjeriti da je HUZZAH u načinu pokretanja. Da biste to omogućili, držite pritisnuto dugme na ploči s oznakom GPIO0, a dok se ovo zadrži, pritisnite i dugme Reset. Zatim otpustite dugme Reset, a zatim GPIO0. Ako ste ovo učinili ispravno, crvena LED lampica koja se upalila kada ste pritisnuli GPIO0 trebala bi sada biti slabo osvijetljena.

Da biste učitali kôd na mikrokontroler, prvo provjerite je li HUZZAH u načinu pokretanja pokretača, a zatim jednostavno kliknite gumb za prijenos u Arduino IDE -u.

Ako imate problema s postavljanjem HUZZAH -a, dodatne informacije možete pronaći u vlastitom vodiču za Adafruit.

Korak 5: Programiranje ESP8266

Programiranje ESP8266
Programiranje ESP8266

Sada ćemo početi programirati ESP8266, ali prije nego što počnemo, morat ćete instalirati sljedeće biblioteke u upravitelju Arduino biblioteke (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

Nakon što instalirate te biblioteke, moći ćete pokrenuti kôd koji sam uključio u ovaj Instructable (MQTT_Publish.zip). Pobrinuo sam se da to komentiram kako biste mogli razumjeti šta svaki odjeljak radi, a to bi vam, nadamo se, trebalo omogućiti da ga prilagodite svojim potrebama.

Ne zaboravite promijeniti konstante na vrhu koda tako da se vaš ESP8266 može povezati s vašom WiFi mrežom i vašim MQTT posrednikom (Raspberry Pi).

Ako ste odlučili ne postaviti korisničko ime i lozinku za MQTT brokera, preuzmite umjesto toga datoteku MQTT_PublishNoPassword.zip.

Korak 6: Instaliranje Python klijenta (paho-mqtt)

Instaliranje Python klijenta (paho-mqtt)
Instaliranje Python klijenta (paho-mqtt)

Srećom, ovaj korak je vrlo jednostavan! Da biste instalirali mosquitto python klijent, samo trebate unijeti sljedeće u naredbenu liniju (Linux/Mac) ili čak u naredbeni redak (Windows).

pip install paho-mqtt

Napomena: Windows naredbeni redak može imati problema s pokretanjem naredbe pip ako niste naveli da želite da se pip instalira i da se python doda vašoj varijabli PATH kada ste instalirali Python. Postoji nekoliko načina da se to riješi, ali mislim da je ponovna instalacija Pythona najjednostavniji način. Ako sumnjate - dajte google!

Korak 7: Python klijent - pretplata

Python klijent - pretplata
Python klijent - pretplata

U ovom koraku ćemo postaviti Python skriptu (bilo na samom Raspberry Pi -u ili na drugom računaru spojenom na mrežu) za obradu svih poruka koje šalje (objavljuje) ESP8266 na temu MQTT.

U nastavku sam uključio python kôd (PythonMQTT_Subscribe.py), koji je komentiran kako bi vam pomogao da razumijete šta se dešava, ali ću i ovdje objasniti neke od glavnih funkcija.

Ako ranije niste postavili korisničko ime i lozinku za MQTT vezu, preuzmite datoteku PythonMQTT_SubscribeNoPassword.py.

Korak 8: Komunikacija između ESP8266 uređaja

Komunikacija između uređaja ESP8266
Komunikacija između uređaja ESP8266

Na primjer, ako želite postaviti IoT mrežu, možda ćete htjeti komunicirati između ESP8266 uređaja. Srećom, ovo nije mnogo složenije od koda koji smo ranije napisali, međutim, postoji nekoliko značajnih promjena.

Da bi jedan ESP slao podatke drugom, prvi ESP će morati objaviti temu, a drugi ESP će se morati pretplatiti na tu temu. Ovo podešavanje će omogućiti jednosmjerni razgovor - ESP (1) do ESP (2). Ako želimo da ESP (2) razgovara s ESP -om (1), možemo stvoriti novu temu, koju će ESP (2) objavljivati, a ESP (1) se pretplatiti. Srećom, možemo imati više pretplatnika na istu temu, pa ako želite slati podatke u više sistema, trebat će vam samo jedna tema (na koju se svi pretplaćuju, osim uređaja koji šalje podatke, jer će to objavljivati).

Ako vam je potrebna pomoć da shvatite šta svaki uređaj treba da uradi, razmislite o sistemu kao prostoriji ljudi. Ako ESP (1) objavljuje, možete zamisliti ovaj uređaj kao "zvučnik", a svi uređaji koji se pretplate na temu su "slušaoci" u ovom primjeru.

Dolje sam uključio neki primjer koda koji pokazuje kako se ESP8266 može pretplatiti na temu i slušati određene poruke - 1 i 0. Ako se primi 1, LED na ploči (za HUZZAH - GPIO 0) se uključuje. Ako se primi 0, ova LED dioda se isključuje.

Ako želite obraditi složenije podatke, to treba učiniti u funkciji ReceivedMessage (vidi kod).

Za vaše vlastite projekte, ako trebate slati i primati podatke, možete ugraditi funkciju objavljivanja iz prethodnog primjera u kôd uključen u ovaj korak. To bi trebalo biti obrađeno u glavnoj funkciji Arduino loop ().

Ne zaboravite promijeniti varijable na vrhu koda tako da odgovaraju vašoj mreži!

Preporučuje se: