Internet Rzeczy w pomiarach środowiskowych (4). Stacja pogodowa Enviro Weather firmy Pimoroni

Internet Rzeczy w pomiarach środowiskowych (4). Stacja pogodowa Enviro Weather firmy Pimoroni

Zbudowanie własnej stacji pogodowej może być naprawdę satysfakcjonującym projektem. Jednak do badania aury potrzebne są dość wyspecjalizowane czujniki. Zestaw Weather Meter Kit (SEN-15901) firmy SparkFun zawiera trzy sensory: kierunku wiatru, prędkości wiatru oraz ilości opadów. Razem z płytką Enviro Weather (PIM628) firmy Pimoroni, zawierającą czujniki temperatury, wilgotności, natężenia oświetlenia i ciśnienia, tworzy kompletną stację pogodową z wgranym programem do cyklicznego wykonywania oraz udostępniania pomiarów wielu parametrów środowiska.

Autor składa podziękowania Panu Zbigniewowi Szymańskiemu za skuteczne próby pracy z płytką Enviro Weather.

W sieci można znaleźć wiele propozycji, które umożliwiają zbudowanie zestawów do monitorowania pomiarów pogodowych. Ciekawe i bardzo dokładne omówienie zagadnień związanych z konstrukcją własnej stacji pogodowej zamieszczone zostało w artykule „Build your own weather station” [4]. Znajdują się tam dokładne opisy elementów, układów, obliczeń, a także oprogramowania. Dostępne są też wyspecjalizowane nakładki przeznaczone do różnych systemów mikroprocesorowych. Zestawy stacji pogodowej można nabyć jako samodzielne komplety [1, 6] lub razem z dedykowaną elektroniką. Za przykład niech posłuży tu płytka bazowa „weather:bit” firmy SparkFun do połączenia zestawu stacji pogodowej z płytką mico:bit [7]. Kolejny przykład to „Weather HAT + Weather Sensors Kit” firmy Pimoroni, który umożliwia dołączenie zestawu stacji pogodowej do płytki Raspberry Pi [8].

Zestaw Weather Meter Kit (SEN-15901)

Weather Meter Kit (SEN-15901) firmy Sparkfun stanowi kompletny mechaniczno-elektryczny zestaw do budowy stacji pogodowej [1]. Zawiera on trzy czujniki: kierunku wiatru, prędkości wiatru i opadów oraz elementy mechaniczne konstrukcji masztu pomiarowego (fotografia tytułowa [6]). Żaden ze wspomnianych sensorów nie zawiera aktywnej elektroniki, zamiast tego wykorzystują one uszczelnione magnetyczne kontaktrony i magnesy. Czujniki do prawidłowego działania wymagają podłączenia odpowiedniego zasilania, co umożliwiają wyprowadzone z modułów pomiarowych przewody zakończone złączami RJ11. Konstrukcja nie wymaga lutowania.

Fotografia 1. Zestaw do budowy stacji meteorologicznej [3]

W zestawie znajdują się [3] (fotografia 1):

  • czujnik kierunku wiatru (u dołu po prawej),
  • czujnik prędkości wiatru (u dołu po lewej),
  • czujnik opadów (u góry po lewej),
  • dwuczęściowy maszt montażowy (dwie metalowe rurki),
  • ramię montażowe czujnika deszczu (u góry po prawej),
  • ramię montażowe czujników wiatru (na prawo od rurek),
  • jedno opakowanie zawierające śruby/nakrętki,
  • dwie opaski zaciskowe,
  • tworzywowe opaski zaciskowe.

Czujniki wiatru i deszczu najpierw należy przymocować do słupka. Sensory wiatru montuje się na dwustronnym ramieniu, umieszczonym na szczycie słupka. Należy pamiętać, że anemometr ma krótki kabel, który podłącza się do wiatrowskazu, dzięki czemu oba czujniki wiatru mogą korzystać z tego samego długiego kabla. Czujnik deszczu montowany jest na własnym ramieniu umieszczonym z boku słupka. Dokładna instrukcja montażu krok po kroku (ze zdjęciami) zamieszczona w „Weather Meter Hookup Guide” [3] stanowi bardzo przejrzysty przewodnik dotyczący łączenia wszystkich elementów zestawu.

Czujnik opadów (COM-B020)

Większość deszczomierzy dokonuje pomiaru opadów w milimetrach wysokości, zebranych na jednym metrze kwadratowym w określonym czasie [4]. Czujnik opadów COM-B020, dostarczany z zestawem stacji pogodowej, jest w rzeczywistości prostym urządzeniem mechanicznym [6] - jego budowę i działanie można przeanalizować samodzielnie. Należy delikatnie ścisnąć zaciski po obu stronach, a obudowa wówczas odskoczy. Wewnątrz krawędzi - pomiędzy dwoma wiadrami - znajduje się mały cylindryczny magnes, skierowany w stronę tylnej ściany. Natomiast wewnątrz tylnej ściany (na środku) znajduje się kontaktron (zakryty). Wtyczka ma tylko dwa środkowe styki.

Ten miernik deszczu to w zasadzie samoopróżniające się wiadro przechylne (fotografia 2). Deszcz zbierany jest przez lejkowatą obudowę i kierowany do wiadra. Gdy zbierze się wystarczająca ilość wody deszczowej, wiadro przewróci się, woda wypłynie, a wiadro znajdujące się naprzeciwko podniesie się na miejsce, w którym będzie napełniane. Oznacza to, że każde 0,2794 mm (0,011 cala) deszczu, które spadnie na czujnik, przechyli wiadro, wylewając wodę i zamykając kontakt. Każde przechylenie wiadra powoduje wygenerowanie krótkiego zwarcia. Zliczanie impulsów w czasie określa poziom opadów. Ten typ czujnika opadów do poprawnej pracy wymaga zamontowania dokładnie w poziomie. Pomaga w tym poziomnica oczkowa, umieszczona wewnątrz lejkowatej obudowy.

Fotografia 2. Czujnik opadów po zdjęciu obudowy [4]

Anemometr - czujnik prędkości wiatru (COM-B020)

Anemometr COM-B020 (miernik prędkości wiatru) koduje prędkość wiatru, generując impulsy kontaktronu (zwarcia do masy) przy każdym pełnym obrocie [6]. Przy prędkości wiatru 2,4 km/h generuje impuls raz na sekundę. Badania pokazują, że na peny obrót przypadają dwa zwarcia kontaktronu. Wtyczka krótkiego kabla ma tylko dwa środkowe styki.

Czujnik kierunku wiatru (COM-B020)

Wewnątrz łopatki czujnika COM-B020 [6] znajduje się osiem przełączników (kontaktronów), każdy z własnym, unikalnym rezystorem (rysunek 1) [3]. Gdy wiatrowskaz się obraca, magnes zamyka kontaktrony. Magnes łopatki może potencjalnie zamknąć dwa kontaktrony jednocześnie, umożliwiając odczyt 16 pozycji - jednak badania praktyczne wykazały, że 8 położeń jest bardziej realistycznych.

Za pomocą zewnętrznego rezystora można utworzyć dzielnik napięcia. Pomiar napięcia wyjściowego przetwornikiem analogowo-cyfrowym w mikrokontrolerze pozwala określić, w którym kierunku ustawiony jest wiatrowskaz. Napięcie wyjściowe będzie zależeć od wartości użytego rezystora zewnętrznego, typowo ma on wartość 10 kΩ. Zależność wartości rezystancji i napięcia od kierunku, przy zasilaniu 5 V oraz 3,3 V, jest pokazana w tabeli 1 [3]. Dla ułatwienia użytkowania najlepiej, gdy wartość odpowiadająca stopniowi 0 reprezentuje północ. Na obudowie czujnika zaznaczone są małe (ledwo widoczne) znaczki czterech stron świata (NWSE). Podczas instalowania i ustawiania mierników pogody należy upewnić się, że oznaczenia kierunku są skierowane we właściwej orientacji. Należy również pamiętać, że wiatrowskaz „wskazuje” w kierunku, z którego wieje wiatr.

Na rysunku 1 pokazane są gniazdka wyposażone w cztery końcówki. Obecna wersja czujników stosuje standardowe gniazdka RJ11 z sześcioma pinami.

Rysunek 1. Schemat czujnika kierunku wiatru [3]

Zestawy Enviro

Enviro firmy Pimoroni to rodzina programowalnych płytek do rejestracji danych z czujników. Zostały one zaprojektowane tak, aby były wygodne w użyciu i łatwe do umieszczenia w domu, ogrodzie lub miejscu pracy. Wszystkie mają tryb głębokiego uśpienia, dzięki czemu mogą pracować na baterii przez długi czas, bez konieczności stosowania przewodów zasilania. Płytki Enviro oznaczone jako „Pico W Aboard” mają na dolnej stronie bezpośrednio wlutowaną (SMD) płytkę Raspberry Pi Pico W [9]:

  • Enviro Indoor (PIM630) - Bezprzewodowa płytka monitorująca środowisko, do śledzenia warunków wewnętrznych w domu, biurze lub innym środowisku. Czujniki pokładowe mogą mierzyć temperaturę, wilgotność, ciśnienie, gaz (BME688) oraz światło i kolor (BH1745).
  • Enviro Indoor +Accesory Kit (PIM638) - Dodatkowo w zestawie pudełko zasilania, baterie i kabel USB.
  • Enviro Urban (PIM629) - Bezprzewodowa płytka monitorująca jakość powietrza zewnętrznego z czujnikami: środowiskowymi (BME280), cząstek stałych (PMSA003I) oraz mikrofonem (SP0410HR5H-PB).
  • Enviro Urban +Accesory Kit (PIM639) - Dodatkowo w zestawie obudowa wodoszczelna, pudełko zasilania, baterie i kabel USB
  • Enviro Grow + Sensors (PIM627) - Bezprzewodowa płytka z czujnikami środowiskowymi (BME280), światła i zbliżenia (LTR-559) oraz trzema czujnikami wilgotności gleby z kablami.
  • Enviro Grow +Accesory Kit (PIM637) - Dodatkowo w zestawie trzy pompy wodne, pudełko zasilania, baterie i kabel USB
  • Enviro Weather - Board Only (PIM628) - Bezprzewodowa płytka z czujnikami temperatury, ciśnienia, wilgotności i gazu (BME688), światła i zbliżenia (LTR-559) oraz gniazdkami do podłączenia czujników wiatru i deszczu.
  • Enviro Weather - Weather Station Kit (PIM640) - Bezprzewodowa stacja pogodowa do monitorowania klimatu i środowiska zawierająca płytkę z czujnikami temperatury, ciśnienia, wilgotności i gazu (BME688), światła i zbliżenia (LTR-559) oraz czujniki wiatru i deszczu (zestaw Weather Meter Kit, SEN-15901).

Wszystkie płytki „Pico W Aboard” mają takie same rozwiązanie zasilania, z osobnym napięciem o wartości 3,3 V, wytwarzanym przez układ regulatora LDO typu AP2138N firmy Diodes oraz zegar czasu rzeczywistego (RTC) typu PCF85063ATL firmy NXP.

Kolejna płytka Enviro+ Pack (PIM635) na górnej stronie ma wbudowany kolorowy ekran LCD o przekątnej 1,54 cala i wyposażona została w fabrycznie wlutowane czujniki: temperatury, ciśnienia, wilgotności i gazu (BME688), światła i zbliżenia (LTR-559) oraz mikrofon MEMS (SP0410HR5H-PB). Na dolnej stronie zamontowane zostały złącza żeńskie do podłączenia płytki Raspberry Pi Pico lub Pico W.

Płytka Enviro Weather (PIM628)

Widok płytki Enviro Weather (PIM628) pokazany jest na fotografiach 3a i 3b. Na dolnej stronie płytki wlutowana została bezpośrednio (SMD) płytka Raspberry Pi Pico W, udostępniająca gniazdko microUSB oraz przycisk BOOTSEL. Po tej samej stronie PCB modułu Enviro Weather zamontowane jest też gniazdko zasilania bateryjnego BATT (JST-PH), przycisk RESET (SW_RESET) dołączony do wejścia RUN procesora RP2040 oraz dwie diody LED (widoczne także od góry). Z kolei na stronie górnej zamontowano: czujnik światła LTR-559 (LIGHT), czujnik ciśnienia, temperatury i wilgotności (BME280), gniazdko komunikacji I²C standardu Qwiic (QW/ST), podwójne gniazdko RJ11 na potrzeby dołączenia czujnika deszczu (RAIN) oraz wiatru (WIND).

Fotografia 3. Płytka Enviro Weather, a) widok od dołu, b) widok z góry [9]

Dodatkowo udostępnione zostały:

  • Przycisk użytkownika POKE (STATUS, dołączony do wejścia GPIO7 procesora RP2040) wybudza płytkę ze stanu uśpienia i pozwala na natychmiastowy odczyt (gdy dostępne jest zasilanie z gniazdka BATT).
  • Dioda ACTIVITY (LED_ACT, biała, zamontowana pod spodem) pulsuje, gdy płytka pracuje (po wybudzeniu), błyska szybko w trybie konfiguracji.
  • Dioda WARNING (LED_ALARM, czerwona, zamontowana pod spodem) świeci lub miga, jeśli wystąpił błąd, np. brak połączenia.

Dioda LED_ACT jest poprzez rezystor 1 kΩ sterowana z wyjścia GPIO6 procesora RP2040. Dioda LED_ALARM jest - także poprzez rezystor 1 kΩ - podłączona do wyjścia CLKOUT układu PCF85063 (RTC).

Właściwości płytki Enviro Weather [9]:

  • Raspberry Pi Pico W
    • Dual Arm Cortex M0+ działający z częstotliwością do 133 MHz i wyposażony w 264 kB pamięci SRAM.
    • 2 MB pamięci flash QSPI obsługującej XiP.
    • Zasilany i programowany przez USB micro-B.
    • Bezprzewodowa komunikacja 2,4 GHz (Wi-Fi, Bluetooth).
  • Czujnik BME280:
    • Pomiar ciśnienia: od 300 do 1100 hPa.
    • Pomiar temperatury: od -40 do 85°C.
    • Pomiar wilgotności: od 0 do 100% RH.
    • Interfejsy I²C oraz SPI.
  • Czujnik LTR-559
    • Pomiar natężenia oświetlenia od 0,01 do 64000 lx.
    • Czujnik zbliżeniowy do 5 cm.
    • Filtr UV/IR.
    • Interfejs I²C.
  • Funkcja uśpienia/budzenia za pomocą RTC.
  • Przycisk użytkownika.
  • Przycisk resetowania RESET.
  • Przycisk BOOTSEL (na płytce Raspberry Pi W).
  • Złącze akumulatora JST-PH.
  • Dioda LED użytkownika.
  • Dioda LED ostrzegawcza.
  • Złącze Qwiic/Stemma QT.
  • 2× złącze RJ11.

Czujnik ciśnienia, temperatury i wilgotności BME280

Układ scalony BME280 firmy Bosch wykonuje pomiary ciśnienia (300...1100 hPa, 18/20 bitów), temperatury (-40°C...+85°C, 18/20 bitów) oraz wilgotności względnej (0...100%, 16 bitów) w technologii pojemnościowej [11]. Udostępnia on pomiary wilgotności względnej w zakresie 0...100% z rozdzielczością 0,008% RH/LSB oraz dokładnością ±3% RH (w zakresie 20...80% RH). Czas odpowiedzi wynosi (τ0...63%) 1 s, dryft długoterminowy (20...80% RH) 0,5% RH/rok, a histereza ±1% RH. Wykonywany wewnętrznie precyzyjny pomiar temperatury umożliwia wewnętrzne skompensowanie termiczne pomiarów pozostałych mierzonych parametrów. Układ jest skalibrowany fabrycznie. Pracuje w szerokim zakresie zasilania 1,71...3,6 V. Pobór prądu: 100 nA w stanie uśpienia, 340 μA przy pomiarze RH, 1,8 μA średnio przy odczycie 1 Hz (RH/T) oraz 3,6 μA (RH/T/P). Układ obsługuje łącze komunikacyjne standardu I²C oraz SPI z osobnym napięciem zasilania od 1,2V...3,6 V. Dostarczany jest w metalowej obudowie 2,5×2,5×0,93 mm.

Wybór standardu interfejsu komunikacyjnego określony zostaje w trakcie podawania zasilania, w zależności od poziomu logicznego na nóżce CSB. Jeśli stan jest wysoki (VDDIO), to ustawiany jest I²C, gdy zero - to SPI.
BME280 obsługuje tryby Fast i High Speed standardu I²C. Adres układu na szynie zależy od stanu wejścia SDO i w przypadku dołączenia go do masy przyjmuje wartość 0x76, zaś połączeniu do VDDIO odpowiada wartość 0x77. BME280 obsługuje tryby ‘00’ (CPOL=CPHA=‘0’) oraz ‘11’ (CPOL=CPHA=‘1’) standardu SPI w konfiguracji 3- oraz 4-sygnałowej (CLK 10 MHz).

Na płytce Enviro Weather układ BME280 skonfigurowano do pracy ze standardem komunikacji I²C oraz zasilaniem 3,3 V.

Czujnik światła otoczenia z detekcją zbliżeniową LTR-559

Układ scalony LTR-559 firmy LiteOn jest czujnikiem światła otoczenia (ALS, Ambient Light Sensor) oraz sensorem zbliżeniowym (PS, Proximity Sensor) [12]. Układ wyposażony został w dwa kanały do pomiaru światła. W jednym z nich uzyskujemy charakterystykę spektralną zbliżoną do oka ludzkiego (z tłumieniem podczerwieni), w drugim zaś mierzone jest pasmo widzialne z podczerwienią. Pomiar światła otoczenia przebiega w liniowym zakresie 0,01…64 000 lx z rozdzielczością 16 bitów. Dodatkowo czujnik wykonuje kompensację temperaturową pomiarów oraz tłumi migotanie światła na częstotliwości 50/60 Hz.

Układ zawiera diodę podczerwoną IRED ze sterownikiem prądowym. Wykrywanie obecności z rozdzielczością 11 bitów wykonywane jest w zakresie do 5 cm (typ. 2 cm). Wyjście INT pozwala na zgłaszanie przerwania przy przekroczeniu konfigurowalnego progu pomiaru światła lub odległości.

Układ pracuje w zakresie temperatur od -30°C do 70°C z zasilaniem 2,4...3,6 V i poborem prądu 250 μA (w stanie aktywnym) lub 5 μA (w stanie czuwania). Zasilanie diody LED IRED w zakresie 2,5...4,35 V zapewnia wbudowany driver prądowy o zakresie 5...100 mA. Układ obsługuje szynę komunikacji I²C w trybie FAST (400 kHz) z adresem 0x23 i zakresem zasilania szyny 1,7...3,6 V.

Na płytce Enviro Weather układ LTR-559 jest skonfigurowany z zasilaniem 3,3 V oraz z takim samym zasilaniem diody LED IRED. Wyjście INT dołączono do wejścia GPIO3 procesora RP2040.

Zegar czasu rzeczywistego PCF85063

Układ scalony PCF85063ATL firmy NXP to zegar czasu rzeczywistego (RTC) i kalendarz oraz timer. Układ zoptymalizowany został pod kątem niskiego zużycia energii [13]. Pracuje z kwarcem 32,768 kHz, a rejestr offsetu umożliwia precyzyjne dostrojenie zegara.

Zalecane zasilanie układu to 0,9...5,5 V, a zasilanie szyny I²C: 1,8...5,5 V. Pobór prądu 18 μA (aktywna szyna I²C) lub 0,22 μA (szyna nieaktywna). Wszystkie adresy i dane są przesyłane poprzez magistralę I²C (adres 0x51) z maksymalną szybkością 400 kbit/s. Adres rejestru ulega automatycznemu zwiększeniu po każdym zapisanym lub odczytanym bajcie danych. Układ timera może generować sygnał na wyjściu /INT z odstępem czasu od 244 μs do 4 godz. 15 min. Na wyjściu CLCKOUT może być ustawiony poziom niski lub przebieg o częstotliwości od 1 Hz do 21 768 Hz (domyślnie po resecie).

Na płytce Enviro Weather układ PCF8563A jest zasilany z napięcia V+_A0 (3,3 V). Układ PCF85063A jest konfigurowany do generowania sygnału INT. Do wyjścia /INT dołączony został tranzystor MOSFET wytwarzający sygnał RTC_ALARM. Wyjście CLKOUT układu jest dołączone do diody LED (LED_ALARM).

Płytka Raspberry Pi Pico W

Raspberry Pi Pico W firmy Raspberry Pi to płytka z mikrokontrolerem RP2040 wyposażonym w dwa rdzenie ARM Cortex-M0+ pracujące z częstotliwością do 133 MHz oraz pamięć RAM o pojemności 264 kB [10]. Na płytce znajdują się również 2 MB pamięci QSPI flash. Mikrokontroler RP20240 udostępnia rozbudowane interfejsy komunikacyjne: 2×SPI, 2×I²C, 2×UART, 3×12-bitowy ADC, 16 kanałów PWM oraz obsługę trybów niskiego zużycia energii: uśpienia (sleep) i trybu drzemki (dormant). Układ może być programowany w języku C/C++ lub MicroPython.

Płytka ma zamontowane gniazdko microUSB służące do zasilania i przesyłania danych (USB 1.1 w trybach Host oraz Device). Na PCB trafił także układ scalony CYW43439 firmy Infineon realizujący łączność bezprzewodową w standardzie Wi-Fi 4 (IEEE 802.11b/g/n) oraz Bluetooth 5.2 (BDR, EDR i BLE) z pojedynczą anteną współdzieloną.

Po obu stronach płytki znajdują się pady umożliwiające wlutowanie złączy goldpin (2×20) lub bezpośrednie przylutowanie do płytki drukowanej (SMD). Udostępniają one zasilanie oraz 26 wyprowadzeń GPIO.

Zestaw stacji pogodowej Enviro Weather (PIM640)

Kompletna stacja pogodowa Enviro Weather (PIM640) [2] firmy Pimoroni zawiera zestaw do budowy stacji pogodowej Weather Meter Kit (SEN-15901) [1] z trzema czujnikami [6]: kierunku wiatru, prędkości wiatru i opadów oraz elementami mechanicznymi konstrukcji masztu pomiarowego (fotografia 1).

Załączona jest też płytka Enviro Weather (PIM628) [9] oraz pojemnik na trzy baterie AAA i odporna na warunki atmosferyczne obudowa - ekran Stevensona (fotografia tytułowa, biała tworzywowa rura). Ta praktyczna osłona chroni elektronikę, która musi znajdować się na zewnątrz (np. czujniki temperatury i wilgotności), przed słońcem i deszczem, jednocześnie utrzymując przepływ powietrza. Szczeliny w osłonie ochronnej zapewniają cyrkulację powietrza wewnątrz, gwarantując dokładne i niezakłócone odczyty, nawet w bezpośrednim świetle słonecznym. Praca ze stacją okazuje się identyczna, jak z samą płytką Enviro Weather (PIM628) i została omówiona w dalszej części artykułu.

Opis wszystkich elementów stacji pogodowej Enviro Weather zamieszczono na stronach firmowych produktu: Enviro Weather Station Kit (PIM640) [2], Enviro Weather (Pico W Aboard) (PIM628) [9] oraz Getting Started with Enviro (Pico W Aboard) [5]. Dokładne opisy oprogramowania znajdują się na GitHubie firmowym Enviro MicroPython firmware [14]. W gałęzi „documentation” znajdują się opisy płytki Enviro Weather [17], pracy z płytką Getting Started with Enviro [15], aktualizacji oprogramowania firmowego Upgrading Firmware [18], dołączania do chmury obliczeniowej Adafruit IO [16], pracy z problemami Troubleshooting your Enviro setup oraz opis procesu bootowania Tips if you want to modify the code.

Pierwsze uruchomienie płytki Enviro Weather

Podłącz baterię lub kabel USB do płytki Enviro i naciśnij przycisk POKE z przodu płytki, aby ją wybudzić. Dioda ACTIVITY zaświeci się, a po około sekundzie zacznie pulsować (dosyć szybko - wskazując, że urządzenie działa). Automatycznie przełączy się ona w tryb konfiguracji. Płytka Enviro dostarczana jest z preinstalowanym oprogramowaniem, dzięki któremu można od razu rozpocząć rejestrowanie danych. Zaletę Enviro stanowi fakt, że całe oprogramowanie jest przechowywane na urządzeniu w postaci skryptów MicroPython, które łatwo otworzyć, by sprawdzić każdy szczegół ich działania, a także zmienić pewne elementy.

Oprogramowanie obsługuje wysyłanie danych do wielu miejsc docelowych:

  • Adafruit IO: Platforma (chmura) zaprojektowana przez Adafruit do przechowywania i wyświetlania danych.
  • MQTT: Najpopularniejszy protokół przesyłania wiadomości w Internecie Rzeczy (IoT).
  • InfluxDB: Platforma, na której programiści tworzą aplikacje IoT, analitykę i chmurę.
  • Adres HTTP: Dane są wysyłane do podanego adresu URL.

Dołączanie aplikacji Thonny do płytki Enviro Weather

Thonny to środowisko IDE o otwartym kodzie źródłowym, które służy do tworzenia i przesyłania programów MicroPython do różnych płytek programistycznych, takich jak Raspberry Pi Pico, ESP32 oraz ESP8266 [20].

1. W komputerze zainstaluj najnowszą wersję programu Thonny.
2. Dołącz zaprogramowaną płytkę Enviro Weather kablem USB do komputera.
3. Sprawdź w Menadżerze urządzeń, który port COMxx został przypisany do dołączonej płytki.
4. Uruchom program Thonny.
5. Kliknij na ikonkę trzech linii w prawym dolnym rogu i wybierz Configure interpreter.
6. Ustaw typ interpretera na MicroPython (Raspberry Pi Pico).
7. Z menu w prawym dolnym rogu wybierz MicroPython (Raspberry Pi Pico) ° Board CD @COMxx.
8. Z okna Raspberry Pi Pico otwórz plik main.py.
9. Kliknij przycisk Stop/Restart backend .
10. Kliknij przycisk Run current script .

Płytka z oprogramowaniem fabrycznym startuje w trybie konfiguracji, a biała dioda ACTIVITY szybko miga. Płytka Enviro Weather w trybie konfiguracji wystawia punkt dostępowy Wi-Fi o nazwie „Enviro Weather Setup”. W oknie Shell programu Thonny zostanie wyświetlony log wykonywanych operacji - na rysunku 2 pokazano sytuację po uruchomieniu punktu dostępowego na porcie 80, połączeniu z komórką i wyświetleniu pierwszej strony.

Rysunek 2. Okno aplikacji Thonny po pierwszym podłączeniu płytki Enviro Waether

Log wszystkich operacji znajduje się w pliku log.txt na płytce Enviro.

Aktualizacja oprogramowania firmowego z transferem pliku obrazu

Użytkowanie płytki Enviro Waether najlepiej rozpocząć od aktualizowania oprogramowania firmowego. Aktualizacja jest opisana na stronie Upgrading Firmware [18].

11. Pobierz ze strony Enviro MicroPython firmware [14] najnowszą wersję firmowego pliku obrazu (uf2) zawierającą jednocześnie Enviro i MicroPythona. W chwili pisania niniejszego artykułu jest to plik pimoroni-enviro-v1.20.4-micropython-enviro-v0.0.10.uf2.
12. Trzymaj wciśnięty przycisk BOOTSEL płytki Raspberry Pi Pico W (pod spodem płytki Enviro) i podłącz ją kablem USB do komputera.

Spowoduje to przejście oprogramowania płytki Pico W do trybu DFU - na komputerze otwarte zostanie okno RPI-RP2, pokazujące zawartość dysku udostępnianego przez Pico W.

13. Przeciągnij pobrany plik uf2 do okna dysku RPI-RP2.

Płytka Pico W uruchomi się ponownie z najnowszą wersją MicroPythona; nie będzie już udostępniała dysku - przejdzie bezpośrednio do trybu konfiguracji.

Uwaga! Nastąpi skasowanie poprzedniej zawartości pamięci flash płytki, w tym pliku config.py oraz katalogów readings i uploads. Jeśli są potrzebne, należy wcześniej wykonać ich kopie.

Aktualizacja oprogramowania firmowego z transferem plików projektu

Standardowo pełna wersja obrazu nie zawiera najnowszej wersji MicroPythona. Jednak można osobno załadować jego najnowszą wersję, a potem dodać pliki aktualnej aplikacji Enviro.

14. Pobierz ze strony Pimoroni Pico Libraries and Examples [19] najnowszą wersję firmowego pliku obrazu (uf2) zawierającego MicroPythona. Obecnie jest to plik pimoroni-enviro-v1.21.0-micropython.uf2.
15. Trzymaj wciśnięty przycisk BOOTSEL płytki Raspberry Pi Pico W (pod spodem płytki Enviro) i podłącz ją kablem USB do komputera.
16. Odczekaj na koniec konfigurowania sterowników Windows.
17. Przeciągnij pobrany plik uf2 do okna dysku RPI-RP2.
18. Jeśli istnieje taka potrzeba - ponownie odczekaj do końca konfigurowania driverów systemowych.

Teraz kolej na aplikację Enviro.

19. Pobierz ze strony Enviro MicroPython firmware [14] (link Enviro releases) folder projektu aplikacji Enviro (zip). Obecnie jest to plik enviro-v0.0.10.zip.
20. Rozpakuj plik zip.
21. Odłącz płytkę Enviro Weather od komputera i dołącz ją ponownie kablem USB.
22. Uruchom program Thonny.
23. Z menu w prawym dolnym rogu wybierz MicroPython (Raspberry Pi Pico) ° Board CD @COMxx.
24. W oknie Files This computer otwórz folder z rozpakowanym projektem aplikacji Enviro.
25. W oknie This computer zaznacz linie: enviro, phew oraz main.py.
26. Kliknij je prawym klawiszem myszki i wybierz Upload to. Czekaj na zakończenie transferu.
27. Kliknij w menu przycisk Stop/Restart backend.
28. Otwórz plik main.py na Raspberry Pi Pico.
29. Kliknij w menu przycisk Run current script.
30. W oknie Shell przejrzyj log startowy.

Konfigurowanie konta chmury Adafruit IO

Adafruit IO to bardzo prosty sposób na rozpoczęcie przechowywania danych w chmurze, dzięki czemu można zacząć działać w ciągu kilku minut. Skonfigurowanie prostego panelu do przeglądania danych z czujników jest łatwe. Adafruit oferuje darmowy poziom, który pozwala na pracę z maksymalnie 10 kanałami.

31. Otwórz stronę https://io.adafruit.com/.
32. Utwórz konto Adafruit, klikając opcję Get Started for Free.
33. Wypełnij dane.

Nazwa użytkownika będzie później potrzebna.

34. Gdy jesteś zalogowany, kliknij pozycję IO w menu strony adafruit.io.
35. Kliknij żółty przycisk (klucza) w prawym górnym rogu strony.

Klucz jest długą liczbą, dlatego najlepiej skopiować go, aby nie wymagał późniejszego zapisywania/wpisywania.

36. W menu strony kliknij polecenie Feeds.

Utwórz nową grupę o nazwie „enviro”.

37. Kliknij New Group.
38. Wpisz nazwę grupy, np. enviro. Kliknij Create.

Nie musisz ręcznie tworzyć kanałów dla Enviro - zostaną one utworzone automatycznie.

Bezpłatna obsługa Adafruit IO umożliwia przechowywanie danych przez 30 dni i pozwala na publikowanie do 30 punktów danych na minutę. Taka liczba wydaje się spora, ale Enviro zwraca jednocześnie do 10 różnych odczytów z czujników. Płytka może - przy braku dostępu do chmury - przechowywać odczyty przez kilka godzin, a po podłączeniu zostaną one wysłane jednocześnie.

Dołączanie Enviro do chmury Adafruit IO

Aby skonfigurować płytkę Enviro Weather i rozpocząć rejestrowanie/publikowanie zdalnie danych, trzeba przejść proces udostępniania. Można to zrobić za pomocą telefonu lub innego urządzenia obsługującego Wi-Fi, takiego jak tablet lub laptop.

39. Upewnij się, że płytka Enviro Weather ma zasilanie bateryjne lub USB.

Po włączeniu zasilania płytka powinna przejść do trybu konfiguracji, a biała dioda ACTIVITY powinna szybko migać. Jeśli tak się nie dzieje, spróbuj nacisnąć przycisk POKE.
Płytka Enviro Weather, pracująca w trybie konfiguracji, wystawia punkt dostępowy Wi-Fi z siecią o nazwie „Enviro Weather Setup”.

40. W telefonie (lub innym urządzeniu bezprzewodowym) przejdź do ustawień Internetu/sieci bezprzewodowej.
41. Znajdź i połącz się z siecią bezprzewodową o nazwie „Enviro Weather Setup”.

Po połączeniu pokazywana jest strona pico.wireless.

Niektóre okna konfigurowania, na telefonie z Androidem, są pokazane na rysunkach 3a...e.

Rysunek 3. Okna telefonu podczas dołączania Enviro Weather do chmury

42. W pierwszym oknie kliknij Ready? Let’s go! (rysunek 3a).
43. Wpisz nazwę płytki Enviro Weather, np. enviro1 (rysunek 3b).
44. Wybierz dostępną sieć Wi-Fi z obsługą Internetu, wpisz hasło, kliknij Logging (rysunek 3c).
45. Wybierz Every five minutes oraz Every reading, kliknij Uploads (rysunek 3d).
46. Wybierz, gdzie przesyłać dane: Afruit IO.
47. Wpisz nickname swojego konta Afruit IO oraz wpisz (wklej) klucz (rysunek 3e).

Biała dioda ACTIVITY cały czas szybko miga.

48. W następnym oknie kliknij Reset the board.

Dioda ACTIVITY dopiero teraz gaśnie.

Log operacji wykonywanych podczas ponownego uruchomienia płytki jest pokazany na rysunku 4. Procesor zostaje wybudzony przez zegar RTC po 5 minut. Wtedy uruchamia się dioda ACTIVITY na sekundę, po czym pulsuje kilka razy. W ten sposób sygnalizowane jest wykonywanie pomiarów oraz wysyłanie danych do sieci.

Rysunek 4. Okno aplikacji Thonny po skonfigurowaniu płytki Enviro Waether

Jeśli płytka jest podłączona do zasilania z gniazdka USB, to procesor nie przechodzi do stanu uśpienia. Urządzenie zachowuje połączenie poprzez USB z komputerem i dalej wystawiany jest wirtualny port COM.

Jeśli płytka jest zasilana z gniazdka BATT, procesor wchodzi w stan uśpienia.

Ponowne konfigurowanie płytki Enviro Weather

Można ponownie uruchomić tryb konfigurowania płytki Enviro Weather.

49. Wciśnij i trzymaj przycisk POKE.
50. Przyciśnij i zwolnij przycisk RESET (na odwrotnej stronie płytki).
51. Trzymaj przycisk POKE jeszcze przez czas dłuższy, niż pięć sekund (lub do momentu, gdy dioda ACTIVITY zacznie pulsować).

Dioda ACTIVITY zaświeci się, a po około sekundzie zacznie pulsować, wskazując, że urządzenie działa w trybie konfiguracji.

Konfigurowanie płytki Enviro Weather poprzez plik konfiguracyjny

Można również zastosować prostszy sposób zmiany konfiguracji.

52. Dołącz aplikację Thonny do płytki Raspberry Pi Pico (opis powyżej).
53. Z okna Raspberry Pi Pico otwórz plik config.py.

W tym pliku są zapisane wszystkie informacje konfiguracyjne: nickname, wifi_ssid, wifi_password, adafruit_io_username, adafruit_io_key, destination, reading_frequency i upload_frequency oraz kilka innych.

Wystarczy teraz zmodyfikować odpowiednie pola, a potem zapisać. Najwygodniej - po pierwszym skonfigurowaniu płytki Enviro Weather - skopiować plik config.py z płytki do komputera i, w razie potrzeby, podmieniać dane konfiguracyjne. Po resecie lub przełączeniu zasilania płytka zaczyna od razu pracować w trybie wysyłania danych do sieci.

Oglądanie danych pomiarowych

Aby zobaczyć swoje odczyty w Adafruit IO, musisz wejść na stronę https://io.adafruit.com/. Odczyty powinny zacząć pojawiać się na tej stronie, gdy płytka wyśle dane. Ustawiony jest odstęp wysyłania na 5 minut. Odczyt z każdego czujnika płytki Enviro Weather automatycznie pojawi się jako inny kanał [nickname]-[reading name] w ramach grupy (enviro). Lista parametrów udostępnianych przez płytkę Enviro Weather dla chmury Adafruit IO jest pokazana w GitHubie[17]. Jednak obecnie udostępniane kanały w Adafruit IO nieco się różnią. Należy pamięć, że płytka dostarcza wiele kanałów, a w przypadku darmowego konta można wyświetlać ich maksymalnie 10.

54. Kliknij na grupę enviro i rozwiń listę kanałów z wartościami pomiarów (rysunek 5).

Rysunek 5. Strona Adafruit IO z zakładką wartości kanałów

Pobrane dane można zaprezentować w formie graficznej.

55. Kliknij „Dashboards” na górnym pasku menu.
56. Wybierz „Create new dashboard”. Wpisz nazwę nowego pulpitu.

W tej chwili nic tu nie ma.

57. Kliknij ikonę koła zębatego w prawym górnym rogu.
58. Wybierz opcję Create New Block.
59. Wybierz typ prezentacji danych w kanale.
60. Rozwiń listę kanałów i zaznacz odpowiedni.
61. Wpisz opisy i ustaw parametry wyświetlania.
62. Kliknij Create block.

Można wyświetlać więcej bloków (rysunek 6). Bloki można przesuwać i zmieniać ich rozmiar za pomocą opcji „Edit Layout”. Po odłączeniu płytki od zasilania i ponownym podłączeniu wykonywane jest automatyczne dołączenie do chmury Adafruit IO. Istnieje możliwość podłączenia do chmury Adafruit IO więcej niż jednej płytki Enviro Weather. Jednak darmowe konto pozwala na obsługę maksymalnie 10 kanałów.

Rysunek 6. Strona Adafruit IO z zakładką pulpitu

Praca płytki Enviro Weather z zasilaniem zewnętrznym poprzez złącze akumulatora JST-PH

Płytka Enviro Weather może być zasilana z jednego źródła: poprzez gniazdko microUSB albo z zewnętrznego napięcia - poprzez złącze akumulatora JST-PH. Producent zaleca, aby - po podłączeniu zasilania - nacisnąć przycisk POKE.

W ramach badań do gniazdka BAT (JST-PH) został dołączony naładowany akumulator Li-Po 3,7 V (z napięciem 4,12 V). Badania zostały przeprowadzone po wykonaniu konfiguracji płytki i bez podłączonego czujnika deszczu oraz czujników kierunku i prędkości wiatru. Po podłączeniu zasilania, przez ok. 11 s trwa blok pomiaru oraz transmisji danych poprzez Wi-Fi. W tej fazie pulsuje biała dioda ACTIVITY. Następnie procesor wchodzi w uśpienie. Cały czas pracuje przetwornica 3,3 V (szyna V+_A0 3,3 V) oraz zegar RTC. Pobór prądu maleje do ok. 35 μA.

Transmisja na szynie I²C podczas bloku pomiaru i transmisji danych została pokazana na rysunku 7. W kanale CH1 jest pokazany sygnał SCL, a w CH2 - sygnał SDA szyny I²C. Zdekodowane transmisje są widoczne w linii S1 w postaci niebieskich, pionowych kresek. Kanał CH3 odpowiada natomiast za pomiar szyny V+_A0 (stałe 3,29 V), a w kanale CH4 pokazano napięcie szyny VSYS.

Rysunek 7. Blok pomiaru i transmisji danych płytki Enviro Weather

Ze względu na ograniczoną liczbę kanałów oscyloskopu, stan następnych dwóch sygnałów zobrazowano na rysunku 8. Zachowują się one tak samo w przypadku zasilania z szyny USB, jak i z wejścia BATT. W kanale CH4 (rysunek 8) pokazany został sygnał /INT. W kanale CH3 (rysunek 8) widnieje sygnał HOLD_VSYS_EN.

Rysunek 8. Blok pomiaru i transmisji danych płytki Enviro Weather podczas zasilania z USB

Sygnał /INT wystawiany przez RTC powoduje włączenie zasilania na szynę VSYS i obudzenie procesora. Procesor wystawia sygnał HOLD_VSYS_EN (wyjście GP2), który podtrzymuje zasilanie VSYS na czas trwania bloku. Następnie procesor kasuje znacznik przerwania timera TM w rejestrze sterującym układu RTC, co powoduje zdjęcie sygnału /INT. Na szynie I²C wykonywane jest sprawdzenie odpowiedzi układów na szynie I²C w zakresie adresów od 0x12 do 0x77. W przypadku płytki Enviro Weather aktywne są trzy adresy: 0x23 - czujnik światła, 0x51 - RTC oraz 0x77 - sensor ciśnienia. Następnie wykonywany jest odczyt czasu i daty z RTC oraz danych z czujników ciśnienia i światła. Na koniec bloku następuje ponowne konfigurowanie timera układu RTC na budzenie procesora za 5 minut. Zdjęcie sygnału HOLD_VSYS_EN przez procesor powoduje wyłączenie zasilania szyny VSYS.

Log pracy aplikacji Enviro, po włączeniu zasilania płytki Enviro Weather przez USB, został pokazany na rysunku 4. W stosunku do bloku pomiarowego, dodatkowo wykonywane jest wtedy konfigurowanie układów scalonych: RTC, czujnika światła i ciśnienia, oraz wpisanie aktualnego czasu i daty (pobranych z sieci Wi-Fi) do układu RTC.

Praca płytki Enviro Weather z zasilaniem USB

Płytka Enviro Weather rozpoczyna pracę po podłączeniu zasilania 5 V do szyny VBUS płytki Raspberry Pi Pico W. Zasilanie z szyny VSYS jest też podawane w sposób ciągły na wejście przetwornicy 3,3 V, co sprawia, że cały czas obecne jest zasilanie na szynie V+_A0 dla zegara RTC. Sygnały /INT oraz HOLD_VSYS_EN są ignorowane.

Transmisja na szynie I²C podczas bloku pomiaru i transmisji danych przy zasilaniu z USB została pokazana na rysunku 8. W trakcie trwania wspomnianego bloku na szynie I²C wykonywane są dostępy do układów - tak samo, jak przy zasilaniu z wejścia BAT. Jednak po zakończeniu bloku pomiaru procesor nie przechodzi w uśpienie, lecz w aktywnej pętli bada co 100 ms stan bitu znacznika przerwania zegara RTC. Cały czas włączone pozostaje napięcie na szynie VSYS oraz V+_A0. Średni pobór prądu spada do ok. 60 mA.

Po wykryciu przerwania procesor kasuje znacznik oraz przechodzi do obsługi bloku pomiaru i transmisji danych.

Jeśli do płytki Raspberry Pi Pico W zostały wlutowane złącze goldpin, to całość można - zamiast z szyny USB - zasilać poprzez pin VSYS [10]. Jednak wtedy płytka Enviro Weather będzie pracować tak, jak z zasilaniem USB.

Próby zestawu Enviro Weather z podłączonymi czujnikami deszczu i wiatru pokazują poprawne wybudzanie procesora po zadziałaniu czujnika deszczu oraz odczyty prędkości i kierunku w chmurze Adafuit IO.

Podsumowanie

Zestaw stacji pogodowej Enviro Weather (PIM640), po zmontowaniu według bardzo dokładnego opisu oraz podłączeniu zasilania, zaczął od razu pracować. Trochę brakuje wyczerpującego opisu sposobu konfiguracji systemu za pomocą smartfona. Nieco zagmatwany jest również sposób aktualizacji oprogramowania firmowego - za to dołączanie do chmury Adafruit IO działa bez zastrzeżeń. Istnieją też trzy inne sposoby udostępniania danych. W sumie jest to spory projekt o wielu składnikach i występowanie pewnych niedogodności jest w pełni zrozumiałe.

Brakuje natomiast opisu sposobu działania oprogramowania płytki Enviro Weather. Dopiero z logu i analizy kodu można się dowiedzieć, że płytka inaczej działa z zasilaniem z USB - a inaczej z zasilaniem bateryjnym. Płytka przy dołączaniu tego drugiego nie zawsze startuje stabilnie. Całość wymaga zatem wykonania dalszych badań.

W przeprowadzonych próbach nie testowano komunikacji Wi-Fi. W zeszłym roku został udostępniony driver Bluetooth do układu transmitera CYW43439 (z obsługą Wi-Fi oraz Bluetooth). Natomiast w połowie roku pojawiło się na GitHubie firmy Pimoroni oprogramowanie do obsługi BLE na płytkę Enviro Weather, jednak do teraz brak jakiegokolwiek opisu tego rozwiązania czy też kompatybilnej aplikacji (np. mobilnej) do odbioru danych. A rozwiązanie takie jest warte uwagi ze względu na dziesięciokrotne zmniejszenie poboru prądu podczas transmisji BLE.

Henryk A. Kowalski
Instytut Informatyki
Politechnika Warszawska

Literatura:

  1. Weather Meter Kit (SEN-15901), SparkFun Electronics, https://tiny.pl/dt4r2
  2. Enviro Weather (Pico W Aboard) - Weather Station Kit (PIM640), Pimoroni, https://tiny.pl/dt4rs
  3. Weather Meter Hookup Guide, SparkFun Electronics, SparkFun Electronics, https://tiny.pl/dt4r6
  4. Build your own weather station, Raspberry Pi Foundation, https://tiny.pl/dt4rv
  5. Getting Started with Enviro (Pico W Aboard), Pimoroni, https://tiny.pl/dt4r3
  6. Wind and Rain Sensors for Weather Station (COM-B020), Pimoroni, https://tiny.pl/dt49q
  7. SparkFun weather:bit - micro:bit Carrier Board (DEV-15837), SparkFun Electronics, https://tiny.pl/dt49x
  8. Weather HAT + Weather Sensors Kit, Pimoroni, https://tiny.pl/dt49m
  9. Enviro Weather (Pico W Aboard), (PIM628), Pimoroni, https://tiny.pl/dt497
  10. Raspberry Pi Pico and Pico W, https://tiny.pl/dt49r
  11. BME280 temperature, pressure, humidity sensor, https://tiny.pl/dt49w
  12. LTR-559 light and proximity sensor (datasheet), https://tiny.pl/dt49c
  13. PCF85063A Tiny Real-Time Clock/Calendar with Alarm Function and I²C-Bus, NXP, https://tiny.pl/dt49d
  14. Enviro MicroPython firmware, Pimoroni, https://tiny.pl/dt49f
  15. Getting Started with Enviro, GitHub, Pimoroni, https://tiny.pl/dt495
  16. Adafruit IO, Pimoroni, https://tiny.pl/dt491
  17. Enviro Weather, GitHub, Pimoroni, https://tiny.pl/dt49j
  18. Upgrading Firmware, Pimoroni, https://tiny.pl/dt49p
  19. Pimoroni Pico Libraries and Examples, https://tiny.pl/dt49l
  20. Thonny Python IDE, https://tiny.pl/dt494
Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2024

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik lipiec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio lipiec - sierpień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje czerwiec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna lipiec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich lipiec 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów