- Instalowanie zestawu AWS IOT Device SDK dla języka Python na Raspberry Pi:
- Schemat obwodu:
- Programowanie Raspberry Pi:
- Testowanie programu w języku Python przez Shell Window:
- Pracujący:
Raspberry Pi zawsze było pierwszym wyborem do tworzenia aplikacji opartych na IoT, jeśli w grę wchodzi jakiś poziom obliczeń. Dzięki elastyczności języka Python i silnej społeczności programistów bardzo łatwo jest gromadzić, rejestrować, analizować lub raportować zestaw danych za pomocą Pi. W tym samouczku dowiemy się, jak połączyć moc Raspberry Pi z usługą Amazon AWS, aby publikować dane online w Internecie.
W tym samouczku użyjemy czujnika DHT11 do odczytania wartości temperatury i wilgotności, a następnie połączymy się z usługą AWS IOT i zaktualizujemy wartości czujnika za pomocą AWS IOT SDK. Te dane można następnie wizualizować w konsoli Amazon IOT, aby upewnić się, że otrzymujemy dane publikowane w Internecie.
Możesz również skorzystać z AWS Elastic Search Service, aby pobrać wartości tych czujników i zapisać je w bazie danych, a następnie użyć usługi Kibana Dashboard do wizualizacji danych z czujnika w postaci zgrabnego wykresu. Ciekawe wystarczająco? !!! Więc zaczynajmy…
Wymagania wstępne:
Ten samouczek zakłada, że masz już utworzone darmowe konto AWS i znasz podstawy usługi AWS IoT, takie jak tworzenie rzeczy, certyfikatu, polityki i publikowanie wartości za jej pomocą. Jeśli inaczej, przeczytaj poniższy samouczek.
- Pierwsze kroki z Amazon AWS IOT z MQTT.fx
Zakłada również, że wiesz, jak połączyć czujnik LCD i DHT11 z Raspberry Pi, a biblioteki do tego samego są już zainstalowane w twoim Pi. Jeśli nie, przejdź do poniższego samouczka.
- Połączenie DHT11 z Raspberry Pi
Pod koniec powyższego samouczka utworzyłbyś coś na AWS-IOT i powinieneś mieć również adres brokera dla swojej rzeczy wraz z certyfikatami potrzebnymi do uzyskania dostępu do twojej rzeczy. Zakładamy również, że Twój Raspberry pi jest już skonfigurowany z systemem operacyjnym i jest połączony z Internetem. Mając to na miejscu, przejdźmy do samouczka. Jeśli jesteś nowy w Raspberry Pi, najpierw przejdź do sekcji Pierwsze kroki z Raspberry pi.
Instalowanie zestawu AWS IOT Device SDK dla języka Python na Raspberry Pi:
Aby korzystać z usługi AWS na Pi, możemy zainstalować jeden z dwóch zestawów SDK. Jednym z nich jest JavaScript SDK, który wykorzystuje JavaScript jako język programowania, a drugim jest Python SDK, który oczywiście używa Pythona jako języka programowania. Tutaj wybieramy Python jako nasz SDK, ponieważ Python jest dla nas nieco wygodniejszy niż JavaScript.
Pełne informacje na temat AWS IOT SDK są dostępne na jego stronie GitHub.
Krok 1: Aby zainstalować SDK na swoim Pi, otwórz terminal i wpisz następujące polecenie
klon git
Krok 2: Powinno to zainstalować katalog aws na twoim Pi, teraz przejdź do niego za pomocą następującego polecenia.
cd aws - iot -device- sdk -python
Krok 3: W katalogu zainstaluj plik instalacyjny, korzystając z poniższego wiersza
python setup.py install
Schemat obwodu:
Po stronie sprzętowej mamy Raspberry Pi podłączonego do czujnika DHT11 oraz ekran LCD. DHT11 służy do uzyskiwania wartości temperatury i wilgotności, a wyświetlacz LCD służy do wyświetlania wartości i informacji o usuwaniu błędów. Schemat obwodu tego samego pokazano poniżej.
Zarówno czujnik LCD, jak i DHT11 współpracują z zasilaniem + 5 V, więc używamy pinów 5 V na Raspberry Pi do zasilania obu. Rezystor podciągający o wartości 1k jest używany na pinie wyjściowym czujnika DHT11, jeśli używasz modułu, możesz uniknąć tego rezystora.
Puli trymera z 10K dodano do sworznia Vee LCD kontrolować poziom kontrastu LCD. Poza tym wszystkie połączenia są dość proste. Ale zanotuj, których pinów GPIO używasz do podłączenia pinów, ponieważ będziemy potrzebować w naszym programie. Poniższa tabela powinna umożliwić ustalenie numerów pinów GPIO.
Skorzystaj z tabeli i wykonaj połączenia zgodnie ze schematem połączeń. Do wykonania połączeń użyłem płytki stykowej i przewodów połączeniowych. Ponieważ użyłem modułu, podłączyłem go bezpośrednio do Raspberry Pi. Mój sprzęt wyglądał tak poniżej
Programowanie Raspberry Pi:
W naszym programie w Pythonie musimy odczytać wartość temperatury i wilgotności, wyświetlić ją na ekranie LCD, a także opublikować obie wartości do rzeczy Amazon IOT, którą stworzyliśmy już w poprzednim tutorialu. Więc upewnij się, że stworzyłeś rzecz i masz wszystkie trzy pliki kluczy oraz adres brokera rzeczy, którą stworzyłeś.
W naszym programie w języku Python musimy połączyć trzy kluczowe pliki, aby Raspberry Pi mogło uzyskać dostęp do publikowania wartości na naszych rzeczach. Więc skopiuj wszystkie trzy kluczowe pliki i wklej je na pulpicie swojego Raspberry pi, ponieważ będziemy potrzebować ich adresu ścieżki w naszym programie.
Kompletny program python można znaleźć na dole tej strony, można skorzystać z programu po edycji katalogów adresowych broker i ścieżki według utworzonego rzeczy. Dalej poniżej wyjaśniłem kod w małych fragmentach.
Możemy zacząć od importowania biblioteki wymagane dla naszego projektu. Trzy główne biblioteki to AWS SDK, biblioteka LCD i biblioteka DHT, upewnij się, że zainstalowałeś wszystkie trzy swoje Pi. Biblioteka czasu i daty i godziny zostanie zainstalowana domyślnie.
z AWSIoTPythonSDK.MQTTLib importowej AWSIoTMQTTClient #import z AWS-Internet przedmiotów Biblioteka czasie import #, aby tworzyć opóźnienie z datetime data importu, datetime # Aby uzyskać datę i czas importu Adafruit_CharLCD jak LCD #import biblioteka LCD importowej Adafruit_DHT #import DHT Biblioteka dla czujnika
W następnym wierszu musimy podać szczegóły rzeczy, takie jak adres brokera, nazwa klienta i ścieżka do certyfikatu i plików kluczy. Tutaj użyłem nazwy klienta jako new_Client , możesz użyć tej samej lub dowolnej wybranej nazwy. Adres brokera powinien zostać zmieniony na adres rzeczy, którą utworzyłeś, a katalog ścieżki powinien również zostać zmieniony zgodnie z twoją rzeczą. Oprócz tych dwóch rzeczy nie musisz niczego zmieniać w kolejnych wierszach.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / piTem / Desktop", "/ home / pi / Desktop / ESP32_Thing certyfikaty / private.pem.key", "/ home / pi / Desktop / ESP32_Thing certyfikaty / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Nieskończone offline Kolejkowanie publikacji myMQTTClient. configureDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 s myMQTTClient.configureMQTTOperationTimeout (5) # 5 s
Następnie musimy określić szczegóły pinów naszego połączenia. Numer pinu GPIO każdego pinu jest przypisany do jego odpowiedniej nazwy. Tutaj użyliśmy czujnika DHT na pinie 17 i LCD w trybie 4-bitowym. Kod tego samego jest pokazany poniżej
sensor_name = Adafruit_DHT.DHT11 # używamy czujnika DHT11 sensor_pin = 17 # Czujnik jest podłączony do GPIO17 na Pi lcd_rs = 7 # RS LCD jest podłączony do GPIO 7 na PI lcd_en = 8 #EN LCD jest podłączony do GPIO 8 na PI lcd_d4 = 25 # D4 LCD jest podłączony do GPIO 25 na PI lcd_d5 = 24 # D5 LCD jest podłączony do GPIO 24 na PI lcd_d6 = 23 # D6 LCD jest podłączony do GPIO 23 na PI lcd_d7 = 18 # D7 z LCD jest podłączony do GPIO 18 na PI lcd_backlight = 0 #LED nie jest podłączony, więc przypisujemy 0
Następnie inicjalizujemy wyświetlacz LCD i wyświetlamy mały komunikat wprowadzający na ekranie LCD. Następnie spróbujemy połączyć się z AWS przy użyciu adresu brokera i plików kluczy wprowadzonych powyżej. Jeśli połączenie się powiedzie, na wyświetlaczu LCD pojawi się „ Connected to AWS thing ” lub będzie próbował przez 10 sekund, a jeśli się nie powiedzie, wyświetli komunikat o błędzie. Jeśli pojawi się komunikat o błędzie, upewnij się, że utworzyłeś rzecz pomyślnie i poprawnie powiązałeś ją z kodem. Zawsze możesz wrócić do poprzedniego samouczka, aby sprawdzić, czy utworzyłeś coś poprawnie w AWS.
if time.time () <connection_time: # spróbuj połączyć się z AWS przez 10 sekund myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) print "MQTT Client connection powiodło się!" lcd.message ('Connected to \ n AWS thing') # if connected else: print "Błąd: Sprawdź swoje dane AWS w programie" lcd.message ('Błąd: \ nNieprawidłowe dane') #if nie połączono
Gdy połączenie zostanie nawiązane pomyślnie, możemy wejść do nieskończonej while pętli do publikowania wartości czasu, temperatury i wilgotności jako ładunek. Ładunek powinien zawsze być ciągiem znaków w formacie JSON. Więc najpierw czytamy aktualną datę i godzinę i zapisujemy je w zmiennej za pomocą poniższych linii
now = datetime.utcnow () # get date and time current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # pobierz aktualny czas w formacie łańcucha
Następnie odczytujemy wartości wilgotności i temperatury z czujnika DHT11 i wyświetlamy je na ekranie LCD. Zmienna wilgotność i temperatura utrzymają odpowiednio wartość wilgotności i temperatury
wilgotność, temperatura = Adafruit_DHT.read_retry (nazwa_czujnika, szpilka_czujnika) # odczyt z czujnika
i zapisz odpowiednie wartości w zmienności temperatury i wilgotności
lcd.clear () # Wyczyść ekran LCD lcd.message ('Temp =%.1f C'% temperature) # Wyświetl wartość temperatury lcd.message ('\ nHum =%.1f %%'% wilgotności) #Display wartość Humidity time.sleep (2) #Wait for 2 sec, a następnie zaktualizuj wartości
Jak powiedzieliśmy wcześniej, ładunek powinien mieć postać łańcucha otoczonego nawiasami klamrowymi. Dodajemy wartość daty, czasu, temperatury i wilgotności po konwersji zmiennej na ciągi, jak pokazano poniżej.
#przygotuj ładunek w formacie ciągu znaków payload = '{"timestamp": "' + bieżący_czas + '", "temperatura":' + str (temperatura) + ', "wilgotność":' + str (wilgotność) + '}'
Wreszcie, gdy ładunek jest gotowy, musimy opublikować go w kliencie MQTT. Można to zrobić za pomocą polecenia myMQTTclient.publish . Publikując coś, powinniśmy również nadać mu nazwę, tutaj nazwałem go DHT11 / data, ale możesz nazwać to, co chcesz. Ale upewnij się, że pamiętasz nazwę, ponieważ będziemy musieli subskrybować naszą rzecz, aby wyświetlić dane.
Testowanie programu w języku Python przez Shell Window:
Gdy program będzie gotowy, uruchom go według własnego wyboru. Użyłem Python IDE do uruchomienia programu w oknie powłoki. Jeśli wszystko jest w porządku, powinieneś otrzymać wiadomość o pomyślnym połączeniu, a cały ładunek powinien zostać wyświetlony w oknie. Możesz sprawdzić, czy wartości temperatury i wilgotności są poprawnie odczytywane. Ładunek będzie aktualizowany co 5 sekund. Okno powłoki będzie wyglądać mniej więcej tak poniżej
Jeśli masz jakiś problem, upewnij się, że podałeś poprawne dane klucza i adres brokera, sprawdź również, czy można połączyć się z urządzeniem za pomocą oprogramowania MQTT.fx. Jeśli powłoka wyświetla powodzenie połączenia MQTT Client i tam zawiesza się, oznacza to, że czujnik DHT11 nie odpowiada, sprawdź, czy podłączyłeś do właściwego pinu i czujnik działa.
Pracujący:
Po uruchomieniu programu i wyświetleniu powyższych informacji w oknie powłoki oznacza to, że program reaguje poprawnie, a wartości są przesyłane na serwer Amazon AWS. Możesz również zauważyć wyświetlacz LCD, aby sprawdzić, czy co 5 sekund pokazuje komunikat Opublikowany do AWS-IoT, jak pokazano poniżej.
Możemy wejść do aplikacji MQTT.fx i zapisać się do tematu DHT11 / data . Wtedy powinniśmy być w stanie uzyskać wszystkie dane, które są publikowane przez Raspberry Pi. Te dane będą również aktualizowane co 5 sekund; Twój ekran MQTT będzie wyglądał mniej więcej tak jak poniżej
Jak widać, ładunek jest odbierany przez oprogramowanie MQTT, jak zaznaczono na niebiesko. Możesz również obejrzeć poniższe wideo, aby dowiedzieć się, jak działa projekt. Odtąd mamy nasze dane w internecie, możemy je wykorzystać z innymi narzędziami dostarczonymi przez Amazon, takimi jak Elastic search i Lambda, aby zapisać dane w bazie danych lub wizualizować je na wykresie. Aplikacji jest znacznie więcej, w zależności od tego, jak musimy czerpać korzyści z danych.
Mam nadzieję, że zrozumiałeś samouczek i podobało Ci się tworzenie czegoś podobnego. Jeśli masz jakiś problem z wykonaniem tego, opublikuj to w sekcji komentarzy poniżej lub skorzystaj z forum, aby uzyskać pomoc techniczną.