4. Podstawowe funkcje
Pierwszą funkcją od jakiej zaczniemy to :
1 |
t = require("ds18b20") |
zamiast t, możemy podstawić inną zmienną. funkcja require() żąda odczytu z modułu (czyt. biblioteki). W naszym przypadku, odnosimy się do biblioteki ds18b20. Zatem żądanie odczytu przypisujemy do zmiennej t.
1 |
t.setup(nazwa_pinu) |
t.setup() określa, na którym pinie będzie podłączony czujnik DS18B20, w naszym przypadku będzie do gpio3
Tak właściwie to wszystko, teraz możemy dokonać odczytu danych z czujnika. Są na to dwa sposoby:
Pierwszy:
1 |
t.read() |
Domyślnie jest to dla podłączonego tylko jednego czujnika i domyślną jednostką pomiaru są stopnie Celsjusza. W momencie, gdy chcemy skorzystać z większej ilości czujników, albo chcemy odczytywać inną jednostkę to musimy zastosować drugi sposób:
1 2 3 4 5 6 7 8 9 10 11 |
t.read(adres_czujnika,t.jednostka) --adres_czujnika = jeżeli mamy jeden czujnik, -- albo jest to pierwszy czujnik to wpisujemy nil -- dla dwóch i więcej wpisujemy addrs[x], gdzie x to numer czujnika -- np. 2,3,4 itd. --jednostka: -- C stopnie Celsjusza -- F stopnie Fahrenheita -- K stopnie Kelvina |
Jeżeli chcemy się dowiedzieć, ile jest podłączonych czujników to korzystamy z funkcji poniżej:
1 |
table.getn(addrs) |
To już wszystkie udostępnione funkcje tej biblioteki. Nie jest ich dużo, ale moim zdaniem czujnik nie jest skomplikowany i oprócz pomiaru temperatury nic więcej nie robi także funkcji jest wystarczająca ilość.
5. Przykład 1.: Odczyt temperatury z dwóch czujników po UART
Po lewej stronie przykład połączenia dla ESP-01, a po prawej dla NodeMCU v1/2. Na samym początku wgrywamy bibliotekę dla czujnika. Teraz przechodzimy do programu głównego:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
t = require("ds18b20") gpio0 = 3 t.setup(gpio0) function odczyt() addrs = t.addrs() if (addrs ~= nil) then print("Wykryte czujniki: "..table.getn(addrs)) end print("1. czujnik: "..t.read(nil,t.C).. " *C") if (table.getn(addrs) >= 2) then print("2. czujnik: "..t.read(addrs[2],t.C).." *C") end print("===================================") end tmr.alarm(0, 1500, tmr.ALARM_AUTO, odczyt) |
W pierwszej linii programu żądamy odczytu z modułu ds18b20, w następnej przypisujemy pin3 jako GPIO0. Teraz przypisujemy pinowi 3 odczyt z czujnika i zaczynamy funkcję odczyt().
zmiennej addrs, przypisujemy odczyt adresu czujnika. W kolejnej linii sprawdzamy czy wartość tej zmiennej jest różna od nil. Jeżeli tak to zwraca ilość podłączonych czujników. W linii poniżej wykonujemy wysłania na UART wartości z czujnika, zaznaczając, że ma być to wartość w stopniach Celsjusza. Kolejna linia sprawdza, czy ilość podłączonych czujników jest większa/równa 2. Jeżeli tak to dokonujemy odczytu temperatury z drugiego czujnika i wysyłamy na UART. Kończymy funkcję linią end, a sam program kończymy timerem, który to będzie powtarzał program co 1,5 sekundy. Po wgraniu programu powinniśmy otrzymać takie odczyty z UART:
6. Przykład 2.: Odczyt temperatury z dwóch czujników przez serwer WWW
Schemat jest taki sam jak dla przykładu powyżej.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
t = require("ds18b20") port = 80 gpio0 = 3 wifi.sta.config("SSID_sieci","Hasło_do_sieci") wifi.setmode(wifi.STATION) t.setup(gpio0) function sprawdz() addrs = t.addrs() if (addrs ~= nil) then print("Wykryte czujniki: "..table.getn(addrs)) end end tmr.alarm(0, 5000, tmr.ALARM_AUTO, sprawdz) srv=net.createServer(net.TCP) srv:listen(80,function(conn) conn:on("receive",function(conn,payload) print(payload) conn:send("<h1>ESP8266 i czujniki DS18B20 feriar-lab.pl</h1>") conn:send("1. czujnik: " .. t.read(nil,t.C) .. " *C" .."<br>") if (table.getn(addrs) >= 2) then conn:send("2. czujnik: " .. t.read(addrs[2],t.C) .. " *C" .. "<br>") end end) end) |
Na samym początku definiujemy pod jakim portem będzie funkcjonował serwer oraz z jakiego pinu będziemy korzystać do podłączenie czujnika. Teraz konfigurujemy połączenie z siecią Wi-Fi. W funkcji sprawdz(), sprawdzamy co 5 sekund ile czujników jest podłączonych do ESP8266, co w przyszłości wykorzystamy do wyświetlania po stronie serwera odpowiedniej ilości czujników. Po tej funkcji konfigurujemy nasz serwer, a następnie dodajemy parę prostych linijek wyświetlających nagłówek strony, odczyt z czujnika 1 oraz opcjonalnie odczyt z drugiego czujnika, jeżeli ilość czujników jest większa/równa 2. Następnie zamykamy połączenie. Po wgraniu programu powinniśmy otrzymać taki efekt jak na filmie poniżej:
7. Podsumowanie
Po tej części kursu, odczyt temperatury z czujnika nie powinien sprawiać Ci większych problemów. Ponadto, będziesz umiał/a wysyłać dane z czujnika na specjalnie postawiony serwer WWW :)
Materiały do tej części kursu:
Jeżeli chcesz być informowany na bieżąco o nowościach ze strony to kliknij ?Lubię to!? bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )