- Komponenter krävs
- Kretsschema
- Installerar MQTT Cloud Libraries på Raspberry Pi
- Kodningsförklaring för att styra Raspberry Pi GPIO med MQTT
I tidigare handledning har vi diskuterat om MQTT-protokollet och installerat lokal MQTT-server på vår Raspberry Pi för att styra GPIO lokalt. Men nackdelen med den lokala MQTT-servern är att vi inte kan styra GPIO från var som helst i världen, den tillhandahåller bara tjänster lokalt. Men om denna MQTT-server är värd på något moln kan alla apparater som är anslutna till Raspberry Pi styras globalt.
Här, i denna handledning, kommer vi att använda Adafruit IO som MQTT-mäklare för att styra en AC-apparat ansluten till Raspberry Pi GPIO. Kontrollera även andra IoT-kontrollerade hemautomationshandledning:
- IOT-baserad röststyrd hemautomation med ESP8266 och Android App
- Smart telefonstyrd hemautomation med Arduino
- IoT-baserad webbstyrd hemautomation med PIC Microcontroller och Adafruit IO
- IoT-baserad webbstyrd hemautomation med Raspberry Pi
- Google Assistant-baserad röststyrd hemautomation med DIY Arduino Wi-Fi Shield
Komponenter krävs
- Raspberry Pi med Raspbian Stretch installerad i den.
- Relämodul
- Glödlampa
- Bygeltrådar
Här kommer vi att använda SSH för att komma åt Raspberry Pi på den bärbara datorn. Du kan använda VNC- eller fjärrskrivbordsanslutning på den bärbara datorn eller ansluta din Raspberry pi till en bildskärm. Läs mer om hur du ställer in Raspberry Pi utan huvud här utan en skärm.
Kretsschema
Kretsschema för de här IoT-kontrollerade hushållsapparaterna med MQTT-moln och Raspberry Pi är enkelt, anslut bara en glödlampa med relämodul på GPIO-stift 35 på hallon Pi.
Installerar MQTT Cloud Libraries på Raspberry Pi
Här används Adafruit IO-plattform med Raspberry Pi som MQTT-mäklare. Eftersom vi har använt Adafruit IO- plattformen många gånger i våra tidigare tutorials på samma sätt kan vi använda den i Raspberry Pi.
Gör bara ett konto på Adafruit IO-plattformen och gör ett flöde, om du inte vet hur du skapar flöde och anpassar Adafruit-instrumentpanelen, följ länken.
Efter att ha gjort instrumentpanelen, installera några bibliotek i Raspberry Pi för att komma igång med MQTT.
1. Uppdatera först din Pi och Python genom att utfärda följande kommandon
sudo apt-get update sudo apt-get upgrade sudo pip3 install - uppgraderingsverktyg
2. Installera nu Rpi.gpio och Adafruit blinka bibliotek med kommandona nedan
sudo pip3 installera RPI.GPIO sudo pip3 installera adafruit-blinka
3. Installera Adafruit IO-biblioteket med kommandot nedan
sudo pip3 installera adafruit-io
4. Klona adafruitexemplen från github med kommandot nedan
git-klon https://github.com/adafruit/Adafruit_IO_Python.git
5. Navigera sedan till exempelmappen genom att ange följande kommando i terminalen:
cd Adafruit_IO_Python / exempel / grunder
Om du inte är säker på vilken katalog du är i kan du kontrollera detta genom att köra pwd.
6. För alla exempel i den här mappen måste du ställa in ADAFRUIT_IO_KEY och ADAFRUIT_IO_USERNAME, som kan hittas från Adafruit-instrumentpanelen. Enligt nedanstående
Växla på knappen på Adafruit IO-instrumentpanelen, så ska du se följande i terminalen på din Pi.
7. Öppna nu subscribe.py- filen med nano- editor. Skriv följande kommando för att öppna det
sudo nano subscribe.py
Vi måste ändra detta program för att styra alla GPIO från instrumentpanelen.
Kodningsförklaring för att styra Raspberry Pi GPIO med MQTT
Importera först alla bibliotek som krävs för att använda GPIO-stift och Adafruit MQTT-klient.
importera RPi.GPIO som GPIO importera sys från Adafruit_IO importera MQTTClient
Ställ nu in GPIO-läge och definiera LED-stiftnummer och ställ in som utgång.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Därefter måste vi ställa in AIO-nyckel och användarnamn som vi hittat när vi skapade instrumentpanelen.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Ange matningsnamnet som du har gett för att tända och stänga av lampan. Här är det "lätt".
FEED_ID = 'ljus'
Definiera nu en funktion som kommer att anropas när det händer en händelse. Så vi kommer att prenumerera på flödet med client.subscribe (FEED_ID)
def connected (client): client.subscribe (FEED_ID) print ('Waiting for feed data…')
Efter att ha prenumererat på flödet måste vi kontrollera det nya värdet och lagra det i en nyttolastvariabel . För detta meddelande kallas funktionen. Så, närhelst det finns "1" i nyttolastvariabeln, gör ledstiften HÖG och för "0" gör den LÅG.
def-meddelande (klient, feed_id, nyttolast): skriv ut ('Feed {0} mottog nytt värde: {1}'. format (feed_id, nyttolast)) om nyttolast == 1: GPIO.output (ledPin, GPIO.HIGH) annat: GPIO.output (ledPin, GPIO.LOW)
Skapa nu en MQTT-klient för att ansluta till Adafruit IO-plattformen och skicka meddelandena fram och tillbaka.
klient = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = ansluten client.on_disconnect = frånkopplad
Var också noga med korrekt fördjupning i koden annars kommer det att visa ett fel. Komplett pythonkod ges i slutet av handledningen.
Slutligen sparar du programmet med hjälp av ctrl + x och trycker på Enter. Nu måste vi köra skriptet för att prenumerera på meddelandena. Så i terminalen skriver du python subscribe.py och trycker på enter.
python subscribe.py
Du kommer att se ett meddelande Väntar på flödesdata … som visas nedan ögonblicksbild.
Se nu till att relämodulen är ansluten till GPIO-stift på Raspberry Pi och gå sedan till Adafruit IO-instrumentpanelen och ändra ljusmatningen. Den glödlampan ska slås på när ”1” tas emot och stängs av när ”0” tas emot enligt nedan.
På detta sätt kan vi styra alla apparater var som helst i världen med hjälp av Raspberry Pi och MQTT moln