Indholdsfortegnelse:

Sådan bruges MQTT med Raspberry Pi og ESP8266: 8 trin (med billeder)
Sådan bruges MQTT med Raspberry Pi og ESP8266: 8 trin (med billeder)

Video: Sådan bruges MQTT med Raspberry Pi og ESP8266: 8 trin (med billeder)

Video: Sådan bruges MQTT med Raspberry Pi og ESP8266: 8 trin (med billeder)
Video: Sådan får du adgang til hjemmenetværket fra internettet med Raspberry Pi og Zerotier 2024, Juni
Anonim
Sådan bruges MQTT med Raspberry Pi og ESP8266
Sådan bruges MQTT med Raspberry Pi og ESP8266

I denne Instructable vil jeg forklare, hvad MQTT -protokollen er, og hvordan den bruges til at kommunikere mellem enheder. Derefter vil jeg som en praktisk demonstration vise dig, hvordan du konfigurerer et simpelt to -klientsystem, hvor et ESP8266 -modul sender en besked til et Python -program, når der trykkes på en knap. Specifikt bruger jeg et Adafruit HUZZAH -modul til dette projekt, en Raspberry Pi og en stationær computer. Raspberry Pi fungerer som MQTT -mægler, og Python -klienten køres fra en separat stationær computer (valgfrit, da dette kan køre på Raspberry Pi).

For at følge denne instruks skal du have en vis grundlæggende viden om elektronik, og hvordan du bruger Arduino -softwaren. Du bør også være fortrolig med at bruge en kommandolinjegrænseflade (til Raspberry Pi). Forhåbentlig, når du har fået viden om, hvad MQTT er, og hvordan du bruger det i et grundlæggende scenario, vil du være i stand til at oprette dine egne IoT -projekter!

Nødvendige dele

  • 1 x Raspberry Pi, forbundet til et lokalt netværk (kører Jessie)
  • 1 x ESP8266 -modul (Adafruit HUZZAH)
  • 1 x brødbræt
  • 3 x Jumper Wires (Mand-til-Mand)
  • 1 x trykknap
  • 1 x 10k Ohm modstand (brun-sort-orange farvekode)

Jeg har oprettet denne Instructable, da MQTT altid har interesseret mig som en protokol, og der er mange forskellige måder, den kan bruges på. Men jeg kunne ikke synes at få hovedet omkring, hvordan jeg koder enheder til at bruge det. Dette var fordi jeg ikke vidste/forstod, hvad der egentlig foregik med min "Hej verden!" fra enhed A og send den til enhed B. Derfor besluttede jeg at skrive denne Instructable for (forhåbentlig) at lære dig, hvordan den fungerer, og også forstærke min egen forståelse af den!

Trin 1: Hvad er MQTT?

Hvad er MQTT?
Hvad er MQTT?

MQTT, eller MQ Telemetry Transport, er en meddelelsesprotokol, der tillader flere enheder at tale med hinanden. I øjeblikket er det en populær protokol for tingenes internet, selvom den er blevet brugt til andre formål - for eksempel Facebook Messenger. Interessant nok blev MQTT opfundet i 1999 - hvilket betyder, at den er lige så gammel som mig!

MQTT er baseret på ideen om, at enheder kan publicere eller abonnere på emner. Så f.eks. Hvis enhed nr. 1 har registreret temperaturen fra en af dens sensorer, kan den offentliggøre en meddelelse, der indeholder den temperaturværdi, den har registreret, til et emne (f.eks. "Temperatur"). Denne besked sendes til en MQTT -mægler, som du kan tænke på som en switch/router på et lokalnetværk. Når MQTT -mægleren har modtaget meddelelsen, sender den den til alle enheder (i dette tilfælde enhed nr. 2), der abonnerer på det samme emne.

I dette projekt vil vi offentliggøre et emne ved hjælp af en ESP8266 og oprette et Python -script, der abonnerer på det samme emne, via en Raspberry Pi, der fungerer som MQTT -mægleren. Det gode ved MQTT er, at den er let, så den er perfekt til at køre på små mikrokontrollere, f.eks. En ESP8266, men den er også bredt tilgængelig - så vi også kan køre den på et Python -script.

Forhåbentlig vil du i slutningen af dette projekt have en forståelse af, hvad MQTT er, og hvordan du kan bruge det til dine egne projekter i fremtiden.

Trin 2: Installation af MQTT Broker på Raspberry Pi

Installation af MQTT Broker på Raspberry Pi
Installation af MQTT Broker på Raspberry Pi
Installation af MQTT Broker på Raspberry Pi
Installation af MQTT Broker på Raspberry Pi
Installation af MQTT Broker på Raspberry Pi
Installation af MQTT Broker på Raspberry Pi

For at konfigurere vores MQTT -system har vi brug for en mægler, som forklaret i det foregående trin. Til Raspberry Pi vil vi bruge "Mosquitto" MQTT -mægleren. Inden vi installerer dette, er det altid bedst at opdatere vores Raspberry Pi.

sudo apt-get opdatering

sudo apt-get opgradering

Når du har gjort dette, skal du installere myg og derefter myg-klientpakkerne.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Når du er færdig med at installere disse to pakker, skal vi konfigurere mægleren. Mosquitto -mæglerens konfigurationsfil er placeret på /etc/mosquitto/mosquitto.conf, så åbn dette med din foretrukne teksteditor. Hvis du ikke har en foretrukken tekstredigerer eller ikke ved, hvordan du bruger nogen af kommandolinjeditorerne, bruger jeg nano, så du kan følge med:

sudo nano /etc/mosquitto/mosquitto.conf

Nederst i denne fil skal du se linjen:

include_dir /etc/mosquitto/conf.d

Slet denne linje. Tilføj følgende linjer til bunden af filen.

tillad_anonym falsk

password_file/etc/mosquitto/pwfile listener 1883

Ved at skrive disse linjer har vi fortalt mosquitto, at vi ikke vil have nogen, der opretter forbindelse til vores mægler, der ikke leverer et gyldigt brugernavn og kodeord (vi sætter dem ind på et sekund), og at vi vil have myg til Lyt efter meddelelser på portnummer 1883.

Hvis du ikke vil have, at mægleren skal kræve et brugernavn og en adgangskode, skal du ikke inkludere de to første linjer, som vi tilføjede (dvs. allow_anonymous … og password_file …). Hvis du har gjort dette, skal du springe til genstart af Raspberry Pi.

Luk nu (og gem) den fil. Hvis du følger med nano -eksemplet, skal du trykke på CTRL+X og skrive Y, når du bliver bedt om det.

Fordi vi lige har fortalt myg, at brugere, der prøver at bruge MQTT -mægleren, skal godkendes, skal vi nu fortælle myg, hvad brugernavnet og adgangskoden er! Så skriv følgende kommando - erstat brugernavn med det brugernavn, du gerne vil have - indtast derefter den adgangskode, du vil have, når du bliver bedt om det (Bemærk: hvis du, når du redigerede konfigurationsfilen, angav en anden password_file -sti, skal du erstatte stien nedenfor med en du brugte).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile brugernavn

Da vi lige har ændret mygkonfigurationsfilen, bør vi genstarte Raspberry Pi.

sudo genstart

Når Raspberry Pi er færdig med at genstarte, skal du have en fuldt fungerende MQTT -mægler! Dernæst vil vi prøve at interagere med det ved hjælp af en række forskellige enheder/metoder!

Trin 3: Test af mægleren

Test af mægleren
Test af mægleren

Når du har installeret myg på Raspberry Pi, kan du give den en hurtig test - bare for at sikre, at alt fungerer korrekt. Til dette formål er der to kommandoer, som vi kan bruge på kommandolinjen. myg_pub og myg_sub. I dette trin vil jeg guide dig igennem hver af disse til at teste vores mægler.

For at teste mægleren skal du åbne to kommandolinjevinduer. Hvis du bruger Putty eller en anden SSH -klient, er dette lige så enkelt som at åbne et andet SSH -vindue og logge ind som normalt. Hvis du får adgang til din Pi fra en UNIX -terminal, er dette nøjagtig det samme. Hvis du bruger Raspberry Pi direkte, skal du åbne to terminalvinduer i GUI -tilstand (kommandoen startxcan bruges til at starte GUI).

Nu hvor du har åbnet to vinduer, kan vi komme i gang med testen. I en af de to terminaler skal du skrive følgende kommando og erstatte brugernavn og adgangskode med dem, du konfigurerede i det foregående trin.

mosquitto_sub -d -u brugernavn -P password -t test

Hvis du besluttede ikke at indstille et brugernavn og en adgangskode i det foregående trin, skal du fra nu af ignorere flag -u og -P i kommandoerne. Så som et eksempel ville kommandoen mosquitto_sub nu være:

myg_sub -d -t test

Kommandoen mosquitto_sub abonnerer på et emne og viser alle meddelelser, der sendes til det angivne emne i terminalvinduet. Her betyder -d fejlretningstilstand, så alle meddelelser og aktivitet udsendes på skærmen. -u og -P skal være selvforklarende. Endelig er -t navnet på det emne, vi ønsker at abonnere på - i dette tilfælde "test".

I det andet terminalvindue prøver vi derefter at offentliggøre en besked til emnet "test". Indtast følgende, husk igen for at ændre brugernavn og adgangskode:

mosquitto_pub -d -u brugernavn -P password -t test -m "Hej verden!"

Når du trykker på enter, skal du se din meddelelse "Hej verden!" vises i det første terminalvindue, vi brugte (til at abonnere). Hvis dette er tilfældet, er du klar til at begynde at arbejde på ESP8266!

Trin 4: Opsætning af ESP8266 (Adafruit HUZZAH)

Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)
Opsætning af ESP8266 (Adafruit HUZZAH)

Dette trin er specifikt for Adafruit HUZZAH (da det er det, jeg bruger til at fuldføre dette projekt). Hvis du bruger en anden Arduino / ESP8266 -enhed, kan du springe dette trin over. Jeg vil dog råde dig til at skumme den, bare hvis der er oplysninger her, der kan være relevante for dig.

Til dette projekt skal jeg programmere HUZZAH med Arduino -softwaren. Så hvis du ikke allerede har gjort det, skal du sørge for at installere Arduino -softwaren (nyere end 1.6.4). Du kan downloade den her.

Når du har installeret Arduino-softwaren, skal du åbne den og navigere til File-> Preferences. Her skal du se (nær bunden af vinduet) en tekstboks med etiketten: "Yderligere Boards Manager -webadresser". I dette tekstfelt skal du kopiere og indsætte følgende link:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klik på OK for at gemme dine ændringer. Åbn nu Board Manager (Værktøjer-> Board-> Board Manager) og søg efter ESP8266. Installer esp8266 by ESP8266 Community -pakken. Genstart Arduino -softwaren.

Nu, før vi kan programmere tavlen, skal vi vælge et par forskellige muligheder. I menuen Værktøjer vælger du Adafruit HUZZAH ESP8266 til Board, 80 MHz til CPU -frekvensen (du kan bruge 160 MHz, hvis du vil overklokke det, men i øjeblikket vil jeg bruge 80 MHz), 4M (3M SPIFFS) for Flash -størrelsen og 115200 for uploadhastigheden. Sørg også for at vælge den COM -port, du bruger (dette afhænger af din opsætning).

Inden du kan uploade nogen kode, skal du sørge for, at HUZZAH er i bootloader -tilstand. For at aktivere dette skal du holde knappen nede på tavlen markeret GPIO0, og mens denne holdes nede, skal du også holde nulstillingsknappen nede. Slip derefter knappen Nulstil, og derefter GPIO0. Hvis du har gjort dette korrekt, skal den røde LED, der tændte, da du trykkede på GPIO0, nu være svagt oplyst.

For at uploade kode til mikrokontrolleren skal du først sikre dig, at HUZZAH er i bootloader -tilstand, og derefter blot klikke på upload -knappen i Arduino IDE.

Hvis du har problemer med at konfigurere HUZZAH, kan du finde yderligere oplysninger i Adafruits egen vejledning.

Trin 5: Programmering af ESP8266

Programmering af ESP8266
Programmering af ESP8266

Nu begynder vi at programmere ESP8266, men før vi kan starte, skal du installere følgende biblioteker i Arduino Library manager (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

Når du har installeret disse biblioteker, vil du kunne køre den kode, jeg har inkluderet i denne Instructable (MQTT_Publish.zip). Jeg har sørget for at kommentere det, så du kan forstå, hvad hvert afsnit gør, og dette skal forhåbentlig gøre dig i stand til at tilpasse det til dine behov.

Husk at ændre konstanterne øverst i koden, så din ESP8266 kan oprette forbindelse til dit WiFi -netværk og din MQTT Broker (Raspberry Pi).

Hvis du besluttede ikke at angive et brugernavn og en adgangskode til MQTT -mægleren, skal du downloade MQTT_PublishNoPassword.zip -filen i stedet.

Trin 6: Installation af Python Client (paho-mqtt)

Installation af Python Client (paho-mqtt)
Installation af Python Client (paho-mqtt)

Heldigvis er dette trin meget enkelt! For at installere myg -python -klienten skal du bare skrive følgende i kommandolinjen (Linux/Mac) eller endda kommandoprompt (Windows).

pip installer paho-mqtt

Bemærk: Windows -kommandoprompten kan have et problem med at køre pip -kommandoen, hvis du ikke angav, at du ville have pip installeret og python tilføjet til din PATH -variabel, da du installerede Python. Der er en række måder at rette dette på, men jeg tror, at bare geninstallation af Python er den nemmeste måde. Hvis du er i tvivl - giv det en google!

Trin 7: Python -klient - Abonnement

Python Client - Abonnement
Python Client - Abonnement

I dette trin skal vi konfigurere Python -scriptet (enten på selve Raspberry Pi eller på en anden computer, der er forbundet til netværket) for at håndtere alle de meddelelser, der sendes (udgives) af ESP8266 til MQTT -emnet.

Jeg har inkluderet pythonkoden herunder (PythonMQTT_Subscribe.py), som er blevet kommenteret for at hjælpe dig med at forstå, hvad der foregår, men jeg vil også forklare nogle af hovedfunktionerne her.

Hvis du ikke tidligere har angivet et brugernavn og en adgangskode til MQTT -forbindelsen, skal du downloade filen PythonMQTT_SubscribeNoPassword.py i stedet.

Trin 8: Kommunikation mellem ESP8266 -enheder

Kommunikation mellem ESP8266 -enheder
Kommunikation mellem ESP8266 -enheder

Hvis du f.eks. Vil oprette et IoT -netværk, kan du kommunikere mellem ESP8266 -enheder. Heldigvis er dette ikke meget mere komplekst end den kode, vi har skrevet før, men der er et par bemærkelsesværdige ændringer.

For at en ESP sender data til en anden, skal den første ESP offentliggøre emnet, og den anden ESP skal abonnere på dette emne. Denne opsætning giver mulighed for en envejssamtale - ESP (1) til ESP (2). Hvis vi vil have ESP (2) til at tale tilbage til ESP (1), kan vi oprette et nyt emne, som ESP (2) vil offentliggøre, og ESP (1) vil abonnere. Heldigvis kan vi have flere abonnenter på det samme emne, så hvis du vil sende data til et antal systemer, har du kun brug for et emne (som de alle abonnerer på, undtagen den enhed, der sender dataene, da det vil udgive).

Hvis du har brug for hjælp til at finde ud af, hvad hver enhed skal gøre, skal du tænke på systemet som et rum for mennesker. Hvis ESP (1) udgiver, kan du forestille dig denne enhed som en "højttaler", og alle enheder, der abonnerer på emnet, er "lyttere" i dette eksempel.

Jeg har inkluderet nogle eksempler nedenfor, som viser, hvordan en ESP8266 kan abonnere på et emne og lytte efter bestemte meddelelser - 1 og 0. Hvis 1 modtages, tændes den indbyggede LED (for HUZZAH - GPIO 0). Hvis 0 modtages, slukkes denne LED.

Hvis du vil behandle mere komplekse data, skal dette gøres i funktionen ReceiptMessage (se kode).

For dine egne projekter, hvis du både skal sende og modtage data, kan du indarbejde publiceringsfunktionen fra det foregående eksempel i koden, der er inkluderet i dette trin. Dette skal håndteres i hoved Arduino loop () -funktionen.

Husk at ændre variablerne øverst i koden, så de passer til dit netværk!

Anbefalede: