Innholdsfortegnelse:

Slik bruker du MQTT med Raspberry Pi og ESP8266: 8 trinn (med bilder)
Slik bruker du MQTT med Raspberry Pi og ESP8266: 8 trinn (med bilder)

Video: Slik bruker du MQTT med Raspberry Pi og ESP8266: 8 trinn (med bilder)

Video: Slik bruker du MQTT med Raspberry Pi og ESP8266: 8 trinn (med bilder)
Video: tutorial install home assistant on stb 2024, November
Anonim
Hvordan bruke MQTT med Raspberry Pi og ESP8266
Hvordan bruke MQTT med Raspberry Pi og ESP8266

I denne instruksen vil jeg forklare hva MQTT -protokollen er og hvordan den brukes til å kommunisere mellom enheter. Så, som en praktisk demonstrasjon, skal jeg vise deg hvordan du konfigurerer et enkelt to -klientsystem, hvor en ESP8266 -modul sender en melding til et Python -program når du trykker på en knapp. Spesielt bruker jeg en Adafruit HUZZAH -modul for dette prosjektet, en Raspberry Pi og en stasjonær datamaskin. Raspberry Pi fungerer som MQTT -megler, og Python -klienten kjøres fra en egen stasjonær datamaskin (valgfritt, da dette kan kjøres på Raspberry Pi).

For å følge denne instruksen må du ha grunnleggende kunnskap om elektronikk og hvordan du bruker Arduino -programvaren. Du bør også være kjent med å bruke et kommandolinjegrensesnitt (for Raspberry Pi). Forhåpentligvis, når du har fått kunnskap om hva MQTT er, og hvordan du bruker det i et grunnleggende scenario, vil du kunne lage dine egne IoT -prosjekter!

Nødvendige deler

  • 1 x Raspberry Pi, koblet til et lokalt nettverk (kjører Jessie)
  • 1 x ESP8266 -modul (Adafruit HUZZAH)
  • 1 x brødbrett
  • 3 x hoppetråder (mann-til-mann)
  • 1 x trykknapp
  • 1 x 10k Ohm motstand (brun-svart-oransje fargekode)

Jeg har laget denne Instructable, ettersom MQTT alltid har interessert meg som en protokoll, og det er mange forskjellige måter den kan brukes på. Imidlertid ser det ikke ut til at jeg kan tenke på hvordan jeg skal kode enheter for å bruke den. Dette var fordi jeg ikke visste/forsto hva som egentlig foregikk for å ta min "Hei, verden!" fra enhet A og send den til enhet B. Derfor bestemte jeg meg for å skrive denne instruksjonsboken for å (forhåpentligvis) lære deg hvordan den fungerer, og for å forsterke min egen forståelse av den!

Trinn 1: Hva er MQTT?

Hva er MQTT?
Hva er MQTT?

MQTT, eller MQ Telemetry Transport, er en meldingsprotokoll som lar flere enheter snakke med hverandre. For tiden er det en populær protokoll for tingenes internett, selv om den har blitt brukt til andre formål - for eksempel Facebook Messenger. Interessant nok ble MQTT oppfunnet i 1999 - noe som betyr at den er like gammel som meg!

MQTT er basert på ideen om at enheter kan publisere eller abonnere på emner. Så, for eksempel. Hvis enhet nr. 1 har registrert temperaturen fra en av sensorene, kan den publisere en melding som inneholder temperaturverdien den registrerte, til et emne (f.eks. "Temperatur"). Denne meldingen blir sendt til en MQTT -megler, som du kan tenke på som en switch/ruter på et lokalt nettverk. Når MQTT -megleren har mottatt meldingen, sender den den til alle enheter (i dette tilfellet enhet nr. 2) som abonnerer på det samme emnet.

I dette prosjektet vil vi publisere et emne ved hjelp av en ESP8266, og lage et Python -skript som vil abonnere på det samme emnet, via en Raspberry Pi som vil fungere som MQTT -megler. Det flotte med MQTT er at den er lett, så den er perfekt for å kjøre på små mikrokontrollere som en ESP8266, men den er også allment tilgjengelig - så vi kan kjøre den på et Python -skript også.

Forhåpentligvis vil du på slutten av dette prosjektet ha en forståelse av hva MQTT er og hvordan du kan bruke det til dine egne prosjekter i fremtiden.

Trinn 2: Installere MQTT -megleren på Raspberry Pi

Installere MQTT -megleren på Raspberry Pi
Installere MQTT -megleren på Raspberry Pi
Installere MQTT -megleren på Raspberry Pi
Installere MQTT -megleren på Raspberry Pi
Installere MQTT -megleren på Raspberry Pi
Installere MQTT -megleren på Raspberry Pi

For å sette opp vårt MQTT -system trenger vi en megler, som forklart i forrige trinn. For Raspberry Pi bruker vi MQTT -megleren "Mosquitto". Før vi installerer dette, er det alltid best å oppdatere Raspberry Pi.

sudo apt-get oppdatering

sudo apt-get oppgradering

Når du har gjort dette, installerer du mygg og deretter myggklientene.

sudo apt -get install mygg -y

sudo apt-get install mosquitto-clients -y

Når du er ferdig med å installere disse to pakkene, må vi konfigurere megleren. Myggmeglerens konfigurasjonsfil ligger på /etc/mosquitto/mosquitto.conf, så åpne denne med din favoritt tekstredigerer. Hvis du ikke har en favoritt tekstredigerer eller ikke vet hvordan du bruker noen av kommandolinjeditorene, bruker jeg nano slik at du kan følge med:

sudo nano /etc/mosquitto/mosquitto.conf

Nederst i denne filen skal du se linjen:

include_dir /etc/mosquitto/conf.d

Slett denne linjen. Legg til følgende linjer nederst i filen.

allow_anonymous false

password_file/etc/mosquitto/pwfile listener 1883

Ved å skrive disse linjene har vi fortalt mosquitto at vi ikke vil at noen skal koble seg til megleren vår som ikke oppgir et gyldig brukernavn og passord (vi skal sette dem på et sekund) og at vi vil at mygg skal Lytt etter meldinger på portnummer 1883.

Hvis du ikke vil at megleren trenger et brukernavn og passord, må du ikke inkludere de to første linjene vi la til (dvs. allow_anonymous … og password_file …). Hvis du har gjort dette, hopper du til å starte Raspberry Pi på nytt.

Lukk nå (og lagre) den filen. Hvis du følger med nano -eksemplet, trykker du på CTRL+X og skriver Y når du blir bedt om det.

Fordi vi nettopp har fortalt mosquitto at brukere som prøver å bruke MQTT -megleren må autentiseres, må vi nå fortelle mygg hva brukernavnet og passordet er! Så skriv inn følgende kommando - erstatt brukernavn med brukernavnet du vil ha - skriv deretter inn passordet du vil ha når du blir bedt om det (Merk: hvis du spesifiserte en annen password_file -banen når du redigerte konfigurasjonsfilen, erstatt banen nedenfor med en du brukte).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile brukernavn

Siden vi nettopp har endret myggkonfigurasjonsfilen, bør vi starte Raspberry Pi på nytt.

sudo omstart

Når Raspberry Pi er ferdig med å starte på nytt, bør du ha en fullt fungerende MQTT -megler! Deretter skal vi prøve å samhandle med det, ved hjelp av en rekke forskjellige enheter/metoder!

Trinn 3: Testing av megleren

Tester megleren
Tester megleren

Når du har installert mygg på Raspberry Pi, kan du prøve den raskt - bare for å sikre at alt fungerer som det skal. For dette formålet er det to kommandoer som vi kan bruke på kommandolinjen. mygg_pub og mygg_sub. I dette trinnet vil jeg veilede deg gjennom å bruke hver av disse for å teste megleren vår.

For å teste megleren må du åpne to kommandolinjevinduer. Hvis du bruker Putty eller en annen SSH -klient, er dette like enkelt som å åpne et nytt SSH -vindu og logge inn som vanlig. Hvis du får tilgang til Pi fra en UNIX -terminal, er dette nøyaktig det samme. Hvis du bruker Raspberry Pi direkte, må du åpne to terminalvinduer i GUI -modus (kommandoen startxcan brukes til å starte GUI).

Nå som du har åpnet to vinduer, kan vi komme i gang med testen. I en av de to terminalene skriver du inn følgende kommando og erstatter brukernavn og passord med de du konfigurerte i forrige trinn.

mosquitto_sub -d -u brukernavn -P passord -t test

Hvis du bestemte deg for ikke å angi et brukernavn og passord i forrige trinn, så ignorer du fra nå av flaggene -u og -P i kommandoene. Så som et eksempel vil kommandoen mosquitto_sub nå være:

mygg_sub -d -t test

Kommandoen mosquitto_sub vil abonnere på et emne og vise meldinger som sendes til det angitte emnet i terminalvinduet. Her betyr -d feilsøkingsmodus, så alle meldinger og aktivitet blir sendt ut på skjermen. -u og -P skal være selvforklarende. Til slutt er -t navnet på emnet vi vil abonnere på - i dette tilfellet "test".

Deretter, i det andre terminalvinduet, skal vi prøve å publisere en melding til "test" -emnet. Skriv inn følgende, husk igjen for å endre brukernavn og passord:

mosquitto_pub -d -u brukernavn -P passord -t test -m "Hei, verden!"

Når du trykker enter, bør du se meldingen "Hei, verden!" vises i det første terminalvinduet vi brukte (for å abonnere). Hvis dette er tilfellet, er du klar til å begynne å jobbe med ESP8266!

Trinn 4: Konfigurere ESP8266 (Adafruit HUZZAH)

Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)
Sette opp ESP8266 (Adafruit HUZZAH)

Dette trinnet er spesifikt for Adafruit HUZZAH (da det er det jeg bruker for å fullføre dette prosjektet). Hvis du bruker en annen Arduino / ESP8266 -enhet, kan du hoppe over dette trinnet. Imidlertid vil jeg råde deg til å skumme den, bare hvis det er informasjon her som kan være relevant for deg.

For dette prosjektet skal jeg programmere HUZZAH med Arduino -programvaren. Så hvis du ikke allerede har gjort det, må du installere Arduino -programvaren (nyere enn 1.6.4). Du kan laste den ned her.

Når du har installert Arduino-programvaren, åpner du den og navigerer til Fil-> Innstillinger. Her bør du se (nær bunnen av vinduet) en tekstboks med etiketten: "Additional Boards Manager URLs". Kopier og lim inn følgende lenke i denne tekstboksen:

arduino.esp8266.com/stable/package_esp8266com_index.json

Klikk OK for å lagre endringene. Åpne nå Board Manager (Verktøy-> Board-> Board Manager) og søk etter ESP8266. Installer esp8266 by ESP8266 Community -pakken. Start Arduino -programvaren på nytt.

Nå, før vi kan programmere brettet, må vi velge noen få forskjellige alternativer. Velg Verktøy -menyalternativet Adafruit HUZZAH ESP8266 for brett, 80 MHz for CPU -frekvensen (du kan bruke 160 MHz hvis du vil overklokke det, men foreløpig skal jeg bruke 80 MHz), 4M (3M SPIFFS) for Flash -størrelsen, og 115200 for opplastingshastigheten. Sørg også for å velge COM -porten du bruker (dette vil avhenge av oppsettet ditt).

Før du kan laste opp noen kode, må du sørge for at HUZZAH er i bootloader -modus. For å aktivere dette, hold nede knappen på tavlen merket GPIO0, og mens denne holdes inne, holder du nede Reset -knappen også. Slipp deretter Reset -knappen, og deretter GPIO0. Hvis du har gjort dette riktig, skal den røde lysdioden som tennes da du trykket på GPIO0 nå være svakt opplyst.

For å laste opp kode til mikrokontrolleren må du først kontrollere at HUZZAH er i oppstartsmodus, og deretter klikke på opplastingsknappen i Arduino IDE.

Hvis du har problemer med å konfigurere HUZZAH, kan du finne mer informasjon i Adafruits egen opplæring.

Trinn 5: Programmering av ESP8266

Programmering av ESP8266
Programmering av ESP8266

Nå skal vi begynne å programmere ESP8266, men før vi kan starte, må du installere følgende biblioteker i Arduino Library manager (Sketch-> Include Libraries-> Manage Libraries)

  • Sprett 2
  • PubSubClient

Når du har installert disse bibliotekene, vil du kunne kjøre koden jeg har inkludert i denne instruksjonsboken (MQTT_Publish.zip). Jeg har sørget for å kommentere det slik at du kan forstå hva hver seksjon gjør, og dette skal forhåpentligvis gjøre deg i stand til å tilpasse den til dine behov.

Husk å endre konstantene øverst i koden slik at ESP8266 kan koble til WiFi -nettverket og MQTT -megleren (Raspberry Pi).

Hvis du bestemte deg for ikke å angi et brukernavn og passord for MQTT -megleren, kan du laste ned filen MQTT_PublishNoPassword.zip i stedet.

Trinn 6: Installere Python Client (paho-mqtt)

Installere Python Client (paho-mqtt)
Installere Python Client (paho-mqtt)

Heldigvis er dette trinnet veldig enkelt! For å installere mygg -python -klienten trenger du bare å skrive følgende inn på kommandolinjen (Linux/Mac) eller til og med ledeteksten (Windows).

pip installer paho-mqtt

Merk: Windows -ledeteksten kan ha et problem med pip -kommandoen hvis du ikke angav at du ville installere pip og at python skulle legges til i PATH -variabelen da du installerte Python. Det er en rekke måter å fikse dette på, men jeg tror bare å installere Python på nytt er den enkleste måten. Er du i tvil - gi den en google!

Trinn 7: Python -klient - Abonnement

Python Client - Abonnement
Python Client - Abonnement

I dette trinnet skal vi sette opp Python -skriptet (enten på selve Raspberry Pi eller på en annen datamaskin som er koblet til nettverket) for å håndtere alle meldingene som sendes (publiseres) av ESP8266 til MQTT -emnet.

Jeg har inkludert pythonkoden nedenfor (PythonMQTT_Subscribe.py), som har blitt kommentert for å hjelpe deg å forstå hva som skjer, men jeg vil også forklare noen av hovedfunksjonene her.

Hvis du ikke har angitt et brukernavn og passord for MQTT -tilkoblingen tidligere, kan du laste ned filen PythonMQTT_SubscribeNoPassword.py i stedet.

Trinn 8: Kommunikasjon mellom ESP8266 -enheter

Kommunikasjon mellom ESP8266 -enheter
Kommunikasjon mellom ESP8266 -enheter

Hvis du for eksempel vil sette opp et IoT -nettverk, kan det være lurt å kommunisere mellom ESP8266 -enheter. Heldigvis er dette ikke mye mer komplekst enn koden vi har skrevet før, men det er et par bemerkelsesverdige endringer.

For at en ESP skal sende data til en annen, må den første ESP -en publisere til emnet, og den andre ESP -en må abonnere på det emnet. Dette oppsettet tillater en enveis samtale - ESP (1) til ESP (2). Hvis vi vil at ESP (2) skal snakke tilbake til ESP (1), kan vi lage et nytt emne som ESP (2) vil publisere, og ESP (1) vil abonnere. Heldigvis kan vi ha flere abonnenter på samme emne, så hvis du vil sende data til en rekke systemer, trenger du bare ett emne (som de alle abonnerer på, bortsett fra enheten som sender dataene, da det vil publiseres).

Hvis du trenger hjelp til å finne ut hva hver enhet må gjøre, tenk på systemet som et rom for mennesker. Hvis ESP (1) publiserer, kan du forestille deg denne enheten som en "høyttaler", og alle enheter som abonnerer på emnet er "lyttere" i dette eksemplet.

Jeg har tatt med noen eksempler på koder nedenfor, som viser hvordan en ESP8266 kan abonnere på et emne, og lytte etter bestemte meldinger - 1 og 0. Hvis 1 mottas, er den innebygde LED -en (for HUZZAH - GPIO 0) slått på. Hvis 0 mottas, slås denne LED -lampen av.

Hvis du vil behandle mer komplekse data, bør dette gjøres i funksjonen ReceiptMessage (se kode).

For dine egne prosjekter, hvis du både må sende og motta data, kan du inkludere publiseringsfunksjonen fra det forrige eksemplet i koden som er inkludert i dette trinnet. Dette bør håndteres i hoved Arduino loop () -funksjonen.

Husk å endre variablene øverst i koden slik at de passer til nettverket ditt!

Anbefalt: