Po odpowiednim skonfigurowaniu sensor BBair może wykonywać pomiary jakości powietrza w dwóch równoległych trybach:
- Pomiar na żądanie: w dowolnej chwili, po nawiązaniu połączenia Bluetooth Smart, sensor rozpoczyna wykonywanie pomiarów, przesyłając wyniki do urządzenia mobilnego.
- Pomiary automatyczne: wykonywane cyklicznie z przesyłaniem wyników do komputera kolekcjonującego i przetwarzającego dane.
Takie dualne działanie sensora umożliwia sprawdzenie stanu powietrza w konkretnej, interesującej nas chwili, na przykład za pomocą smartfonu i jednocześnie zbieranie długookresowych danych analitycznych. Wykorzystując mały, popularny mikrokomputer Raspberry Pi, dostajemy nieograniczone wręcz możliwości rejestracji, analizy, prezentacji i publikacji zebranych danych pomiarowych. Odpowiednie do naszych zastosowań będą Raspberry Pi 3 lub Raspberry Pi Zero W fabrycznie wyposażone w interfejs Bluetooth Low Energy. Dzięki bibliotece bbmagic_lib jest możliwe bardzo łatwe i szybkie napisanie programu zbierającego dane z sensorów jakości powietrza.
Jak to zrobić? Sensor BBair
Na początek zajmiemy się skonfigurowaniem samego sensora BBair. Mamy do wyboru trzy okresy wykonywania pomiarów automatycznych: 15 minut, 1 godzina lub 3 godziny. Ustawienia żądanego okresu pomiarowego dokonujemy po uprzednim wyłączeniu zasilania za pomocą odpowiedniego połączenia pól konfiguracyjnych. Szczegóły pokazano na rysunkach 1…3. Nie wykonując żadnego połączenia pól, programujemy sensor do pracy w trybie pomiarów na żądanie, bez wykonywania pomiarów automatycznych.
Jak to zrobić? Raspberry Pi
Mikrokomputer Raspberry Pi Zero W z zainstalowanym systemem operacyjnym Raspbian Lite jest idealnym narzędziem do naszych celów. Ponieważ biblioteka zapewniająca komunikację z sensorami BBair ma również możliwość sterowania trzema diodami LED, wykonamy kilka połączeń, aby skorzystać z tego udogodnienia. Kolorowe diody będą informowały o stanie pracy programu. Przyłączmy zatem do Raspberry Pi diody z szeregowymi rezystorami, jak pokazano na schemacie z rysunku 4. Żółta dioda dołączona do pinu 13 zaświeci się, gdy uruchomimy aplikację, i zgaśnie, jeśli program zostanie zamknięty. Mrugające, zielona i czerwona, diody LED poinformują o trwającej komunikacji radiowej, odpowiednio - odbieraniu i wysyłaniu danych.
Jak to zrobić? Software
Aby móc zbudować aplikację, potrzebujemy narzędzi (kompilator, linker). Logujemy się zatem do elektronicznej maliny i instalujemy cały pakiet poleceniem
W kolejnym kroku uruchamiamy zatem komunikację bbmagic over BLE, wywołując funkcję
bbm_id = bbm_bt_read(bbm_buf) ;
Jeśli zwróci ona „0”, to oznacza, że nie nadeszły nowe dane. Wartość „-1” informuje, że użytkownik nacisnął Ctrl+C i zażądał zakończenia działania programu. Wtedy przerywamy główną pętlę do{...}while(bbm_id != -1), zamykamy komunikację BBMagic over BLE (bbm_bt_close()) i plik logowania, jeśli wcześniej został poprawnie otwarty (fclose(logFile)) i kończymy działanie (exit(0)). Jeśli natomiast funkcja zwróci liczbę większą od 0, to jest ona numerem ID urządzenia, które nadesłało wiadomość. W takim wypadku tablica bbm_buf[BBLIB_FRAME_SIZE] zawiera odebrane i zdekodowane dane. Sensor BBair ma numer ID=40 ukryty w stałej BBMAGIC_M_BBAIR i zdefiniowanej w pliku bbmagic_lib.h. Zawartość tablicy wypełnionej informacjami od sensora jakości powietrza szczegółowo przedstawia tabela 2.
Dalsza część pętli głównej sprawdza, czy odebrane dane pochodzą od sensora BBair
Pozostaje jeszcze pytanie, w jaki sposób zapisywać kolejne porcje danych pomiarowych do pliku? Sensor BBair dostarcza bowiem kolejnych informacji co około 1 sekundy, ale pomiary są wykonywane co 15, 60 lub 180 minut, w zależności od wybranej konfiguracji. Byłoby przecież bezcelowym zapisywanie do pliku każdej odebranej ramki danych. Mamy na szczęście prosty sposób na zorientowanie się, czy otrzymane właśnie dane są świeże, czy może dotyczą historycznego pomiaru sprzed powiedzmy kilkudziesięciu minut. Jak pokazuje tab. 2, pole bbm_buf[BBM_BBAIR_MEAS_TIME] każdej nadesłanej ramki danych zawiera czas w minutach, który upłynął od ostatniego pomiaru. Widzimy więc, że wartość ta będzie systematycznie rosła, aż do momentu, w którym zostanie zakończony kolejny pomiar i nowe wyniki zostaną dostarczone do aplikacji. Wtedy nastąpi jej wyzerowanie, ponieważ od wykonanego właśnie pomiaru upłynęło 0 minut. Wystarczy więc zapamiętywać wartość tego pola w zmiennej m_time i jeśli spełniony zostanie warunek
Pozostaje jeszcze kwestia drobnego usprawnienia, aby nasz logger działał w tle, umożliwiając normalny dostęp do konsoli. Użyteczne w tym przypadku będzie narzędzie ‘screen’. Szczegółowy opis, jak go zainstalować i użyć, można zaleźć pod adresem http://bit.ly/2PelGHN.
W kolejnym artykule o badaniu jakości powietrza zbudujemy w kilka chwil stację monitorującą, która będzie zasilana energią słoneczną. Wyniki pomiarów w atrakcyjnej formie zaprezentuje kolorowy czterocalowy, graficzny wyświetlacz LCD sterowany przez Raspberry Pi zero W (rysunek 11).
Mariusz Żądło