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 http://techfreak.pl/bezprzewodowe-czujniki-na-esp8266-nettemp/

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