- Komponenter kreves
- Kretsdiagram
- Installere MQTT Cloud Libraries på Raspberry Pi
- Koding Forklaring for å kontrollere Raspberry Pi GPIO med MQTT
I forrige opplæring har vi diskutert om MQTT-protokollen og installert lokal MQTT-server på vår Raspberry Pi for å kontrollere GPIO lokalt. Men ulempen med lokal MQTT-server er at vi ikke kan kontrollere GPIO-ene fra hvor som helst i verden, den tilbyr bare tjenester lokalt. Men hvis denne MQTT-serveren er vert i en eller annen sky, kan apparater som er koblet til Raspberry Pi, kontrolleres globalt.
Her, i denne opplæringen, vil vi bruke Adafruit IO som MQTT-megler for å kontrollere et vekselstrømsapparat koblet til Raspberry Pi GPIO. Sjekk også andre IoT-kontrollerte hjemmeautomatiseringsveiledninger:
- IOT-basert stemmestyrt hjemmeautomatisering ved hjelp av ESP8266 og Android-app
- Smarttelefonstyrt hjemmeautomatisering ved hjelp av Arduino
- IoT-basert nettstyrt hjemmeautomatisering ved hjelp av PIC Microcontroller og Adafruit IO
- IoT-basert webstyrt hjemmeautomatisering ved hjelp av Raspberry Pi
- Google Assistant-basert stemmestyrt hjemmeautomatisering ved hjelp av DIY Arduino Wi-Fi Shield
Komponenter kreves
- Raspberry Pi med Raspbian Stretch installert i den.
- Relémodul
- Pære
- Jumper Wires
Her vil vi bruke SSH for å få tilgang til Raspberry Pi på den bærbare datamaskinen. Du kan bruke VNC eller Remote Desktop-tilkobling på den bærbare datamaskinen, eller du kan koble Raspberry pi til en skjerm. Lær mer om å sette opp Raspberry Pi hodeløst her uten skjerm.
Kretsdiagram
Kretsskjema for disse IoT-kontrollerte husholdningsapparater med MQTT-sky og Raspberry Pi er enkelt, bare koble til en pære med relémodul på GPIO-pin 35 på bringebær Pi.
Installere MQTT Cloud Libraries på Raspberry Pi
Her brukes Adafruit IO-plattform med Raspberry Pi som MQTT-megler. Da vi har brukt Adafruit IO- plattformen mange ganger i våre tidligere opplæringer, kan vi bruke den i Raspberry Pi.
Bare lag en konto på Adafruit IO-plattformen og lag en feed, hvis du ikke vet hvordan du lager feed og tilpasser Adafruit-dashbordet, så følg lenken.
Etter å ha laget dashbordet, installer noen få biblioteker i Raspberry Pi for å komme i gang med MQTT.
1. Oppdater først Pi og Python ved å utstede følgende kommandoer
sudo apt-get update sudo apt-get upgrade sudo pip3 install - oppgrader setuptools
2. Installer nå Rpi.gpio og Adafruit blinkbiblioteker ved hjelp av kommandoene nedenfor
sudo pip3 installere RPI.GPIO sudo pip3 installere adafruit-blinka
3. Installer Adafruit IO-bibliotek ved å bruke kommandoen nedenfor
sudo pip3 installer adafruit-io
4. Klon adafruiteksemplene fra github ved å bruke kommandoen nedenfor
git-klon https://github.com/adafruit/Adafruit_IO_Python.git
5. Gå deretter til eksempler-mappen ved å skrive inn følgende kommando i terminalen:
cd Adafruit_IO_Python / eksempler / grunnleggende
Hvis du ikke er sikker på hvilken katalog du er i, kan du sjekke dette ved å kjøre pwd.
6. For alle eksempler i denne mappen, må du angi ADAFRUIT_IO_KEY og ADAFRUIT_IO_USERNAME, som du finner fra Adafruit-dashbordet. Som vist under
Bytt knappen på Adafruit IO-dashbordet, og du bør se følgende i terminalen på Pi.
7. Åpne nå subscribe.py- filen ved hjelp av nano editor. Skriv inn følgende kommando for å åpne den
sudo nano subscribe.py
Vi må endre dette programmet for å kontrollere hvilken som helst GPIO fra dashbordet.
Koding Forklaring for å kontrollere Raspberry Pi GPIO med MQTT
Først importerer du alle nødvendige biblioteker for å bruke GPIO-pins og Adafruit MQTT-klient.
importer RPi.GPIO som GPIO import sys fra Adafruit_IO importer MQTTClient
Nå, still inn GPIO-modus og definer LED-pin-nummer og sett som utgang.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Deretter må vi stille inn AIO-nøkkel og brukernavn som vi har funnet mens vi oppretter dashbordet.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Skriv inn feednavnet du har gitt for å slå på og av lyset. Her er det “lett”.
FEED_ID = 'lett'
Nå definerer du en funksjon som skal kalles når det vil skje en hendelse. Så vi abonnerer på feeden ved hjelp av client.subscribe (FEED_ID)
def connected (client): client.subscribe (FEED_ID) print ('Waiting for feed data…')
Etter å ha abonnert på strømmen, må vi se etter den nye verdien og lagre den i en nyttelastvariabel . For denne meldingen kalles funksjon. Så når det er “1” i nyttelastvariabelen, gjør du ledepinnen HØY og for “0” gjør den LAV.
def-melding (klient, feed_id, nyttelast): skriv ut ('Feed {0} mottatt ny verdi: {1}'. format (feed_id, nyttelast)) hvis nyttelast == 1: GPIO.output (ledPin, GPIO.HIGH) annet: GPIO.output (ledPin, GPIO.LOW)
Opprett nå en MQTT-klient for å koble til Adafruit IO-plattformen og sende meldingene frem og tilbake.
klient = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = tilkoblet client.on_disconnect = frakoblet
Ta også vare på riktig innrykk i koden ellers vil det vise en feil. Komplett pythonkode er gitt på slutten av opplæringen.
Til slutt, lagre programmet ved hjelp av ctrl + x og trykk enter. Nå må vi kjøre skriptet for å abonnere på meldingene. Så I terminalen skriver du python subscribe.py og trykker på enter.
python subscribe.py
Du vil se en melding Waiting For Feed Data … som vist under øyeblikksbildet.
Nå, sørg for at relémodulen er koblet til GPIO-pin på Raspberry Pi, og gå deretter til Adafruit IO-dashbordet og endre lysmatingen. Den pære skal slå seg på når “1” er mottatt og avslått når “0” blir mottatt som vist nedenfor.
På denne måten kan vi kontrollere ethvert apparat fra hvor som helst i verden ved å bruke Raspberry Pi og MQTT sky