- Wymagane składniki
- Schemat obwodu
- Instalowanie bibliotek MQTT w chmurze na Raspberry Pi
- Objaśnienie kodowania do sterowania GPIO Raspberry Pi za pomocą MQTT
W poprzednim samouczku omówiliśmy protokół MQTT i zainstalowaliśmy lokalny serwer MQTT na naszym Raspberry Pi do lokalnego sterowania GPIO. Jednak wadą lokalnego serwera MQTT jest to, że nie możemy kontrolować GPIO z dowolnego miejsca na świecie, świadczy on tylko usługi lokalnie. Ale jeśli ten serwer MQTT jest hostowany w jakiejś chmurze, wszelkie urządzenia podłączone do Raspberry Pi mogą być kontrolowane globalnie.
Tutaj, w tym samouczku, użyjemy Adafruit IO jako brokera MQTT do sterowania urządzeniem AC podłączonym do Raspberry Pi GPIO. Sprawdź także inne samouczki dotyczące automatyki domowej sterowanej przez IoT:
- Sterowana głosowo automatyka domowa oparta na IOT przy użyciu ESP8266 i aplikacji na Androida
- Automatyka domowa sterowana smartfonem za pomocą Arduino
- Oparta na IoT automatyka domowa sterowana przez Internet przy użyciu mikrokontrolera PIC i Adafruit IO
- Oparta na IoT automatyka domowa sterowana przez Internet przy użyciu Raspberry Pi
- Oparta na Asystencie Google automatyka domowa sterowana głosem przy użyciu DIY Arduino Wi-Fi Shield
Wymagane składniki
- Raspberry Pi z zainstalowanym Raspbian Stretch.
- Moduł przekaźników
- Żarówka
- Przewody połączeniowe
Tutaj użyjemy SSH, aby uzyskać dostęp do Raspberry Pi na laptopie. Możesz użyć połączenia VNC lub pulpitu zdalnego na laptopie lub podłączyć Raspberry pi do monitora. Dowiedz się więcej o konfigurowaniu Raspberry Pi bez głowy tutaj bez monitora.
Schemat obwodu
Schemat obwodu dla tych urządzeń domowych sterowanych IoT z chmurą MQTT i Raspberry Pi jest prosty, wystarczy podłączyć żarówkę z modułem przekaźnikowym do pinu 35 GPIO raspberry Pi.
Instalowanie bibliotek MQTT w chmurze na Raspberry Pi
Tutaj platforma Adafruit IO jest używana z Raspberry Pi jako broker MQTT. Ponieważ wielokrotnie korzystaliśmy z platformy Adafruit IO w naszych poprzednich tutorialach, podobnie możemy jej używać w Raspberry Pi.
Wystarczy założyć konto na platformie Adafruit IO i utworzyć kanał, jeśli nie wiesz, jak utworzyć kanał i dostosować dashboard Adafruit, kliknij ten link.
Po utworzeniu dashboardu zainstaluj kilka bibliotek w Raspberry Pi, aby rozpocząć pracę z MQTT.
1. Najpierw zaktualizuj Pi i Pythona, wydając następujące polecenia
sudo apt-get update sudo apt-get upgrade sudo pip3 install - uaktualnij narzędzia do konfiguracji
2. Teraz zainstaluj biblioteki migające Rpi.gpio i Adafruit, używając poniższych poleceń
sudo pip3 zainstaluj RPI.GPIO sudo pip3 zainstaluj adafruit-blinka
3. Zainstaluj bibliotekę Adafruit IO za pomocą poniższego polecenia
sudo pip3 zainstaluj adafruit-io
4. Sklonuj przykłady adafruit z github za pomocą poniższego polecenia
klon git https://github.com/adafruit/Adafruit_IO_Python.git
5. Następnie przejdź do folderu przykładów, wprowadzając w terminalu następujące polecenie:
cd Adafruit_IO_Python / examples / basics
Jeśli nie masz pewności, w którym katalogu się znajdujesz, możesz to sprawdzić, uruchamiając pwd.
6. Dla wszystkich przykładów w tym folderze musisz ustawić ADAFRUIT_IO_KEY i ADAFRUIT_IO_USERNAME, które można znaleźć z pulpitu Adafruit. Jak pokazano niżej
Przełącz przycisk na pulpicie nawigacyjnym Adafruit IO, a na terminalu twojego Pi powinieneś zobaczyć następujące informacje.
7. Teraz otwórz plik subscribe.py za pomocą edytora nano . Wpisz następujące polecenie, aby je otworzyć
sudo nano subscribe.py
Musimy zmodyfikować ten program, aby sterować dowolnym GPIO z deski rozdzielczej.
Objaśnienie kodowania do sterowania GPIO Raspberry Pi za pomocą MQTT
Najpierw zaimportuj wszystkie wymagane biblioteki, aby korzystać z pinów GPIO i klienta Adafruit MQTT.
import RPi.GPIO as GPIO import sys z Adafruit_IO import MQTTClient
Teraz ustaw tryb GPIO i zdefiniuj numer pinu LED i ustaw jako wyjście.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Następnie musimy ustawić klucz AIO i nazwę użytkownika, które znaleźliśmy podczas tworzenia dashboardu.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Wpisz nazwę kanału, którą podałeś, aby włączyć i wyłączyć światło. Tutaj jest „światło”.
FEED_ID = 'lekki'
Teraz zdefiniuj funkcję, która zostanie wywołana, gdy nastąpi zdarzenie. Więc zasubskrybujemy kanał przy użyciu client.subscribe (FEED_ID)
def connected (client): client.subscribe (FEED_ID) print ('Oczekiwanie na dane kanału…')
Po zasubskrybowaniu źródła musimy sprawdzić nową wartość i zapisać ją w zmiennej ładunku . W tym przypadku wywoływana jest funkcja wiadomości. Tak więc, ilekroć w zmiennej ładunku jest „1”, ustaw pin diody LED na WYSOKI, a dla „0” - na NISKI.
def message (client, feed_id, payload): print ('Feed {0} otrzymał nową wartość: {1}'. format (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: GPIO.output (ledPin, GPIO.LOW)
Teraz utwórz klienta MQTT, aby połączyć się z platformą Adafruit IO i wysyłać wiadomości tam iz powrotem.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = connected client.on_disconnect = odłączona
Zadbaj też o odpowiednie wcięcia w kodzie, bo inaczej wyświetli się błąd. Kompletny kod Pythona znajduje się na końcu samouczka.
Na koniec zapisz program za pomocą ctrl + x i naciśnij enter. Teraz musimy uruchomić skrypt, aby zasubskrybować wiadomości. Więc w terminalu wpisz python subscribe.py i naciśnij enter.
python subscribe.py
Zobaczysz komunikat Oczekiwanie na dane kanału …, jak pokazano poniżej.
Teraz upewnij się, że moduł przekaźnika jest połączony z pinem GPIO Raspberry Pi, a następnie przejdź do deski rozdzielczej Adafruit IO i zmień źródło światła. Żarówka powinna włączyć, gdy „1” jest odbierany i wyłączony gdy „0” jest odbierana jak pokazano poniżej.
W ten sposób możemy sterować dowolnym urządzeniem z dowolnego miejsca na świecie za pomocą Raspberry Pi i chmury MQTT