Ponieważ system ma być przede wszystkim niskobudżetowy, to uznałem, że najlepszym rozwiązaniem będzie użycie tanich modułów Wi-Fi i wizualizacji danych za pomocą darmowych serwisu internetowego. Założyłem, że w domu musi być dostęp do Internetu.
Przeszukując oferty darmowej akwizycji danych trafiłem na stronę https://thingspeak.com. Portal utworzono do przechowywania i wizualizacji danych. Darmowe korzystanie z usług jest okupione pewnymi ograniczeniami: maksymalna ilość wysłanych danych ograniczona do 3 mln rekordów/rok, minimalny odstęp pomiędzy wysyłanymi rekordami 15 sekund oraz ważność konta przez 1 rok. Biorąc jednak pod uwagę łatwość korzystania z serwisu ograniczenia nie są tak istotne.
Wśród modułów Wi-Fi dostępnych na rynku wyróżniają się te oparte o układ ESP8266, ze względu na dostępność i niską cenę. Dodatkowych atutem jest możliwość ich programowania z użyciem IDE Arduino. Zdecydowałem się na użycie modułu typu Wroom-02, który to wykorzystałem do budowy opisywanej już na łamach EP 1/2017 stacji THPS. Patrząc na schemat (rysunek 1), można powiedzieć, że do budowy urządzenia użyto „surowego” modułu Wroom-02, czujnika temperatury DS18B20, 2 rezystorów i zasilacza 3,3 V (w tym przypadku dwie baterie AAA). Dioda D1 zabezpiecza moduł na wypadek odwrotnego zasilania, a kondensator C1 podtrzymuje działanie modułu podczas wymiany baterii.
Aby można było pisać programy dla ESP8266, należy odpowiednio skonfigurować IDE Arduino. Odsyłam tutaj chociażby do tutoriala dostępnego na stronie Sparkfun: https://goo.gl/eWRBQq. Następnie należy założyć konto na https://thingspeak.com. Procedura jego założenia jest typowa i nie wymaga omawiania.
Po zalogowaniu się do naszego nowoutworzonego konta przechodzimy do zakładki „Channels/my channel„ i klikamy na zielony prostokąt z napisem „New Channel”. Otworzy nam się nowa strona z konfiguracją pól pomiarowych. Możemy utworzyć do 8 pól – „Field1-8”. Ponieważ chcemy mieć tylko jeden wykres z temperaturą zaznaczamy, prostokąt z prawej strony przy polu „Field1”. Jednocześnie w tabeli „Field Label 1” wpisujemy etykietę – „temperatura”. Poniżej możemy zaznaczyć pole „Make Public”. Zaznaczenie tej opcji spowoduje, że nasze dane/wykres będą widoczne dla innych użytkowników serwisu. Dla nas również jest to wygodne, ponieważ pozwala na podgląd danych bez konieczności logowania do serwisu. Na koniec klikamy „Save Channel”. W tym momencie otworzy nam się zakładka „Private Viev” z jednym wykresem. Dodatkowo, zostaną utworzone zakładki „Public Viev”, „Channel Settings”, „API Keys”, „Data Import/Export” (rysunek 2). W zakładce „Channel Settings” możemy dodawać kolejne pola, unikalny opis kanału, wprowadzić tagi, które będą identyfikować kanał itp. Kluczowa dla nas jest zakładka „API Keys”, na której jest podawany „Write API Key” – należy go zanotować.
Gdy mamy klucz oraz skonfigurowane środowisko Arduino przystępujemy do pisania oprogramowania na moduł Wi-Fi. Przykładowy program pokazano na listingu 1.
Program ogranicza się do obsługi czujnika DS18B20 oraz do wysłania temperatury na serwer. Kluczowe jest tutaj wpisanie poprawnego klucza API Key oraz danych dostępowych do naszej sieci Wi-Fi, za pomocą której będziemy łączyć się z Internetem. Odczytana temperatura składana jest wraz z kluczem API w string poleceniami String postStr. W naszym przypadku wysyłamy tylko jeden parametr – temperaturę i trafia ona do pola o nazwie „Field1”. Gdybyśmy mierzyli dodatkowo inne parametry np. temperaturę i ciśnienie z drugiego czujnika, temperaturę i wilgotność z trzeciego czujnika i mieli w sumie 5 parametrów do wysłania to składanie stringa miałoby postać:
String postStr = apiKey;
postStr +=”&field1=”;
postStr += String(temp1);
postStr +=”&field2=”;
postStr += String(temp2);
postStr +=”&field3=”;
postStr += String(pressure);
postStr +=”&field4=”;
postStr += String(temp3);
postStr +=”&field5=”;
postStr += String(humidity);
postStr += „\r\n\r\n”;
Oczywiście należałoby zaznaczyć w zakładce „Channel Settings” pola „Field1-5” w naszym kanale pomiarowym.
Po wysłaniu danych na serwer moduł przechodzi w stan uśpienia z obniżonym poborem prądu. W tym czasie pracuje tylko RTC, pozostałe bloki funkcjonalne są wyłączone. Instrukcja ESP.deepSleep(xxx); powoduje przejście w stan głębokiego uśpienia – jej argumentem jest czas podawany w mikrosekundach. Po tym czasie na pin IO16 jest zerowany, a ponieważ jest połączony z pinem RST, następuje restart modułu i program rozpoczyna pracę od nowa. Na listingu widać również, że moduł zostanie wprowadzony w uśpienie, jeśli nie uda mu się zalogować do sieci Wi-Fi. Ma to na celu ochronę akumulatorków/baterii, z których jest zasilany. Z doświadczenia wiem, że przy dobrym zasięgu sieci moduł loguje się w ciągu 2…3 sekund, przy słabym – do 10 sekund. Dlatego, jeśli w 30 sekund nie uda mu się zalogować, to lepiej jest spróbować za kilka minut, niż rozładować baterie.
Osie wykresu można edytować klikając symbol ołówka – zaznaczony w czerwonym kółku. Zachęcam również do poznania możliwości ustawień różnych opcji w tej samej zakładce – jak chociażby liczba wyświetlanych rekordów, uśrednianie wyników itp.
Na rynku mamy ofertę różnych modułów WiFi opartych o układ ESP8266. W podobnej cenie jak Wroom-02 można kupić moduł ESP-12E z płytką i wyprowadzonymi wszystkimi pinami. Mając do dyspozycji bardzo bogatą listę czujników obsługiwanych przez Arduino możemy zbudować praktycznie nieograniczony system czujników. Ograniczeniem jest tylko nasza pomysłowość i chęć eksperymentowania, do czego gorąco zachęcam.
Grzegorz Burzyński
sp5ein@gmail.com