Bezprzewodowe czujniki temperatury DS18b20 na ESP8266

Długo czekałem na takie proste i ciekawe rozwiązanie bezprzewodowego pomiaru temperatury. Nie tak dawno ukazał się tani układ Wifi ESP8266. Generalnie znany jako serial wifi ponieważ komunikacja odbywa się po TX,RX co jest i tak dużym ułatwieniem w stosunku np. do nRF2401. Okazuje się że sam moduł posiada 32 bitowy mikroprocesor który pozwala na załadowanie całkiem ciekawych programów. Dzięki takiemu rozwiązaniu można zbudować mini projekt bez użycia dodatkowego sprzętu takiego jak np. arduino. Super!

Na początek zobacz filmik żeby zobaczyć o czym będę pisał :)

Co i jak

Poniżej postaram się pokazać jak załadować bardzo świeży kod do odczytywania temperatury z czujników temperatury DS18B20, który złożyłem z przykładów dostępnych w necie.

Na początek trzeba się zapoznać z pinami jakie są dostępne na ESP8266

esp8266-pinout1
fotka z http://mcuoneclipse.com/2014/10/15/cheap-and-simple-wifi-with-esp8266-for-the-frdm-board/

Połączenie

Aby się połączyć z układem trzeba mieć kabelek USB serial ale na 3.3V np. popularny FTDI 232RL. Najważniejsze piny to RX,TX, VCC, GND, CH_PD. VCC można na stałe zewrzeć z CH_PD bo to pin odpowiedzialny za uruchomienie mikroprocesora. Po zwarciu zostaje standardowy set pinów do podłączenia VCC, GND, RX, TX który trzeba podłączyć do swojego FTDI.

Bootloader mode

Aby moc wgrywać „softy” trzeba wprowadzić układ w tryb w którym przyjmuje on nowe softy. Aby to zrobić trzeba zewrzeć GPIO0 do masy.

Program do wgrywania

Do wgrywania używam esptool.py który można pobrać github. (git clone https://github.com/themadinventor/esptool)

Używa się go wydając polecenie:

./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_512k.bin

Gdzie wskazałem porty USB mojego ftdi i plik nidemcu_512k.bin

Co wgrać?

Można wgrywać różne programy, jest dostępne SDK więc może pojawiać się ich coraz więcej. Ja skorzystałem z nodemcu w którym piszę się trochę jak w arduino z tym że już od razu komendy lecą do pamięci i nie ma tu kompilowania i późniejszego ładowania. Na forum esp8266.com można sobie poczytać co i jak, jakie są przykłady, co można wgrać. Trochę wiedzy do ogarnięcia.

Z ściągam plik nodemcu_512k.bin z https://github.com/nodemcu/nodemcu-firmware i tą samą komendą co wyżej wgrywam plik do układu ESP8266

./esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_512k.bin

Czym się łączyć

Ja używam GTKterm lub cutecom więc trzeba sobie zainstalować coś z tych programów. Nodemcu różni się tym od innych że po połączeniu na np. /dev/ttyUSB0 na domyślny baudrate 9600 od razu dostaje znak zachęty. Bez ustawiania CR LF itp. co wymagane jest w innych wsadach i można się pogubić przy łączeniu przez USB np. myśląc: nie działa fak ;)

Działa!

Co dalej? Pierwszy kod który wgrałem to łączenie do mojej sieci po WiFi. Bardzo prostu kod który wkleja się linie po linii do terminalu.

    print(wifi.sta.getip())
    --0.0.0.0
    wifi.setmode(wifi.STATION)
    wifi.sta.config("SSID","password")
    print(wifi.sta.getip())
    --192.168.18.110

Od tego momentu twój mały układzik będzie się łączył do twojego wifi :)

Więcej przykładów można zobaczyć na https://github.com/nodemcu/nodemcu-firmware i ogólnie zasady działania kodu na nodemcu.

Pomiar temperatury

Ja sobie wymyśliłem że chciałbym do ESP8266 bezpośrednio połączyć DS18b20 który wykorzystuje w nettemp i który jest po prostu popularny. Będzie to bardzo fajne połączenie do mini urządzenia z którego można zdalnie czytać pomiary temperatury. Okazało się że dziś ludzie z nodemcu dodali obsługę 1-wire i mogę stworzyć to co chciałem ;) I poskładałem poniższy kod który wykonuje trzy rzeczy: łączy się do twojego wifi, odpala serwer www i odczytuję temperaturę z czujnika i wyświetla ją.

Aktualny działający kod znajduje się na https://github.com/sosprz/nettemp/blob/beta/modules/sensors/wireless/init.lua

Do GPIO2 podłączyłem DATA z DS18B20, VCC do VCC, GND do GND ESP8266 i odczyty temperatury pojawiły się po wejściu na adres IP modułu.

Jak wgrać ten kod!?

Do wgrywania tylu linii też stworzono specjalny program o nazwie luatool (git clone https://github.com/4refr0nt/luatool)

UWAGA: pod gpio nie może być nic podłączone przy wgrywaniu programów.

Plik z powyższymi liniami zapisuje jako np. tf.lua i moge wgrać go jako plik który ma się automatycznie uruchamiać po włączeniu zasilania. Trzeba wskazać tylko żeby był plikiem docelowym o nazwie init.lua

./luatool.py -p /dev/ttyUSB0 -f tf.lua -t init.lua

Jako debug warto patrzeć co się dzieje w terminalu ale nie jest on wymagany w żaden sposób do działania. Zresztą widać to na powyższym filmiku.

Zasialnie

techfreakpl_esp8266_ds18b20

Jak widać ja zastosowałem bateryjkę 3.6V. Najlepiej ją zamienić na jakiś lipo bo trzyma tylko godzinę :) A chodzi o to żeby był to naprawdę długi czas. ESP ma takie opcja jak czasowe wyłącznie, pomiar napięcia więc postaram już niedługo dołożyć te funkcjonalności a przede wszystkim dodać obsługę zdalnych czujników do nettempa.

koniec

Mam nadzieję że trochę przybliżyłem Ci jak zacząć pracę z ESP8266. Zostaw komentarz czy też udało Ci się odczytać zdalnie temperaturę.

EDIT: kolejna część artykułu https://techfreak.pl/bezprzewodowe-czujniki-na-esp8266-nettemp/

EDIT2: Dodatkowy opis dla windowsowych https://techfreak.pl/forum/viewtopic.php?f=19&t=247&start=120#p2845

 

 

Share Button

Przemek

Twórca portalu techfreak, elektronik, pasjonat wszystkiego co fajnie, co można przerobić. W wolnym czasie grzebie przy nettemp. A sport jaki uprawia to mini drony klasy 250.

  • guzik

    A gdyby wzbudzać go tylko na czas pomiaru i przesłania wyniku? To znacząco przedłużyło by pracę na małej baterii. Oczywiście pomiary nie za często.

    • To na pewno! Będę testował na lipo 3.3V 300mah ile potrzyma. Chciałbym aby to był też mini serwerek na który można zawsze wejść ale zobaczymy jak to wyjdzie i co będzie praktyczniejsze :)

      2014-12-08 7:53 GMT+01:00 Disqus :

  • Łukasz Suchecki

    a mozna by bylo dodac troche wiecej informacji dla kompletnych laikow ?
    dokladny schemat polaczen, etc ?

    Z gory dzieki

    • Spoko jak będę miał chwile dodam jakiś rysunek :)

      2014-12-08 9:42 GMT+01:00 Disqus :

      • Łukasz Suchecki

        Wielkie dzieki

        Od razu jakbys podal troche wiecej informacji o FTDI 232RL (zdjecie by wiedziec czego szukac + info jak sie laczy) to bylbym super wdzieczny

        (tak – bedzie to moj pierwszy projekt, ale … od dawna szukalem mozliwosci zdalnego monitorowania temperatury … )

  • Łukasz Suchecki

    hmmm
    mozna by go wzbudzac (pytanie czy jest w nim taka opcja) co 1min i wyniki wrzucac na jakis zdalny serwer (do pliku, lub przez POSTa RESTowy serwisik, ktory by wrzucal do bazy danych).

    • Jest taka opcja :) Ale na pewno albo nettemp bedzie pobierał albo dostawał wyniki – co do serwisu ;)

      2014-12-08 10:51 GMT+01:00 Disqus :

  • kamilsss655

    Świetna robota ! Niedługo będę się brać za programowanie ESP8266, także Twój artykuł bardzo mi się przyda.
    Jeżeli uda mi się coś stworzyć to pojawi się na mojej stronie: http://sompi.me (podam link zwrotny tutaj).

  • ash

    W najnowszej bibliotece nodemcu (Build 20141219 i wyżej) zmieniło się mapowanie GPIO: https://github.com/nodemcu/nodemcu-firmware#new_gpio_map
    Warto poprawić kod i zmienić pin=9 na pin=4.

    • Dzięki za info. Dodalem nowy lepszy poprawiony kod.
      22 gru 2014 09:56 „Disqus” napisał(a):

  • Piotr

    jaki zasięg maja te modły przy zasilaniu z baterii 3v3

    • Promień 5 metrów na pewno :) Dalej mieszkanie mi się kończy :)

  • uris

    Czy pod ten moduł wifi można podłączyć więcej czujników temperatury ? czy tylko 1szt

    • więcej :)

      2015-01-10 15:17 GMT+01:00 Disqus :

      • uris

        Super czy tez trzeba dac rezystor 4.7k

        • tak albo 2,2

          2015-01-10 15:50 GMT+01:00 Disqus :

          • uris

            Dzieki za szybka odp. Wlasnie jestem w trakcie budowania takiego sys z wieloma czujnikami i teraz kolejne pytanie czy statystyki z programu mozna by bylo exportowac na strone http://thermoweb.wtx.pl chcialem tam udostepniac swoje dane

          • Z nettempa dało by się z ESP tez:)

          • uris

            Fajnie jak by byla taka opcja w nettempie ☺ wiecej osob by sie dzielilo swoimi danymi

  • srv0tmp

    Witam,
    czy można prosić o schemat połączenia płytki i ESP ? ;) dla laika.

    • Płytki? Jeśli chodzi o USB to jest w następnym arcie z esp

  • Robert Wakuła

    Witam,
    Mam problem z flashowaniem ESP8266-12, esptool.py nie wykrywa urządzenia. Nodemcu flasher również.

    • Zapraszam an forum tam są informacje na temat ewentualnych problemów.

      2015-01-22 7:23 GMT+01:00 Disqus :

  • L M

    Cześć, moduł daje się flashować, ale jak się z nim próbuję połączyć to cały czas port jest zajęty, nie odpowiada na komendy lua, nie daje się nic do niego wgrać. Zasilanie jest ok, boundrate 9600, pamiętam o podłączaniu/odpinaniu GPIO0 na czas flashowania/pracy. Inny firmware operujący na komendach AT działa normalnie, tylko ten nodemcu się nie daje okiełznać. Korzystam z wersji latest z katalogu pre_build, innych też próbowałem, może coś pominąłem?

    • Sprawdz może jakies starsze :)

      W dniu 26 stycznia 2015 08:30 użytkownik Disqus napisał:

      • L M

        Masz może tego bina z posta? bo on już nie jest nigdzie dostępny, byłbym wdzięczny

        • http://speedy.sh/Q99ap/nodemcu-512k-latest.bin

          W dniu 26 stycznia 2015 08:35 użytkownik Disqus napisał:

          • L M

            thx, niestety żaden bin z nodemcu nie chce mi działać, nawet ten, dostaję

            Try to open port /dev/ttyUSB1, baud 9600, 8N1
            jssc.SerialPortException: Port name – /dev/ttyUSB1; Method name – openPort(); Exception type – Port busy.

            te z komendami AT działają jak powinny, robię dokładnie to samo wgrywając ten i nie odpowiada, nie wiem za bardzo co mogę jeszcze zrobić

          • ja bym szukał dlaczego jest „Port busy” :)

            W dniu 26 stycznia 2015 20:51 użytkownik Disqus napisał:

          • L M

            A teraz mi się połączył, ale i tak nie odpowiada na komendy lua, nie zapala się niebieskie światełko, więc komenda do niego nie dociera, po stronie programatora się zapala. Strasznie dziwny ten moduł, ale gdyby był popsuty to by i ten firmware z AT nie działał, a tamten działa elegancko. Czy robisz coś poza tym co napisałeś w artykule?

          • Leszek Stawicki

            poszukaj na forum tutoriala którego napisał uris – wszystko działa jak powinno

  • Leszek Stawicki

    L M mam dokładnie takie same objawy jak Ty. Kilkakrotnie juz flashowałem i nic. Tzn na org. firmware (v0.9.2.2 AT Firmware) na komendy odpowiada a na „nodemcu_512k_20141219.bin” milczy. Brakło mi już pomysłów.

  • MrDefi

    LM – sprawdź zasilanie – u mnie moduly się flashowały a nie dało się połączyć po USB – ja puściłem RX i TX na jednym porcie USB a VCC i GND wziąłem z drugiego portu USB. Wygląda na to że urządzenie pobiera więcej niż port usb może dac.

  • Kamil Darczyński

    Jak jest ogólnie ze stabilnością tego ESP8266?, zasiliłbym z zasilacza.

    • Ostatnio zauwazylem ze całkiem ok. Zalezy od wersji nodemcu.

  • Pytanie na ile ten DS18b20 daje poprawne wyniki i jaką ma dokładność? Czy go trzeba w jakiś sposób kalibrować? Mam w pracy mobilne mierniki temperatu, gdzie po kalibracji (kąpiel lodowa) wszystko fajnie działa. Ale jak przyjdzie do wymiany sondy lub baterii to trzeba kalibrować od nowa – a na kąpiel lodową nie zawsze jest czas. Temu się zastanawiam, taki termometr nie sprawił by się jako termometr wzorcowy, do którego by się ustawiało te mobilne?

  • stbsm

    Czy wiesz dlaczego odczyt z ESP8266 jest taki pofalowany? Mam wrażenie jakby ESP8266 się usypiał.

    • Sam się nie usypia. Nic takiego nie ustawialem.

      • stbsm

        Miałem na myśli usypianie samego ESP.

        • Nie sam ESP na pewnio sie nie usypia :)

          • stbsm

            Czy Twoje/wasze wykresy odczytu z ESP też są takie pourywane ?

  • pier

    Witam.
    Można prosić o odświeżenie linków?

    • Ok dwa poprawine powinny sie zaraz pojawić.

      2016-06-25 21:21 GMT+02:00 Disqus :

  • pier

    Poradziłem sobie z wgraniem Nodemcu ale nie mogę pojąć jak wgrać plik .lua do ESP.
    Przecież w linku na githubie nie ma pliku tf.lua tylko init.lua i ds18b20.lua. Nawet nie wiem jak poprawnie te pliki z tamtąd pobrać. Można jakieś wskazówki?

  • Wojtek

    Hej,
    link do kodu odczytu temperatury przenosi do github-a gdzie w folderze ds18b20 są dwa pliki: init.lua i ds18b20.lua…. później wgrywasz te pliki komendą:
    ./luatool.py -p /dev/ttyUSB0 -f tf.lua -t init.lua
    czym jest plik tf.lua (jest to zmieniona nazwa pliku ds18b20.lua)?

    • tf musi zapisac się jako init, tak będzie ok:

      ./luatool.py -p /dev/ttyUSB0 -f init.lua -t init.lua
      ./luatool.py -p /dev/ttyUSB0 -f ds18b20.lua -t ds18b20.lua

      • Wojtek

        A czy próbowałeś używać do wysłania pliczków konfiguracyjnych narzędzia ESPlorer (z uwagi na brak Linux-a jestem zmuszony nim się posłużyć…) ? http://nettemp.pl/forum/viewtopic.php?t=247&start=120#p2845

        ps. rozumiem że zachowując analogię najpierw wysyłam init-a a później po send/save wysyłam ds18b20 i ponownie send/save?

        • Tak używam ale nie zawsze działał dobrze. init zawsze na końcu.

          W dniu 10 kwietnia 2017 10:28 użytkownik Disqus napisał:

          • Wojtek

            Wgrałem poprzez uart-a CP2102 nodemcu_float_0.9.6-dev_20150704.bin… Teraz próbuje wgrać mu ds18b20.lua poprzez ESPlorer v2 ale nie moge się połaczyć z esp.. I tutaj moje pytanie: czy VCC ma być na stałe zwarte z CH_PD oraz czy GPIO0 do GND również ma być zwarte podczas wgrywania *.lua?.