Bez programowania Androida. Projekt z użyciem BLE i aplikacją mobilną (3). Rejestracja i prezentowanie danych

Bez programowania Androida. Projekt z użyciem BLE i aplikacją mobilną (3). Rejestracja i prezentowanie danych

W artykule prezentujemy proces powstawania urządzenia elektronicznego, działającego z interfejsem mobilnym na ekranie smartfona. Co ciekawe – nie ma potrzeby pisania aplikacji dla systemu Android, graficzny interfejs użytkownika utworzy i obsłuży samo urządzenie.

W poprzednich częściach publikacji opracowaliśmy mobilny graficzny interfejs użytkownika z płytką Arduino i modułem BBMobile. Teraz, w ostatniej części cyklu, nadeszła pora na finalne prace zwieńczone powstaniem kompaktowego, bateryjnego urządzenia rejestrującego z interfejsem Bluetooth Low Energy.

Finalny interfejs mobilny

Na listingu 1 został pokazany kod JSON finalnego, graficznego interfejsu użytkownika dla naszego rejestratora. Jest on na tyle obszerny, że program Arduino IDE nie jest w stanie go przyjąć i przesłać do modułu BBMobile. Po prostu bufor aplikacji Serial Monitora Arduino jest zbyt mały. Tak więc nie uda nam się przetestować go poprzez wklejenie do górnego okna programu tak, jak robiliśmy to w poprzednich częściach cyklu. Wystarczy jednak użyć dowolnego programu terminala z odpowiednio dużym buforem, aby obejść tą niedogodność. Jak zrobić to w oparciu o TeraTerm SSH opisano na https://bit.ly/3rYI2R1.

Listing 1. Kod JSON finalnego, graficznego interfejsu użytkownika opisywanego rejestratora

{"ty":"lout","or":"V","img":"7","cs":[{
"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"tn","tc":"0,0,0","ts":"40"},
{"ty":"textview","n":"rn","tc":"0,0,0","ts":"40"}]},
{"ty":"textview","te":"min\t\tavg\t\tmax","tc":"9,9,9"},
{"ty":"Button","en":"0","te":"24H","tc":"0,128,0","ts":"20","bg":"0,255,0"},
{"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"t1","tc":"50,50,50","ts":"20"},
{"ty":"textview","n":"t2","tc":"0,0,0","ts":"25","bg":"0,255,0"},
{"ty":"textview","n":"t3","tc":"50,50,50","ts":"20"}]},
{"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"r1","tc":"50,50,50","ts":"20"},
{"ty":"textview","n":"r2","tc":"0,0,0","ts":"25","bg":"0,255,0"},
{"ty":"textview","n":"r3","tc":"50,50,50","ts":"20"}]},
{"ty":"textview"},
{"ty":"Button","en":"0","te":"7 DAYS","tc":"0,128,0","ts":"20","bg":"0,255,0"},
{"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"t4","tc":"50,50,50","ts":"20"},
{"ty":"textview","n":"t5","tc":"0,0,0","ts":"25","bg":"0,255,0"},
{"ty":"textview","n":"t6","tc":"50,50,50","ts":"20"}]},
{"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"r4","tc":"50,50,50","ts":"20"},
{"ty":"textview","n":"r5","tc":"0,0,0","ts":"25","bg":"0,255,0"},
{"ty":"textview","n":"r6","tc":"50,50,50","ts":"20"}]},
{"ty":"textview"},
{"ty":"Button","en":"0","n":"b1","tc":"0,128,0","ts":"20","bg":"0,255,0"},
{"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"t7","tc":"50,50,50","ts":"20"},
{"ty":"textview","n":"t8","tc":"0,0,0","ts":"25","bg":"0,255,0"},
{"ty":"textview","n":"t9","tc":"50,50,50","ts":"20"}]},
{"ty":"lout","or":"H","cs":[
{"ty":"textview","n":"r7","tc":"50,50,50","ts":"20"},
{"ty":"textview","n":"r8","tc":"0,0,0","ts":"25","bg":"0,255,0"},
{"ty":"textview","n":"r9","tc":"50,50,50","ts":"20"}]},
{"ty":"textview","n":"v","tc":"192,192,192","bg":"70,70,70"}]}

Na rysunku 1 został pokazany ten rozbudowany interfejs tak, jak prezentuje się na ekranie smartfona – z pierwszymi danymi pomiarowymi.

Rysunek 1. Wygląd rozbudowanego interfejsu z pierwszymi danymi pomiarowymi pokazany na ekranie smartfona

Analizując od góry w skład interfejsu wchodzą kolejno:

  1. Duże kontrolki textview o nazwach tn i rn prezentujące aktualne, chwilowe wartości temperatury i wilgotności (są zdefiniowane w wierszach 2...4 kodu JSON z listingu 1);
  2. Kontrolka textview wyświetlająca stałe napisy: min, avg, max (wiersz nr 5);
  3. Kontrolka button wyświetlająca stały napis „24H” (zdefiniowana w linii nr 6). Użycie w tym miejscu kontrolki button zamiast textview poprawiło estetykę interfejsu;
  4. Trzy kontrolki t1, t2, t3 w układzie horyzontalnym wyświetlające minimalne, średnie i maksymalne wartości temperatury zarejestrowane w ciągu poprzednich 24 godzin (zdefiniowane w wierszach 8, 9 i 10 wewnątrz layoutu opisanego w wierszu 7);
  5. Trzy kontrolki r1, r2, r3 w układzie horyzontalnym wyświetlające minimalne, średnie i maksymalne wartości wilgotności względnej zarejestrowane w ciągu poprzednich 24 godzin (zdefiniowane w wierszach 12...14 wewnątrz layoutu opisanego w wierszu 11);
  6. Siostrzany do opisanego w punktach 3...5 blok kontrolek wyświetlający minimalne, średnie i maksymalne wartości temperatury i wilgotności zarejestrowane w ciągu poprzednich 7 dni (zdefiniowany w wierszach 16...25);
  7. Kolejny podobny blok kontrolek, tym razem prezentujący minimalne, średnie i maksymalne wartości zarejestrowane w całym czasie pracy rejestratora – od momentu włączenia jego zasilania aż do chwili, w której dokonujemy odczytu danych (zdefiniowany jest w wierszach 26...34);
  8. Kontrolka o nazwie v pokazująca stan źródła zasilania i znajdująca się u samego dołu okna interfejsu (zdefiniowana w wierszu 35 listingu 1).

Pierwsza linia kodu JSON definiuje dodatkowo tło interfejsu. Wybrana została grafika numer 7 – „img”:„7”. Jasne tło wraz z dominującym limonkowym kolorem kontrolek tworzą czytelny interfejs o świetnym odbiorze.

Platforma sprzętowa

Zgodnie z założeniami, finalny rejestrator bazuje na mikrkontrolerze z interfejsem Bluetooth Low Energy: NRF51822. Jego schemat aplikacyjny dostarczony przez producenta został pokazany na rysunku 2. Dodatkowo do pinów P0.00 i P0.11 podłączone zostały linie magistrali I2C czujnika wilgotności i temperatury SHT20.

Rysunek 2. Schemat aplikacyjny mikrokontrolera NRF51822

Na fotografii 1 pokazano umiejscowienie czujnika na płytce drukowanej.

Fotografia 1. Umiejscowienie czujnika SHT20 na płytce drukowanej

Znajduje się tuż przy krawędzi – tam będzie miał najmniejszą bezwładność przy wykonywaniu pomiarów. Zareaguje w sekundę lub dwie nawet na podmuch ciepłego, wilgotnego powietrza z ust.

Zasilanie

Sensor SHT20 do poprawnej pracy potrzebuje napięcia zasilania z zakresu 2,1...3,6 V. Mikrokontroler NRF51822 działa już przy zasilaniu napięciem 1,8 V, do 3,6 V.

Rysunek 3. Wyprowadzenia służące do zasilania modułu

Cały projektu został opracowany tak, aby nasze urządzenie rejestrujące można było zasilić na kilka sposobów (rysunek 3):

  1. Przy pomocy baterii CR2032 o napięciu 3 V – gniazdo lutujemy do otworów 21(+) i 22(–);
  2. Dwoma szeregowo połączonymi bateriami lub akumulatorami typu AA lub AAA – plus łączymy z dowolnym padem w kolorze czerwonym, a minus do koloru niebieskiego;
  3. Ze źródła o wyższym napięciu, nawet do 36 V, po dodaniu stabilizatora 3,3 – w tej konfiguracji pady oznaczone jako VREG_IN, VREG_GND, VREG_OUT to odpowiednio wejście, masa i wyjście układu stabilizatora. Do wejścia HI_V_POWER podłączamy wówczas dodatni biegun źródła zasilania, a biegun ujemny łączymy z dowolnym padem koloru niebieskiego. Wejście HI_V_POWER jest zabezpieczone przed odwrotną polaryzacją. W tabeli 1 zestawiono różne rodzaje stabilizatorów typu low power w obudowie TO-92, które można bezpośrednio wlutować w płytkę PCB.
Fotografia 2. Różne sposoby zasilania modułu zastosowane w praktyce

Na fotografii 2 pokazano kompilację różnych sposobów zasilania zastosowanych w praktyce.

Gdy brakuje energii

Przyglądnijmy się jeszcze uważnie zastosowanym w projekcie układom: NRF51822 i SHT20. Ten drugi ma znacznie węższy zakres napięć zasilających: 2,1...3,6 V w stosunku do mikrokontrolera: 1,8...3,6 V. Może zatem wystąpić sytuacja gdy napięcie zasilania spadnie np. do 2,0 V i wykonywanie pomiarów przez SHT20 będzie niemożliwe. Jak wówczas zachowa się rejestrator? Odpowiedź na to pytanie zawiera pewien szczegół widoczny na rysunku 1. W kontrolce na samym dole ekranu, obok aktualnego napięcia baterii, widoczny jest dodatkowy komunikat: „LO 4h”. Informuje on o tym, że od czterech godzin nie są wykonywane pomiary z powodu zbyt niskiego napięcia zasilania.

Finalne działanie

Dysponując urządzeniem mobilnym z systemem Android od wersji 4.4.2, które posiada chip Bluetooth Low Energy (Bluetooth od wersji 4.0) instalujemy aplikację BBMobile. Po uruchomieniu naciskamy START w prawym górnym rogu i jeśli nasz rejestrator jest włączony, to na liście dostępnych urządzeń pojawi się jego nazwa BB_TEMP (rysunek 4). Ostatnie cztery znaki nazwy to adres rejestratora.

Rysunek 4. Nazwa działającego rejestratora znajduje na liście dostępnych urządzeń, jego nazwa to BB_TEMP

Wybieramy go z listy i już po chwili na ekranie widnieje nasz zaprojektowany interfejs z interesującymi informacjami. Aby zakończyć połączenie z rejestratorem naciskamy przycisk STOP w prawym górnym rogu ekranu.

Rejestracja i prezentowanie danych

Trzy sekundy po włączeniu zasilania rejestrator wykonuje pierwszy pomiar. Kolejne próbki pobierane są co 60 minut. Dane w bloku „ALL DAYS” to maksymalne, minimalne i średnie wartości zarejestrowane od startu urządzenia. Dostępne są natychmiast po wykonaniu pierwszego pomiaru, tuż po włączeniu zasilania. Gdy połączymy się z rejestratorem kilka sekund po jego uruchomieniu. Informacje z ostatniej doby oraz tygodnia nie są wówczas jeszcze dostępne.

Po 24 godzinach od włączenia zasilania pojawiają się dane dobowe: maksymalna, średnia i minimalna temperatura oraz wilgotność. Wartości te uaktualniane są następnie co 60 minut, po wykonaniu każdego kolejnego pomiaru. Odczytując w dowolnej chwili z ekranu smartfona prezentowane wartości, mamy zawsze pewność, że są to najświeższe dostępne dane. Dokładnie z ostatnich 24 godzin.

Zarejestrowane wartości dobowe zapamiętywane są przez kolejnych siedem dni, aby po tym czasie możliwe było obliczenie i zaprezentowanie danych tygodniowych.

Rysunek 5. interfejs wypełniony po brzegi informacjami z rejestratora pracującego ponad 3 miesiące

Na rysunku 5 został pokazany interfejs wypełniony po brzegi informacjami z rejestratora pracującego ponad 3 miesiące na południowej fasadzie budynku.

Nie tylko rejestrator

Gdy smartfon połączony jest z rejestratorem pomiary wykonywane są co 5 sekund. Aktualnie zmierzone wartości pokazywane są u góry ekranu, aby możliwe było śledzenie również bardziej dynamicznych zmian wilgotności i temperatury. Dzięki temu nasz rejestrator może być użyty, także jako termometr i higrometr o dużej precyzji i bardzo małej bezwładności. Te dodatkowe pomiary są brane pod uwagę tylko przy rejestracji maksymalnych i minimalnych wartości „ALL DAYS”. Nie są one uwzględniane przy obliczaniu średnich, a także maksymalnych oraz minimalnych dobowych i tygodniowych. Dynamiczny proces pomiarowy nie zakłóca zatem zbieranych co godzinę danych.

Mariusz Żądło

Artykuł ukazał się w
Elektronika Praktyczna
sierpień 2021

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio wrzesień - październik 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje wrzesień 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich wrzesień 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów