Bezprzewodowy termometr (WiFi – esp8266)

Do mojej „inteligentnej piwnicy”  brakowało tylko monitorowania temperatury pomieszczeń. Zdecydowałem się na dość prosty i popularny układ – esp8266 jako kontroler, do tego cyfrowy czujnik temperatury Dallas DS18B20 pracujący na magistrali OneWire, a wszystko to zasilane bateriami AA – dwoma paluszkami. Na dłuższą metę lepsze będzie zasilanie sieciowe, ale na początek chciałem sprawdzić temperatury w różnych miejscach domu.

Kupiłem esp8266 w wersji 01 – czyli posiadającej tylko 2 wejścia/wyjścia GPIO. Do jednego termometru wydało się w sam raz. Dwa „paluszki” to 3V – czyli w sam raz do esp, natomiast czujnik DS18B20 ma zakres 3-5,5V.  Schemat jest bardzo prosty:

esp8266 termometr wifi

Temperatura ma być odczytywana co kilka minut i wysyłana na mój serwer za pomocą HTTP GET. Całe wysyłanie polega więc na  wejściu pod adres:

http://mojserwer/czytaj.php?temperatura=22.54

gdzie program w php zapisze podaną temperaturę wraz z aktualnym czasem do bazy MySQL. Poniżej zamieszczam oba programy, ale do rozwiązania pozostał problem zasilania…

Zasilanie

Niestety nie przewidziałem, że do zasilania bateriami nie jest to najlepszy wybór. Cały mój „termoment wifi” działałby na dwóch paluszkach zaledwie przez kilkanaście-kilkadziesiąt godzin. Esp8266 pobiera około 50-150mA w trakcie pracy – wysyłania i odbierania, 15mA w trybie czuwania. Sam mikrokontroler ma natomiast wbudowaną funkcję uśpienia – deep sleep. Układ „zasypia” na określony czas pobierając jedynie 10µA (mikroamperów)!

Cały problem w tym, że aby esp8266 mógł się wybudzić, należy połączyć pin GPIO16 mikrokontrolera do pinu RST. Esp8266-01 nie daje możliwości przejścia w stan uśpienia ponieważ do dyspozycji są tylko GPIO0 i GPIO1. Dokładniej rzecz biorąc można go uśpić, ale nie obudzi się. Cały problem rozwiązać można kupując ESP w wersji esp12 lub esp13 – te układy posiadają wszystkie wyjścia GPIO wyprowadzone. Mój esp8266-01 też oczywiście posiada GPIO16, ale dostępny tylko na nóżce mikrokontrolera.

Znalazłem w sieci sztuczkę rozwiązującą mój problem – wystarczy przylutować jedną z nóżek układu scalonego do kabelka, a ten podłączyć do pinu RST. Żeby nie było zbyt łatwo, z każdej strony tego układu jest 8 nóżek na długości 3,5mm trzeba więc zrobić to z odpowiednią precyzją. Na szczęście jest to pierwsza nóżka z brzegu. Żeby zwiększyć precyzję, owinąłem końcówkę grota lutownicy drucikiem i lutowałem jego końcówką. To było największe osiągnięcie moich lutowniczych umiejętności, ale udało się i wszystko działa.

Po takim zabiegu cały układ działa na dwóch paluszkach przez ponad miesiąc przy odczytach temperatury co 3 minuty. Można by jeszcze wydłużyć jego żywotność przez wydłużenie czasu uśpienia – 3 minuty to i tak zbyt często, oraz przez zmniejszenie przerw (delay) i „optymalizację” odczytu temperatury. Na wszelki wypadek dałem 3 odczyty, ponieważ po przebudzeniu przy pierwszym odczycie zdarza się błąd pomiaru – prawdopodobnie DS18B20 nie ma wystarczającej energii do odczytu i potrzebuje więcej czasu. Być może lepiej byłoby wykorzystać zwykłe 3-żyłowe połączenie (sygnał-VCC-GND) zamiast zasilania pasożytniczego (parasite). To jednak takie gdybanie, dla mnie wszystko działa tak, jak powinno, a na dłuższą metę zrobię coś zasilanego z sieci.

Mój esp8266 po zabiegu wygląda tak:

esp8266 deep sleep

Wszystko działa, czujniki DS18B20 są wystarczająco dokładne i czułe – po przeniesieniu termometru w inne miejsce już w kolejnym odczycie widać zmianę temperatury.

Kod na esp8266 pisany w IDE Arduino

prosty kod w PHP na serwerze do logowania temperatur:

 

3 komentarze to “Bezprzewodowy termometr (WiFi – esp8266)”

You can Dodaj komentarz or Trackback this post.

  1. bmaci3k - 22 września 2017 o 12:14

    Czy ten kod na pewno działa? Widzę, że wysyłasz dane metodą POST a w php odbierasz GET

  2. atomic77 - 22 września 2017 o 12:26

    Dobre:) Nie zauważyłem tego nawet. Chyba w trakcie pisania zmieniłem koncepcję. W każdym razie działa, już od roku.
    Sprawdziłem w kodzie „produkcyjnym” i też tak mam. Kiedyś przy okazji będę musiał to poprawić.

  3. bmaci3k - 22 września 2017 o 15:17

    Mógłbyś podesłać mi bibliotekę ESP8266wifi.h ta którą pobrałem jakoś nie działa.Robię podobny projekt tylko z dht22 zamiast ds18b20.

Napisz odpowiedź

Twój adres e-mail nie zostanie opublikowany.