IoT w chmurze – część III. Konfigurujemy IoT Core w Google Cloud Platform (GCP)
Cześć! Witaj w kolejnym artykule w mojej serii, w której staram się pokazać, jak zacząć przygodę z o IoT w hobbistycznym wydaniu, wykorzystując do tego różne chmury.
W poprzednich dwóch wpisach omówiłem proste przypadki pracy z chmurami Azure i AWS. Tym razem mam coś nowego. Dziś porozmawiamy o GCP, czyli Google Cloud Platform.
Co przygotować?
Zanim zaczniemy, zachęcam do przeczytania poprzednich artykułów, w których zajmowaliśmy się chmurami Azure i AWS. Znajduje się w nich kilka ważnych informacji, których nie będę tutaj powtarzał, a bez nich możesz mieć problemy z konfiguracją sprzętu. Dlatego jeśli jeszcze nie znasz mojej serii, zajrzyj koniecznie do pierwszego artykułu.
Przejdźmy do konkretów. Oto narzędzia, które wykorzystamy do dzisiejszej pracy:
- Do kontaktu pomiędzy naszym urządzeniem a chmurą wykorzystamy usługę IoT Core.
- Wiadomości do usługi możemy wysłać za pomocą protokołu HTTP lub MQTT.
- Odebrane wiadomości trafią na kolejkę Pub/Sub, z której będziemy mogli je odczytać.
- Wiadomości mogą też zostać przeniesione do innych usług, takich jak BigQuery lub Cloud Storage, za pomocą usługi Dataflow.
Repozytorium plików – przyda się!
Tak samo jak poprzednio, i tym razem przygotowałem dla Ciebie repozytorium z ważnymi plikami. Repozytorium dostępne jest tutaj: https://github.com/kajoj2/GCP-IoT-Esp32-Article.
Jedyne, co musisz zrobić, by zacząć pracę, to wyposażyć się w program openssl. Jeśli masz problemy z jego instalacją, możesz użyć Cloud Shell w GCP –znajdziesz go w górnym pasku menu po prawej stronie (ikonka konsoli).
Biblioteka do połączenia z IoT Core
W repozytorium znajduje się biblioteka google-cloud-iot-arduino-master.zip – zainstaluj ją, tak jak instalowaliśmy biblioteki w poprzednich wpisach (Szkic -> Dołącz bibliotekę -> dodaj bibliotekę.zip).
Biblioteka jest nam potrzebna do połączenia się z IoT Core. Jej kod pozwoli nam połączyć się z chmurą oraz zdobyć token JWT, który będzie użyty do autoryzacji z brokerem MQTT.
UWAGA! W czasie pisania kodu niemiłosiernie męczyłem się z SSL. Po dłuższym czasie spędzonym na intensywnym debugowaniu i rwaniu włosów z głowy okazało się, że z kodem i biblioteką wszystko jest w porządku, a winę za moje zszargane nerwy ponosi Arduino framework dla ESP32. W jego najnowszej wersji wkradł się błąd. Po zmianie wersji na starszą wszystko zadziałało jak za dotknięciem magicznej różdżki.
Żeby nie powtarzać mojego błędu, sprawdź zainstalowaną wersję frameworku. Informację o wersji znajdziesz w: Narzędzia -> Płytka -> Menadżer płytek -> Wyszukaj ESP.
Jeśli masz wersję 1.0.4, działaj, jest ok. A jeśli Twoja wersja to 1.0.5, zmień ją na 1.0.4.
Kod do połączenia z Wi-Fi
W repozytorium znajdziesz również gotowy kod, który połączy się z Wi-Fi i będzie wysyłać dane o temperaturze do IoT Core.
Tym razem po otwarciu pliku Arduino-code.ino powinny pojawić się trzy zakładki. Cała konfiguracja, jaką musimy zmienić, znajduje się w pliku nagłówkowym ciotc_config.h.
Rejestr i certyfikat
Zanim zmienisz dane, skompilujesz i wgrasz projekt na ESP, musisz stworzyć w usłudze IoT Core rejestr oraz dodać do niego nasze urządzenie. Dodatkowo trzeba wygenerować certyfikat do autoryzacji urządzenia w chmurze. Zajmiemy się tym w kolejnym kroku.
Konfiguracja IoT Core w Google Cloud Platform. Tworzenie rejestru
- W konsoli GCP kliknij na menu hamburgerowe (trzy poziome kreski w lewym górnym rogu), a następnie wyszukaj i wybierz usługę IoT Core.
- Jeśli uruchamiasz usługę po raz pierwszy, prawdopodobnie będziesz musiał ją „włączyć”. W tym celu kliknij przycisk [Enable]. Uruchomisz wówczas usługę IoT Core w swoim projekcie. Ta operacja jest jednorazowa – w przyszłości nie musisz jej powtarzać.
- Teraz możemy przejść do tworzenia rejestru. Kliknij przycisk [Create Registry].
- Powinno otworzyć się okienko, w którym możesz skonfigurować rejestr. Wpisz w nim wybrane przez siebie Registry ID i wybierz Region (polecam Europę, żeby było bliżej?). Z kolei w sekcji Cloud Pub/Sub topics rozwiń listę i kliknij [Create a Topic].
- W polu Topic ID, które się pojawi, wpisz wybraną przez siebie nazwę i ponownie kliknij [Create a Topic].
- Stworzony przez Ciebie temat powinien się wybrać automatycznie. Możesz zatem kliknąć [Create], by zakończyć tworzenie rejestru.
Konfiguracja IoT Core w Google Cloud Platform. Tworzenie urządzenia
Udało się! Nasz rejestr został dodany. Kolejnym krokiem jest utworzenie w nim urządzenia.
- Przejdź do zakładki Devices i kliknij [Create a Device].
- Wybierz Device ID jako nazwę urządzenia i kliknij [Create]. Po wykonaniu tego polecenia urządzenie zostanie utworzone.
Konfiguracja IoT Core w Google Cloud Platform. Generowanie certyfikatu
Teraz nadszedł czas na wygenerowanie certyfikatu. Zrobisz to za pomocą następujących poleceń:
openssl ecparam -genkey -name prime256v1 -noout -out ec_private.pem openssl ec -in ec_private.pem -pubout -out ec_public.pem
Pozwalają one wygenerować publiczny i prywatny certyfikat. Zawartość publicznego certyfikatu będzie wymagana przez GCP.
- Otwórz publiczny certyfikat za pomocą dowolnego edytora tekstu lub następującej komendy:
cat ec_public.pem
- Skopiuj klucz, który powinien wyglądać tak:
- Wróć do konsoli GCP i przejdź do zakładki Devices.
- Kliknij na nazwę utworzonego przez siebie urządzenia:
- Następnie przejdź do zakładki Authentication i kliknij [Add Public Key].
- Jako Public key format wybierz ES256.
- Wklej swój klucz publiczny w pole z wartością i kliknij [Add].
Gotowe! Klucz został dodany. Teraz nadszedł czas na konfigurację naszego kodu, ale nie zamykaj jeszcze konsoli GCP. Będziemy potrzebowali z niej kilku informacji:
- Przejdź do pliku ciotc_config.h – trzeba uzupełnić w nim kilka pól na podstawie danych z Google Cloud Platform:
- ssid – nazwa twojej sieci Wi-Fi;
- password – hasło do sieci Wi-Fi;
- project_id – nazwa projektu w GCP (znajdziesz ją w prawym górnym rogu po napisie Google Cloud Platform);
- location – lokalizacja usługi IoT Core – jeśli wybrałeś Europę, nie musisz nic zmieniać;
- registry_id – nazwa Twojego rejestru;
- device_id – nazwa urządzenia.
Przed wgraniem została nam jeszcze tylko jedna rzecz do skonfigurowania – dodanie klucza prywatnego. Musimy go zapisać w formacie hex.
- Żeby wyświetlić klucz w takim formacie, użyj komendy:
openssl ec -in ec_private.pem -noout -text
- Następnie skopiuj dane z sekcji priv, jak na poniższym zrzucie ekranu:
- Teraz wklej wartość do zmiennej private_key_str. Nie zapomnij, aby na początku i końcu każdej linii dodać cudzysłów. Na samym końcu standardowo umieść średnik:
To wszystko, jeśli chodzi o połączenie ESP z GCP. Teraz wystarczy tylko wgrać program na płytkę i obserwować, jak spływają dane. Możesz to robić za pomocą usługi Pub/Sub.
Ale nie uciekaj jeszcze, mam dla Ciebie mały BONUS!
?BONUS: Kilka słów o Raspberry Pi
Mam nadzieję, że udało Ci się poprawnie skonfigurować usługę IoT Core na platformie Google. W nagrodę mam dla Ciebie kilka informacji o Raspberry Pi. Ta wiedza może się przydać w kolejnych eksperymentach z domowym IoT.
Raspberry Pi to jeden z przykładów kompaktowego komputera jednopłytkowego (Single Board Computer, SBC), urządzenia, które jest niewiele większe od karty kredytowej.
Oprócz znanej „malinki” istnieje jeszcze szereg innych komputerów tego typu. Najpopularniejsze z nich to Orange Pi, Banana Pi czy Nvidia Jetson (swoją drogą, idealnie nadaje się do zastosowań AI dzięki rdzeniom CUDA).
Nic nie stoi na przeszkodzie, by taką płytkę stworzyć samodzielnie, jednak wymaga to mnóstwa czasu i sporej wiedzy. Chętnych do zmierzenia się z tematem zachęcam do przeczytania tego genialnego artykułu.
Raspberry Pi – jaki OS?
Na naszych małych komputerkach w 99% przypadków działa system oparty na Linuksie, ale z powodzeniem możemy także zbudować własny OS. Jedynym utrudnieniem może być brak kodów źródłowych w mniej popularnych płytkach.
W zadaniu pomóc mogą za to narzędzia takie jak Yocto lub Buildroot. Warto przy tym zaznaczyć, że wymaga ono sporo mocy obliczeniowej. Na przykład budowa systemu na płytkę Thor96, który posiada niewiele więcej funkcji niż pusty shell, zajęła mojemu procesorowi AMD Ryzen 9 około dziewięciu godzin. Doliczając do tego przygotowanie całego procesu i walkę z błędami, na całość poświęciłem… dobre 2 tygodnie!
Na szczęście żeby uruchomić Linuksa na Raspberry Pi, wystarczy ściągnąć gotowy obraz, skopiować go na kartę SD i podłączyć.
I tutaj mała podpowiedź: jeśli stworzyłeś obraz na karcie SD i chcesz, żeby malinka połączyła się automatycznie z Wi-Fi i miała uruchomione ssh, wystarczy że stworzysz plik o nazwie ssh bez żadnych rozszerzeń oraz plik wpa_supplicant.conf z zawartością podaną w tym artykule.
Raspberry Pi – wyprowadzenia
Oprócz dobrze znanych wyprowadzeń, takich jak USB, Ethernet, Jack i HDMI, Raspberry Pi posiada także złącze protokołu MIPI (złącze nie jest standardem, tylko protokół):
- MIPI CSI – dla kamery;
- MIPI DSI – dla wyświetlacza.
Dodatkowo malinka posiada wejście-wyjście GPIO (tak samo jak moduł ESP), do których możesz podłączyć czujnik (piny 3 i 5).
Do sprawdzenia, czy na pewno wszystko jest poprawnie podłączone, przyda Ci się program i2cdetect. Znajdziesz go tutaj: https://linux.die.net/man/8/i2cdetect.
Kodowanie Raspberry Pi
W ESP wybór języka programowania był prosty. W przypadku Raspberry mamy większy wybór. Co prawda nadal możemy używać C, ale mamy też do dyspozycji Pythona (na ESP istnieje możliwość uruchomienia MicroPythona), JavaScript, Javy, C# i wiele innych języków.
Do szybkiego prototypowania według mnie idealnie nadaje się właśnie Python. Podsyłam do niego kilka przykładów:
- Jeśli chodzi o odczyt temperatury i innych danych z sensorów BME, polecam przestudiować lub wykorzystać ten kod (przyda się także dokumentacja czujnika): https://bitbucket.org/MattHawkinsUK/rpispy-misc/src/master/python/bme280.py
- W kontekście Azure i wysyłania danych do IoT Hub przydatne będą biblioteka azure-iot-device oraz następujący kod: https://github.com/Azure-Samples/azure-iot-samples-python/blob/master/iot-hub/Quickstarts/simulated-device/SimulatedDevice.py
- Do połączenia z AWS przyda się biblioteka awsiotsdk i ten kodzik: https://github.com/aws/aws-iot-device-sdk-python-v2/blob/main/samples/pubsub.py
- Z kolei przy połączeniu z GCP przydadzą się przykłady z tego repozytorium: https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/iot/api-client/mqtt_example
Odpowiednia modyfikacja powyższych przykładów pozwoli na połączenie z Raspberry Pi i przesłanie danych z płytki do chmury.
Domowe IoT. Co dalej?
To był ostatni z trzech artykułów odnośnie domowego IoT. Mam nadzieję, że udało Ci się dzięki nim pobawić z tematem.
Serdecznie zachęcam do dalszych eksperymentów. A jeśli masz dodatkowe pytania, możesz złapać mnie na LinkedIn lub wysłać do mnie wiadomość na adres: [email protected]. Dziękuję!
Już 21 czerwca dowiesz się, jak możesz wykorzystać AI w Twojej firmie. Damian Mazurek i Piotr Kalinowski wprowadzą Cię w świat sztucznej inteligencji i LLM.
Przed nami nowy rozdział! Chmurowisko dokonało połączenia z polskim Software Mind – firmą, która od 20 lat tworzy rozwiązania przyczyniające się do sukcesu organizacji z całego świata…
Grupa Dynamic Precision podjęła decyzję o unowocześnieniu swojej infrastruktury. Razem z Oracle Polska prowadzimy migrację aplikacji firmy do chmury OCI.
Już 21 czerwca dowiesz się, jak możesz wykorzystać AI w Twojej firmie. Damian Mazurek i Piotr Kalinowski wprowadzą Cię w świat sztucznej inteligencji i LLM.
Zapisz się do naszego newslettera i
bądź z chmurami na bieżąco!
z chmur Azure, AWS i GCP, z krótkimi opisami i linkami.