Bardzo tani bezprzewodowy pomiar temperatury z odczytem przez www

Ciągły postęp techniczny pozwala nam na automatyzację wielu procesów dnia codziennego. Sterowanie, zbieranie danych, przetwarzanie jest w zasięgu ręki każdego z nas. Elektronika jest już bardzo tania, a oprogramowanie często darmowe. Tylko korzystać. Poniżej opiszę układ za kilkanaście złotych, składający się z bezprzewodowego modułu ESP-01, który mierzy temperaturę za pomocą czujnika DS18B20, a dane wysyła na platformę ThingSpeak.com, gdzie możemy je gromadzić, obrabiać i wyświetlać.

Thingspeak.com

Do zbierania i wyświetlania danych przez www, wykorzystamy stronę thingspeak.com. Na początek – założenie konta, następnie dodanie i konfiguracja kanału – zielony przycisk New Channel:

Dodanie kanału w thingspeak

Teraz ustawienia, nazwa, opis itd. Ważna część, to zaznaczenie ilości pól – ja na jednym kanale będę mierzył jedną wartość – temperaturę, więc ptaszkuję Field 1. Jeśli kanał ma być widoczny dla wszystkich, trzeba zaznaczyć Make Public:

Kanał - ustawienia

Po zapisaniu, mamy nasz pierwszy box, jeszcze bez danych:

Thingspeak pusty wykres

Nadszedł czas na zasilanie naszego kanału danymi.

ESP-01 z obsługą DS18B20 i Thingspeak.com

Hardware wysyłający dane na nasz kanał w serwisie thingspeak.com jest dość prosty. Ja swój układ zbudowałem na płytce stykowej z użyciem modułu ESP-01 z adapterem, płytki zasilającej ustawionej na 3,3V i cyfrowego czujnika temperatury DS18B20. Poglądowo wygląda to tak:

Schemat układy z DS18b20 i esp8266

Czyli VCC i CH_PD podłączone pod zasilanie 3,3V, GND do masy, GPIO0 do pinu DQ czujnika DS18B20. Tradycyjnie ten pin został podciągnięty do zasilania rezystorem 3,3kΩ…4,7kΩ. Zdjęcie układu:

uklad_z_esp01

Mając sprzęt, można zabrać się za oprogramowanie. Mój soft to tak naprawdę zlepek kodów znalezionych w sieci. Działa co prawda właściwie, ale przydałoby się go bardziej uporządkować. Całość składa się z 3 plików: init.lua, gettemp.lua i ds18b20.lua. Wgrywamy je w odwrotnej kolejności, czyli zaczynając od ds18b20.lua. W ESP-01 miałem wgrane nodemcu_float_0.9.6-dev_20150704.bin. Pod kodami źródłowymi znajdziesz link do pobrania całości.

Kod init.lua:

kod gettemp.lua:

kod ds18b20.lua:

W pliku gettemp.lua należy wprowadzić swoją nazwę sieci i hasło do niej (3 linijka) oraz Write API Key pobrany z naszego kanału na stronie thingspeak.com z zakładki API Keys (23 linijka). Całość do pobrania:

>> POBIERZ Firmware NodeMcu i kod z obsługą ds18b20 i thingspeak.com

Dokładne opisy co, jak i czym wgrać znajdziesz tutaj: http://grylewicz.pl/tag/esp8266/.

Jak działa program? Tradycyjnie wykonywanie kodu zaczyna się od init.lua, po 3 sekundach zwłoki (przydatne do programowania czy czyszczenia flasha) układ przechodzi do gettemp.lua gdzie w pętli głównej co 10 minut (600000 milisekund) sprawdza czy układ pobrał IP, jeśli tak, to wywołuje funkcję SendData() w której wykonywany jest odczyt temperatury, połączenie z thingspeak.com i wysłanie danych do naszego kanału.

Dane w thingspeak.com

Jeśli wszystko zostało prawidłowo wykonane, co 10 minut na nasz kanał trafia zmierzona temperatura, która tworzy wykres. Sposób wyświetlania, formatowanie, kolory można ustawić, klikając na środkową ikonę pisaka na belce naszego wykresu:

Właściwości wykresu

Thingspeak.com posiada możliwości dodawania wtyczek-aplikacji, np. google gauges, mapę z lokalizacją czujnika czy wizualizacje i obróbkę danych stworzonych za pomocą silnika matlaba. Ja na swój kanał wrzuciłem google gauges i mapkę:

Kanał z danymi thingspeak.com

Możliwości konfiguracji i obróbki danych są spore. Za sprawą thingspeak.com i malutkiej płytki ESP-01 otrzymaliśmy praktyczny układ za kilkanaście złotych. Jeszcze niedawno urządzenie o zbliżonej funkcjonalności oparłem na terminalu HP T5720, później na BananaPi, teraz wystarczy moduł z ESP8266…

Wpis “Bardzo tani bezprzewodowy pomiar temperatury z odczytem przez www” komentowano 16 razy

  1. Ja tam arduino polecam, nodemcu mało że dużo miejsca zajmuje to działa niestabilnie mój esp07 bardzo często zwiechy zaliczał a o wgraniu dodatkowych bibliotek można zapomnieć zaraz się miejsce kończy

  2. Po pierwsze to nie ESP 01 jest do takich zadań, a 12 i 13 bo ma ADC, co daje. Po drugie ORIDEITH, sprawdzileś co piszesz? Arduino na dzień dobry zabiera 22kb, LUA jak wyłączysz moduły nie zabiera więcej jak kilka bajtów, zależy to naturalnie od modułów jakie masz aktywne. Jeśli już się upierasz na C to wygodniej i oszczedniej jest w Visual Studio. Najlepszy do tak prostych zadań, nie jest ani LUA, ani C tylko Basic ESP. Dobrej zabawy.

    • Jeśli nie zasilasz układu z baterii, nie korzystasz z usypiania, to do samego pomiaru temperatury wystarczy ESP-01. Mam w planach budowę podobnego układu do mierzenia temperatury zewnętrznej z ESP-12E + 2 x 18650 + DS18B20 + baterie słoneczne.

  3. Jak wyłączałem moduły to miałem problem z uruchomieniem, fakt może musiałbym posiedzieć na tym. W arduino wysyłanie danych na thing, + prosty serwer lokalnie + DS18B20 + DHT11 zajmuje mi 38kb zostaje mi 42kb wolnego. W node dokładnie ta sama konfiguracja zajęła mi 42kb i miałem 0 wolnej przestrzeni prawie. Poza tym w node miałem przykre przypadki, że jak wywoływałem często serwer tzn co 10-30s to łapał zwiechę. Nie znalazłem w node jakiegoś wathdoga na to

    • Da się podłączyć kilka czujników pod esp-01, ale „co oczywiste”, trzeba będzie nieco zmodyfikować kod i być może zastosować inny plik ds18b20.lua, bo nie wiem, czy ten obsługuje więcej niż jeden czujnik.

  4. Wszystko fajnie, ale to ma swoje wady:
    – układ może pobierać nawet 200mA prądu
    – wobec mody żeby wszystko wysyłać na serwery chciałbym poczytać jak zrobić coś takiego w postaci odczytu zdalnego temperatury ale na wyświetlaczu LCD arduino (z pominięciem owych serwerów pośredniczących). Ja wiem że esp zostały stworzone jako EOT ale nikt jakoś nie prezentuje ich zastosowania z pominięciem thinkspeak.com

    • ESP-12 można usypiać i wtedy dobre ogniwo Li-ion wytrzyma nawet miesiąc. Co do wyświetlania wyniku na LCD ze zdalnych czujników – da się zrobić, na pewno w sieci są opisane sprawdzone rozwiązania.

  5. Wojtek, o usypianiu wiem, ale nie znalazłem żadnej wiadomości ile takie ogniwo na usypianiu będzie działało. Po drugie jeśli dysponujesz jakimiś linkami gdzie są konkretne rozwiązania typu JAK TO ZROBIĆ proszę podaj. Umiem czytac ze zrozumieniem i potrafię przerobić coś pod siebie ale chciałbym bazować na sprawdzonym układzie który jeśli powiele będzie działał na 1000%. W samych tych ESP dopiero raczkuję i stąd to moje asekuranctwo.

    • Zobacz na nettemp.pl/forum Są tam gotowe opracowania uniwersalnych modułów z esp i różnymi czujnikami. Zamiast arduino całością steruje raspberry, ale masz obsługę LCD itd.

      • Mam problem z google gauges, pokazuje mi dziwne wartości, zupełnie inne niz powinny być. Moze trzeba cos zmienić w kodzie ?

Dodaj komentarz