IoT w chmurze – część III. Konfigurujemy IoT Core w Google Cloud Platform (GCP)

Karol Przybylak
25/03/2021
Foto Pixabay

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.
Google Cloud Platform UI
  • 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].
Create GCP 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].
GCP registry properties
  • 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].
GCP - 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:
GCP public key
  • Wróć do konsoli GCP i przejdź do zakładki Devices.
  • Kliknij na nazwę utworzonego przez siebie urządzenia:
GCP devices
  • Następnie przejdź do zakładki Authentication i kliknij [Add Public Key].
GCP - add public key
  • Jako Public key format wybierz ES256.
  • Wklej swój klucz publiczny w pole z wartością i kliknij [Add].
GCP add authentication key

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.
GCP configure file

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:
GCP - copy private key
  • 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:
Private key string GCP

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
Źródło: Unsplash

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).

Raspbery Pi - wejścia

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:

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ę!

AKTUALNOŚCI
16/09/20212 min
Webinar: Jak wykorzystać konto Sandbox w pracy zespołu IT?

Zastanawialiście się kiedyś gdzie bezpiecznie testować wszystkie innowacyjne pomysły i rozwiązania zespołów IT korzystających z usług chmurowych? Albo jak stworzyć optymalne warunki do nauki?
Każdy zespół pracujący z chmurą potrzebuje przestrzeni do innowacji…

Zobacz wpis
AKTUALNOŚCI
20/08/20212 min
Webinar: Oracle praktycznie – Co się w chmurze opłaca?

Już 8 września 2021 roku o godzinie 11:00 odbędzie się pierwszy webinar z serii „Oracle praktycznie: Co się w chmurze opłaca? — czyli o kosztach w Oracle…i nie tylko.”

Zobacz wpis
AKTUALNOŚCI
12/08/20212 min
[ Poszukiwani ] Cloud Architekci ze znajomością Azure, AWS, GCP lub Oracle

Rośniemy. Jednak jest to spore wyzwanie. Budowanie Zespołu wspierającego największe przedsiębiorstwa w poruszaniu się po chmurowym świecie to duża odpowiedzialność.

Zobacz wpis
AKTUALNOŚCI
Webinar: Jak wykorzystać konto Sandbox w pracy zespołu IT?

Zastanawialiście się kiedyś gdzie bezpiecznie testować wszystkie innowacyjne pomysły i rozwiązania zespołów IT korzystających z usług chmurowych? Albo jak stworzyć optymalne warunki do nauki?
Każdy zespół pracujący z chmurą potrzebuje przestrzeni do innowacji…

Zobacz wpis

Zapisz się do naszego newslettera i
bądź z chmurami na bieżąco!

Zostaw nam swój e–mail a co miesiąc dostaniesz spis najważniejszych nowości
z chmur Azure, AWS i GCP, z krótkimi opisami i linkami.