Ikona strzałka
Powrót do bloga

Zrób to sam z Azure i Arduino. Poskramiamy IoT w chmurze

Karol Przybylak
Karol Przybylak
05/10/2020
IoT w chmurze

Zainteresowanie IoT nie maleje. W naszych domach gości już całkiem sporo inteligentnych sprzętów, a przedsiębiorstwa coraz chętniej inwestują w przemysł 4.0. Większość urządzeń IoT jest połączona z chmurą, dlatego każdy z „wielkiej trójki” dostawców cloud computing (Amazon, Microsoft i Google) posiada usługi pozwalające tworzyć rozwiązania wykorzystujące technologię Internetu rzeczy.

Warto zauważyć, że większość z tych usług przeznaczona jest dla rozwiązań, w których liczba urządzeń wynosi dziesiątki, a nawet setki tysięcy. Czy to oznacza, że hobbista chcący monitorować temperaturę w swoim domu nie może wykorzystać do tego chmury?

Ależ może!

IoT dla początkujących

Nawet jako amator możesz wykorzystać chmurę do swoich projektów na małą skalę. Co więcej, jeśli rozumiesz działanie dostępnych usług, nie będzie Cię to sporo kosztowało. Niektóre rozwiązania mogą być nawet bezpłatne w ramach dostępu do darmowej oferty Free Tier oferowanej przez większość dostawców.

No dobrze, a jak połączyć chmurę i inteligentne urządzenia na własny użytek? Zobaczmy.

Która chmura do IoT? Sprawdzimy je wszystkie!

Tworząc ten wpis, długo nie mogłem zdecydować, której z czołowych chmur użyć w moim przykładzie. Dlatego zdecydowałem, że… wykorzystam je wszystkie! Dziś zaczniemy od Azure, ale jeśli interesuje Cię AWS albo GCP, spokojnie – zajmę się nimi w kolejnych artykułach. Na warsztat wezmę prosty przypadek, gdzie chcemy skorzystać z urządzeń IoT, by sprawdzić temperaturę powietrza, a następnie przesłać odczyty do chmury.

Internet rzeczy w chmurze – co jest potrzebne?

Zanim przejdę do szczegółów implementacji IoT w Azure, przyjrzę się pewnym aspektom wspólnym dla wszystkich chmur oraz sprzętowi, który jest niezależny od dostawcy chmury.

W związku z tym, że zajmujemy się projektem Internet of Things, potrzebujmy urządzenia które będzie wysyłać dane. Użycie gotowego rozwiązania byłoby za proste. Stworzymy je sami!

Arduino, czyli IoT od podstaw

Skoro interesujesz się IoT, prawdopodobnie kojarzysz Arduino. Jeśli nie – wyjaśniam. Arduino to ekosystem, dzięki któremu możemy w łatwy sposób budować różnego rodzaju urządzenia IoT. Wystarczy mikrokontroler, kilka sensorów, trochę kabelków i bibliotek, odrobina kodu i możemy stworzyć wszystko, czego zapragniemy.

Do naszego termometru wykorzystamy układ ESP32. Będzie to mózg naszego urządzenia. Posiada on wbudowany moduł Wi-Fi, dzięki któremu połączymy się z Internetem. Płytka zawiera też kilkanaście pinów GPIO, do których podłączymy nasz termometr. Oczywiście posłużymy się prostą płytką deweloperską, żeby uniknąć lutowania.

ESP32
ESP32

Naszym termometrem będzie bardzo popularny moduł BME280 firmy Bosch. Mierzy nie tylko temperaturę, lecz także wilgotność i ciśnienie powietrza (istnieje też wersja bez pomiaru wilgotności). W tym projekcie skupię się wyłącznie na temperaturze, ale jeśli chcesz, możesz dodać też pozostałe pomiary.

OK, sprzęt już mamy. Nadszedł czas na działanie!

Stroimy sprzęt

Pora połączyć kabelki i przygotować nasze IDE do pracy. Czujnik BME obsługuje dwa protokoły, I2C i SPI.  W naszym projekcie użyjemy I2C. Sam czujnik występuje na dwóch popularnych płytkach (poniżej), które różnią się liczbą wyprowadzonych pinów. Obydwie wspierają nasz protokół, jednak urządzenie po prawej nie obsługuje SPI.

BME280
BME280
  • Zacznijmy od zasilania. Na BME odpowiada za nie pin VCC lub VIN (w zależności od typu płytki), a sam moduł jest zasilany napięciem 3.3 V.
    • Na ESP32 odszukaj pin o oznaczeniu 3V3 i połącz go z pinem VCC lub VIN na czujniku BME.
    • Masa to GND. W tym projekcie masy muszą być wspólne, więc je łączymy.
    • SCL to linia zegara – łączymy ją z pinem D22 na ESP32.
    • SDA to linia danych – łączymy ją z pinem D21 na ESP32.
    • Piny CSB i SDO zostawiamy niepodłączone.
  • Czas na przygotowanie IDE. Przejdź na stronę https://www.arduino.cc/en/Main/Software, a następnie ściągnij i zainstaluj wersję oprogramowania przystosowaną do Twojego systemu.
  • Teraz przejdź do menu Plik -> Preferencje -> Ustawienia i w polu „Dodatkowe adresy ULR do menedżera płytek” wpisz https://dl.espressif.com/dl/package_esp32_index.json. Zatwierdź zmiany.
Arduino_IDE
Arduino IDE
  • Następnie przejdź do menu Narzędzia -> Płytka -> Menadżer płytek. Wyszukaj ESP32 i zainstaluj najnowszą wersję (1.0.4).
  • Nadszedł czas na podłączenie naszej płytki do komputera! Gdy to zrobisz, przejdź do IDE -> Narzędzia -> Płytka -> ESP32 Arduino i wybierz odpowiednią płytkę. Jeśli używasz tej, co ja, wybierz „ESP32 DEV Module”.
  • Przejdź teraz do menu Narzędzia -> Port i wybierz port odpowiedni do Twojego komputera.
Adruino_IDE_2

Udało się! Robota skończona. Podłączyliśmy czujnik i skonfigurowaliśmy nasze środowisko.

Możesz teraz testowo wgrać pusty projekt i zobaczyć, czy wszystko działa. Aby to zrobić, kliknij strzałkę w prawo, zaraz pod menu Edytuj. Jeśli pojawi się napis Connecting, na płytce trzeba będzie kliknąć i przytrzymać przycisk [Boot], żeby wgrać projekt.

Arduino_IDE_3

Jeśli wszystko zadziałało poprawnie, pozostało jeszcze wgranie odpowiedniej biblioteki do obsługi BME280. Przejdź do Narzędzia-> Zarządzaj bibliotekami i wyszukaj BME280. Zainstaluj „Adafruit BME280 Library”. Gotowe!

Komunikacja z urządzeniami i z chmurą

Komunikacja w IoT to dość rozbudowany temat. Aby prawidłowo do niego podejść, musimy przemyśleć wiele rzeczy i mieć dobre rozeznanie w protokołach. Główne aspekty, jakie musimy brać pod uwagę, to odległość, na jaką chcemy wysłać dane, prędkość transmisji i typ sieci, jaki chcemy utworzyć.

  • Jeśli zależy nam na dużej odległości, to najlepszym wyborem będzie LoRa albo LTE-M.
  • Jeśli mamy dużą liczbę sensorów komunikujących się ze sobą w niedalekiej odległości (np. Smart Home, Smart Factory), dobrym wyborem będzie Thread, ZigBee lub Bluetooth.
  • Jeśli zależy nam na szybkości danych i nie musimy się przejmować zużyciem energii, do transmisji zalecałbym Wi-Fi. 
  • Jeśli potrzebujemy bardzo bliskiej transmisji danych, powinniśmy pomyśleć o użyciu NFC.

Protokoły, które właśnie opisałem, w głównym stopniu dotyczą wymiany danych miedzy urządzeniami na dość niskim poziomie. Określają np., jak powinna wyglądać ramka danych, routing, itd.

Każdy protokół ma swoje wady i zalety i musimy je dobrze rozważyć, projektując nasze rozwiązane. Ważne, by przy tym uwzględnić, jakie protokoły jest w stanie obsłużyć nasz mikrokontroler, mikroprocesor lub moduł komunikacji.

Czyli który protokół wreszcie wybrać?

Lora, Thread, Wi-Fi, MQTT, Zigbee, HTTP – można się w tym wszystkim pogubić! Postaram się wytłumaczyć, jak to wygląda w przypadku ESP32 i chmury.

W naszym przypadku ESP32 obsługuje tylko Wi-Fi i Bluetooth. My użyjemy Wi-Fi – będzie on najprostszy w implementacji, a dzięki ruterowi Wi-Fi będziemy mieli zapewniony dostęp do Internetu. W przypadku innych rozwiązań takie połączenie z Internetem, a co za tym idzie z chmurą, byłoby utrudnione. Bylibyśmy zmuszeni do stworzenia bramy, dzięki której podłączylibyśmy naszą sieć (np. Thread) z Internetem.

Pozostała jeszcze kwestia, jakim protokołem wysłać dane do chmury. Przeglądarka komunikuje się z serwerem, na którym działa nasz blog, protokołem HTTP. Ten protokół możemy wykorzystać do komunikacji w rozwiązaniach IoT, ale istnieją też inne protokoły zaprojektowane specjalnie z myślą o IoT. Najpopularniejszym z nich jest MQTT.   

MQTT działa troszkę na innej zasadzie niż HTTP. HTTP to model połączenia 1:1, gdzie klient łączy się z serwerem i to z nim wymienia dane. MQTT to model 1:wielu. Serwer w tym wypadku monitoruje podłączonych klientów i wysyła wiadomość od jednego z nich do wszystkich zasubskrybowanych klientów. Sam protokół jest tak skonstruowany, żeby zużywał mniej energii niż HTTP.

Podsumowując, ESP32 podłączymy przez Wi-Fi do Internetu. Z kolei wiadomości o temperaturze będziemy wysłać do chmury za pośrednictwem MQTT.

Wysyłanie danych do Azure

Nadszedł czas na wybór usługi, do której będziemy przesłać dane z urządzeń do chmury. Idealnym kandydatem będzie Azure IoT Hub. Usługa obsługuje takie protokoły jak HTPP, MQTT i AMQT. Jest także łatwo skalowalna, pozwalając na obsługę ruchu z setek, tysięcy, a nawet milionów urządzeń.

Zobaczmy zatem, jak uruchomić IoT Hub:

  • Przejdź do portalu Azure i wyszukaj serwis IoT Hub. Stwórz nowy Iot Hub – większość konfiguracji pozostaw w ustawieniach domyślnych. Pamiętaj o unikalnej nazwie usługi, a także o wybraniu odpowiedniego regionu i grupy zasobów. Do testów i zabawy polecam wybrać bezpłatną opcję Free Tier. Potrzebujemy jeszcze konta usługi Storage Account, na którym będziemy przechowywać dane o temperaturze.
  • Mając już Iot Hub i Storage Account, możemy zabrać się za tworzenie nowego urządzenia. Żeby to zrobić, przejdź w usłudze IoT Hub do zakładki IoT devices (sekcja Explorers po lewej stronie).
Explorers_IoT devices
  • Kliknij przycisk [New]. Wpisz Device ID, np. „esp32”, a resztę pól pozostaw z wartościami domyślnymi. Kliknij [Save], by zapisać ustawienia. Gotowe!
Create a device Azure
  • By skonfigurować nowe urządzenie, kliknij na jego Device ID. Po przejściu do ustawień, skopiuj wartość pola Primary Connection String. Przyda nam się ona do połączenia termometru z chmurą.
  • Przejdź teraz do Arduino. Przygotowałem dla Ciebie kod, w którym musisz podmienić tylko dane to swojego Wi-Fi oraz Connection String: https://gist.github.com/kajoj2/2d0fdb7de92765836b7aaa0dc4a9e5dc.
  • Uzupełnij dane i wgraj kod do ESP32, klikając na strzałkę w menu u góry ekranu.
  • Jeśli przejdziesz teraz do swojego IoT Huba, w usłudze powinny zacząć pojawiać się nowe wiadomości.
IoT Hub

Składowanie danych w chmurze Azure

OK, wysyłamy już dane do chmury. A jak je odczytać? Jak zrobić z nimi coś pożytecznego?

Pokażę Ci, jak zapisać dane na Storage Account. Jednak jeśli chcesz, możesz zrobić z nimi „ciekawsze” rzeczy (może warto je na przykład dodać do jakieś bazy danych, np. Time Series Insights?).

  • Przejdźmy do portalu Azure i utworzonego przez Ciebie IoT Hub. W sekcji Messaging kliknij Message routing. Dzięki routingowi wiadomości będziemy mogli przekierowywać wiadomości z IoT Hub do innych serwisów w Azure. Obecnie są to Event Hub, Service Bus oraz Storage.
Message routing
  • Kliknij [Add], aby zdefiniować nowy routing w oknie konfiguracji.
  • Na początku musisz stworzyć punkt końcowy, którym w naszym wypadku będzie Storage Account. Aby to zrobić, w polu Endpoint wybierz „storage” i kliknij [Add endpoint].
Add a route
  • W konfiguratorze wpisz wybraną przez siebie nazwę punktu końcowego i kliknij [Pick a container], aby wybrać kontener dla swojego konta storage. Jeśli w Storage Account nie ma kontenera, należy go stworzyć i wybrać.
  • Dostosuj pozostałe ustawienia dla punktu końcowego. Poniżej wyjaśniam znaczenie poszczególnych pól. Jeśli nie wiesz, jakie ustawienia zmienić, zostaw wartości domyślnie poza polem Encoding, w którym wybierz format „JSON”.
    • Batch frequency określa, co jaki czas na koncie Storage ma się pojawić nowy plik.
    • Chunk size window określa maksymalną wielkość pliku.
    • Encoding określa rodzaj pliku. AVRO jest mniejszym formatem, ale do celów hobbistycznych lepiej użyć JSON.
    • File name format to format ścieżki, pod jaką będzie zapisany plik.
  • Zakończ tworzenie endpointa, klikając [Create].
Add a routing endpoint
  • Po stworzeniu punktu końcowego wracamy do okna routingu.
    • Wybierz świeżo stworzony punkt końcowy.
    • Data source zostaw na „Device Telemetry Messages”, dzięki czemu będziesz przekierowywać swoje wiadomości, a nie wiadomości na temat stanu urządzenia.
    • Routing query zostaw na „true”. W ten sposób wszystkie wiadomości będą trafiać do konta Storage. Później możesz dodać nowy routing, który będzie wysyłał do kolejki np. wiadomości informujące o temperaturze przekraczającej 20 stopni.
  • To już prawie koniec. Kliknij [Save], a po chwili na Storage Account powinien pojawić się plik z wiadomościami.
IoT Hub results

Azure i Arduino w kilku prostych krokach

W ten prosty sposób wcieliliśmy IoT w chmurze w życie. Ale mam nadzieję, że to dopiero początek Twojej przygody z Internetem rzeczy. Teraz wszystko zależy wyłacznie od Twojej wyobraźni.

Rozwiązanie, które przedstawiłem, możesz rozbudować o nowe funkcje. W kolejnych postach pokażę, jak wdrożyć je na chmurach od Amazona i Google. Tymczasem jeśli masz jakiekolwiek pytania odnośnie wdrożenia IoT w chmurze, napisz do nas.

AKTUALNOŚCI
13/06/20232 min.
AI w średniej firmie: Tworzenie przyszłości przy użyciu LLM.

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.

Zobacz wpis
AKTUALNOŚCI
14/02/20232 min
Chmurowisko łączy się z Software Mind

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…

Zobacz wpis
AKTUALNOŚCI
09/11/20225 min
Migracja systemu Dynamic Precision do Oracle Cloud

Grupa Dynamic Precision podjęła decyzję o unowocześnieniu swojej infrastruktury. Razem z Oracle Polska prowadzimy migrację aplikacji firmy do chmury OCI.

Zobacz wpis
AKTUALNOŚCI
AI w średniej firmie: Tworzenie przyszłości przy użyciu LLM.

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.

Zobacz wpis
Grafika przedstawiająca chmuręGrafika przedstawiająca chmurę

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.