[PRZYKŁAD] Wysyłanie danych z Raspberry Pi Pico W do chmury Microsoft Azure

W niniejszym artykule zaprezentuję sposób połączenia układu z Raspberry Pi Pico W poprzez sieć Wi-Fi z chmurą Microsoft Azure. Opiszę konfigurację chmury oraz kod wysyłający dane z czujnika ciśnienia atmosferycznego do usługi. W projekcie wykorzystam platformę Micropython oraz prosty protokół MQTT, a także płytkę KAmodMPL3115A2 z czujnikiem ciśnienia atmosferycznego.

Usługi chmurowe we współczesnych systemach IoT

We współczesnych systemach IoT usługi chmurowe pełnią niezwykle ważną rolę. Umożliwiają gromadzenie danych z wielu czujników, analizę, wnioskowanie, inicjowanie akcji na podstawie danych, a także wiele innych działań w ramach systemu. Wysyłanie danych ze zdalnych sensorów do chmury jest podstawowym zadaniem podczas projektowania systemów IoT. Jest bowiem obecne w większości rozwiązań, niezależnie od innych wymagań projektowych, zastosowanych elementów czy technologii komunikacyjnych.

Jedną z płytek przystosowanych dla rozwiązań IoT jest Raspberry Pi Pico W z układem Wi-Fi. Płytka zawiera wszystko co potrzeba do zastosowania w tego typu projektach – dwurdzeniowy mikrokontroler RP2040 oraz moduł komunikacji bezprzewodowej. Niewielkie wymiary płytki oraz wygodne wyprowadzenia pozwalają w dość prosty sposób dołączyć dodatkowe peryferia i stworzyć prototyp (a może nawet ostateczną wersję) zdalnego sensora lub też innego urządzenia IoT.

Co prawda można zaprojektować własne, dedykowane rozwiązanie chmurowe, ale w większości przypadków korzysta się z wykupienia zasobów od jednej z platform. Oferują one różne plany subskrypcyjne, również w modelu Pay-as-you-go (płatność tylko za wykorzystane zasoby). Często dostępne są także opcje bezpłatne, które można wykorzystać do przetestowania działania chmury, lub też uruchomienia aplikacji nie potrzebującej zbyt dużych zasobów. W artykule skorzystam z jednego z najpopularniejszych dostawców usług, a mianowicie Microsoft Azure.

Informacje do chmury będą przesyłane z wykorzystaniem protokołu MQTT. Jest to lekki i prosty protokół transmisji danych oparty o wzorzec publikacja/subskrypcja. Protokół jest szeroko stosowany w aplikacjach IoT, również w przemyśle (IIoT), ale nie tylko. Na podstawie tego protokołu działa m.in. komunikator Facebook Messenger. Więcej informacji można znaleźć na stronie mqtt.org.

Kod przykładu opracowano w języku Micropython. Jak sama nazwa wskazuje jest to implementacja języka Python przeznaczona do programowania systemów wbudowanych. Bardzo szybko może ją opanować każdy, kto choć trochę zna język Python. Jako środowisko programistyczne wykorzystam Thonny, które zapewnia wygodną edycję kodu, a także możliwość wgrywania go na płytkę.

Utworzenie Azure IoT Hub w chmurze Microsoft

Pracę rozpoczniemy od utworzenia w serwisie Azure modułu IoT Hub. Ten moduł pozwala na połączenie urządzeń zdalnych z chmurą, a następnie zarządzanie przesłanymi wiadomościami. Korzysta on z koncepcji rejestracji urządzeń, co oznacza, że każdy układ otrzymuje indywidualne poświadczenie konieczne do połączenia z chmurą. IoT Hub oparto o moduł Event Hub z tą różnicą, że umożliwia ona dwukierunkową komunikację z urządzeniem. Hub obsługuje protokoły AMQP oraz MQTT.

Aby utworzyć moduł należy posiadać lub założyć konto w serwisie Azure. Można zarejestrować się na darmowy okres próbny. Projektowana aplikacja nie będzie wymagała zasobów płatnych, a więc przetestowanie jej nie będzie kosztowało ani grosza.

Po zalogowaniu do panelu użytkownika można utworzyć nowy zasób przyciskiem „Utwórz zasób”.

Rys. 1. Panel usług Azure – zaznaczony przycisk „Utwórz zasób”

Po przyciśnięciu przycisku należy wyszukać moduł „IoT Hub”, a następnie utworzyć go przyciskiem „Utwórz”. W kolejnym ekranie należy podać dane modułu, w tym nazwy grupy zasobów oraz centrum IoT. W szczególności należy wiedzieć, że centrum IoT musi mieć unikalną nazwę, gdyż będzie to część adresu służącego do łączenia z zasobami chmury. Powinniśmy w efekcie otrzymać efekt jak na obrazku poniżej.

Rys. 2. Podstawowe dane centrum IoT

W sekcji „Sieć” w ramach uproszczenia demonstracji zostawię oznaczoną opcję Dostęp publiczny. Natomiast w ekranie „Zarządzanie” można wybrać plan cenowy – najlepiej na początku oznaczyć Warstwę Bezpłatną.

Rys. 3. Konfiguracja planu subskrypcyjnego

To już wszystkie zmiany, które należy wprowadzić w konfiguracji modułu. Po kliknięciu na „Przeglądanie + tworzenie” otrzymamy podsumowanie danych modułu z uwzględnieniem ceny usługi. Po stwierdzeniu zgodności z założeniami można utworzyć Hub przyciskiem Utwórz.

Rys. 4. Podsumowanie konfiguracji modułu IoT Hub

Po zakończeniu procesu można przejść do zasobu.

Utworzenie urządzenia dla Azure IoT Hub

Kolejnym ważnym krokiem jest utworzenie i rejestracja urządzenia dla huba. Aby to zrobić należy na pasku bocznym wejść w opcję Urządzenia i kliknąć Dodaj urządzenie. Oczywiście będziemy dodawać płytkę Raspberry Pi Pico W.

Rys. 5. Przycisk „Dodaj urządzenie” w panelu Urządzenia

W następnym okienku można wybrać nazwę urządzenia. Ważniejszą opcją jest jednak wybór typu uwierzytelniania. Należy tu wybrać opcję „Klucz symetryczny” i oznaczyć opcję „Automatycznie generuj klucze”. Z kolei opcję „Połącz to urządzenie z centrum IoT” należy pozostawić włączoną.

Rys. 6. Ekran tworzenia urządzenia dla modułu IoT Hub

Narzędzie Azure IoT Explorer

Dane z czujnika ciśnienia oraz płytki Pico W będą przesyłane w postaci tzw. wiadomości telemetrycznych. Narzędzie Azure IoT Explorer pozwala na monitorowanie tych wiadomości. Program umożliwia również uzyskanie informacji o połączeniu, a także danych uwierzytelniających urządzenie. Azure IoT Explorer jest dostępny na portalu GitHub, skąd można pobrać pliki instalacyjne.

Po instalacji i uruchomieniu oprogramowania należy dodać połączenie z modułem IoT Hub. W tym celu należy kliknąć przycisk „Add Connection” i w nowo otwartym polu wkleić definicję połączenia. Te definicje można znaleźć w panelu chmury, otwierając opcję „Zasady dostępu współużytkowanego”.

Rys. 7. Ekran „Zasady dostępu współużytkowanego” w panelu chmury Azure

Na ekranie widzimy kilka poziomów dostępu, które są definiowane automatycznie podczas tworzenia huba. Odpowiednie poziomy dostępu są dostosowane do typowych zadań urządzeń w systemie. My skorzystamy z poziomu „iothubowner”, która daje pełen dostęp do wszystkich operacji, co nieco uprości demonstrację. Pamiętaj jednak, aby stosować odpowiednią politykę nadawania uprawnień, gdyż jest to niezbędny element bezpieczeństwa systemu.

W nowo otwartym oknie ukaże się zestaw kluczy oraz możliwość zmiany uprawnień. Naszym zadaniem jest skopiowanie pola „Podstawowe parametry urządzenia” i wklejenie zawartości do pola „Connection String” w Azure IoT Explorer.

Rys. 8. Okno z parametrami połączenia w panelu chmury

Po wklejeniu danych i zapisaniu ukaże się okno z listą urządzeń. Aktualnie dostępny jest jedynie jedno o nazwie picow.

Połączenie sprzętowe układu

Jak wspomniano w roli zdalnego sensora wystąpi płytka Raspberry Pi Pico W połączona do modułu KAmodMPL3115A2 z czujnikiem ciśnienia atmosferycznego. Sensor jest podłączony do mikrokontrolera za pośrednictwem magistrali I2C. Sposób połączenie zaprezentowano w tabeli, natomiast pełen układ zaprezentowano na fotografii 9.

Tab. 1. Połączenie Raspberry Pi Pico W z modułem KAmodMPL3115A2

Raspberry Pi Pico WKAmodMPL3115A2
35VDD
3GND
6SCL
7SDA

Fot. 9. Połączony układ sensora zdalnego

Kompletny rozkład wyprowadzeń płytki Pico W można znaleźć na stronie z dokumentacjami produktów Raspberry Pi pod nazwą picow/PicoW-A4-Pinout.pdf

Do pobrania

O autorze