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, Lipanj
Anonim
Kako koristiti MQTT s Raspberry Pi i ESP8266
Kako koristiti MQTT s Raspberry Pi i ESP8266

U ovom Instructable -u objasnit ću što je MQTT protokol i kako se koristi za komunikaciju između uređaja. Zatim ću vam, kao praktičnu demonstraciju, pokazati kako postaviti jednostavan sustav s dva klijenta, gdje će modul ESP8266 poslati poruku u Python program kada se pritisne gumb. Konkretno, za ovaj projekt koristim Adafruit HUZZAH modul, Raspberry Pi i stolno računalo. Raspberry Pi će djelovati kao MQTT posrednik, a Python klijent će se pokretati s zasebnog stolnog računala (izborno, jer bi se to moglo pokrenuti na Raspberry Pi).

Da biste slijedili ovaj Instructable, morat ćete imati osnovno znanje o elektronici i načinu korištenja softvera Arduino. Također biste trebali biti upoznati s korištenjem sučelja naredbenog retka (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 izraditi vlastite IoT projekte!

Potrebni dijelovi

  • 1 x Raspberry Pi, spojen 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 Tipkalo
  • 1 x 10k Ohm otpornik (smeđa-crno-naranč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 se nisam mogao zamisliti kako kodirati uređaje za njegovu upotrebu. To je bilo zato što nisam znao/razumio što se zapravo događalo da uzmem moj "Hello, World!" 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, a također i ojačao vlastito razumijevanje toga!

Korak 1: Što je MQTT?

Što je MQTT?
Što je MQTT?

MQTT ili MQ telemetrijski transport protokol je za razmjenu poruka koji omogućuje međusobno komuniciranje više uređaja. Trenutno je popularan protokol za Internet stvari, iako se koristio u druge svrhe - na primjer, Facebook Messenger. Zanimljivo je da je MQTT izumljen 1999. - š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 se poruka šalje MQTT posredniku, 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 stvarati Python skriptu koja će se pretplatiti na istu temu, putem Raspberry Pi -ja 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 sustava 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 ažuriranje

sudo apt-get nadogradnja

Nakon što to učinite, instalirajte Mosquitto, 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 mosquitto brokera 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, koristit ću nano tako da možete pratiti:

sudo nano /etc/mosquitto/mosquitto.conf

Pri dnu ove datoteke trebali biste vidjeti redak:

include_dir /etc/mosquitto/conf.d

Izbrišite ovaj redak. Dodajte sljedeće retke na dno datoteke.

allow_anonymous false

lozinka_datoteka/etc/mosquitto/pwfile slušatelj 1883

Upisujući te retke, rekli smo Mosquitto -u da ne želimo da se bilo tko povezuje s našim posrednikom koji ne navede valjano korisničko ime i lozinku (počet ćemo ih postaviti u sekundi) 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 prva dva retka koja 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 slijedite zajedno s primjerom nano, 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 htjeli kada se to od vas zatraži (Napomena: ako ste prilikom uređivanja konfiguracijske datoteke naveli drugu putanju datoteke datoteke lozinke, donju putanju zamijenite oznakom onaj koji 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 ponovno podizanje sustava

Nakon što Raspberry Pi završi ponovno podizanje sustava, 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 posrednika

Testiranje posrednika
Testiranje posrednika

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 naredbenom retku. mosquitto_pub i mosquitto_sub. U ovom koraku vodit ću vas kroz korištenje svakog od ovih za testiranje našeg posrednika.

Da biste testirali posrednika, morat ćete otvoriti dva prozora naredbenog retka. Ako koristite Putty ili neki drugi SSH klijent, ovo je jednostavno 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 započeti s testiranjem. U jedan od dva terminala upišite sljedeću naredbu, zamijenivš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 u prethodnom koraku odlučili ne postaviti korisničko ime i zaporku, od sada zanemarite zastavice -u i -P u naredbama. Dakle, kao primjer, naredba mosquitto_sub sada bi bila:

komarac_sub -d -t test

Naredba mosquitto_sub pretplatit će se na temu i u prozoru terminala prikazati sve poruke poslane na određenu temu. Ovdje -d znači način uklanjanja pogrešaka, pa će se sve poruke i aktivnosti ispisivati na zaslonu. -u i -P trebaju 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, savjetujem 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 softverom Arduino. Dakle, ako već niste, svakako instalirajte Arduino softver (noviji od 1.6.4). Ovdje ga možete preuzeti.

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-> Ploča-> Upravitelj odbora) i potražite ESP8266. Instalirajte esp8266 putem 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 je želite overclockati, ali zasad ću koristiti 80 MHz), 4M (3M SPIFFS) za veličinu bljeskalice i 115200 za brzinu prijenosa. Također, svakako odaberite COM port koji koristite (to ovisi o vašim postavkama).

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

Da biste učitali kôd na mikrokontroler, najprije provjerite je li HUZZAH u načinu pokretanja pokretačkog programa, 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 knjižnice u upravitelja Arduino knjižnice (Sketch-> Include Libraries-> Manage Libraries)

  • Odskočiti 2
  • PubSubClient

Nakon što instalirate te knjižnice, 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 što 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 posrednika MQTT, umjesto toga preuzmite 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 naredbeni redak (Linux/Mac) ili čak naredbeni redak (Windows).

pip install paho-mqtt

Napomena: Windows naredbeni redak mogao bi imati problema s pokretanjem naredbe pip ako niste naveli da želite instalirati pip i dodati python u vašu varijablu PATH kada ste instalirali Python. Postoji nekoliko načina da se to popravi, 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 namjestit ćemo Python skriptu (bilo na samom Raspberry Pi -u ili na drugom računalu 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 razumjeti što se događa, ali ovdje ću objasniti neke od glavnih značajki.

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

Korak 8: Komunikacija između uređaja ESP8266

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 uređaja ESP8266. Srećom, ovo nije mnogo složenije od koda koji smo već napisali, međutim, postoji nekoliko značajnih promjena.

Da bi jedan ESP slao podatke drugom, prvi ESP morat će objaviti temu, a drugi ESP će se morati pretplatiti na tu temu. Ovo postavljanje omogućit će 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 sustava, 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ć pri utvrđivanju što svaki uređaj treba učiniti, razmislite o sustavu 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šatelji" 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) uključuje se. Ako se primi 0, ova LED dioda se isključuje.

Ako želite obraditi složenije podatke, to bi trebalo biti učinjeno 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čeni: