Kedves olvasó!
Mielőtt még azt gondolnád, hogy bármiféle programozói tudás nélkül az alább olvasott példát meg fogod tudni csinálni, azt kell mondjam hogy nem. Viszont ha már használtál php-t és van telepítve webszervered, akkor minden további nélkül remakelni tudod majd a NodeMcu és DS18b20 hőmérő szenzor Webesen c. leírást.
Első lépésben javaslom, hogy ha a nodemcu-n nem egy fullos firmware van. Akkor csináljunk egyet az alábbi képre kattintva.
Miután megkaptuk e-mailben az új firmware-t, az előző cikk alapján azt építsük bele a vasba.
Ha ezzel megvagyunk, akkor rakjuk össze a kapcsolást. Ez a DS szenzornál hatalmas bonyolultságot fog igényelni, mert összesen csak 3 lába van.
Ezután a következő fájlokat töltsük fel a nodemcu-ra. (ettől még nem lesz működőképes a dolog).
Első: „init.lua” <–Letöltés–>
ip = wifi.sta.getip() wifi.setmode(wifi.STATION) wifi.sta.config("YOURSSID", "YOURPASSWORD") ip = wifi.sta.getip() print(ip) l= file.list() for k,v in pairs (l) do print ("name:"..k..",size:"..v) end tmr.alarm(1, 15*60*1000, 1, function() print("Save temperature to DBase") tmr.delay(100000) dofile("http_get.lua") end )
Ez a file lesz az inicializációs file. Minden restart után ez a file fut le. (Feltöltéskor ne parázzunk, ha hibával fordul le, mert ha a „http_get.lua” még nincs feltöltve.)
Második: „ds18b20_init.lua” <–Letöltés–>
function temperature() pin = 3 ow.setup(pin) count = 0 repeat count = count + 1 addr = ow.reset_search(pin) addr = ow.search(pin) tmr.wdclr() until((addr ~= nil) or (count > 100)) if (addr == nil) then print("No more addresses.") else -- print(addr:byte(1,8)) crc = ow.crc8(string.sub(addr,1,7)) if (crc == addr:byte(8)) then if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then -- print("Device is a DS18S20 family device.") device = "ok" a = 0 repeat ow.reset(pin) ow.select(pin, addr) ow.write(pin, 0x44, 1) tmr.delay(100000) present = ow.reset(pin) ow.select(pin, addr) ow.write(pin,0xBE,1) data = nil data = string.char(ow.read(pin)) for i = 1, 8 do data = data .. string.char(ow.read(pin)) end crc = ow.crc8(string.sub(data,1,8)) if (crc == data:byte(9)) then t = (data:byte(1) + data:byte(2) * 256) if (t > 0x7fff) then t = t - 0x10000 end if (addr:byte(1) == 0x28) then t = t * 625 else t = t * 5000 end local sign = "" if (t < 0) then sign = "-" t = -1 * t end t1 = string.format("%d", t / 10000) t2 = string.format("%04u", t % 10000) temp = sign .. t1 .. "." .. t2 -- print("Temperature= " .. temp .. " Celsius") end a = a+1 tmr.wdclr() until (a == 3) else print("Device family is not recognized.") device = "Failure" end else print("CRC is not valid!") end end return temp, device end
Ez a file egy függvény, amiben két visszatérő értékünk van. A temp és device. Abban az esetben ha a device nem „OK” értékkel tér vissza, akkor történt valami a szenzorral. Ezt érdemes lekezelni abban a file-ban, amiben meghívjuk a függvényt. (Nálam le se fut a „http_get.lua” ha nem OK értékkel tér vissza a függvény)
Harmadik: „http_get.lua” <–Letöltés–>
require("ds18b20_init") temp,sensor = temperature() if sensor == "ok" then sk = net.createConnection(net.TCP, 0) sk:on("receive", function(sck, c) print(c) end ) sk:on("connection", function(sck,c) sck:send("GET /temp.php?temp="..temp.." HTTP/1.1\r\nHost: 192.168.0.120\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end) sk:connect(80,"192.168.0.120") else print ("The sensor is not available!!") end
Itt láthatjuk, hogy a GET metódussal passzoltuk tovább a hőmérséklet értéket a „temp.php-nak”. A „Host: 192.168.0.120”-at ÉRTELEMSZERŰEN változtassuk meg a mi webszerverünk IP címére vagy hostnevére.
Ez magában a fejlesztőeszközben (ESPlorer) így néz ki:
Ha a fájlok feltöltésével végeztünk. Akkor még hiába várjuk a csodát. Az nem fog megtörténni. A következő pakkot töltsük fel az webszerverünk gyökerébe.
A pakkban 3 fájlt találunk.
– temp_see.php
– temp.php
– ccsv.php
Ezek a fájlok között is körbetartozás van mint az építőiparban. A „temp.php” amit a NodeMcu meghív az semmi mást nem csinál csak elmenti a GET-elt értéket az adatbázisba. A „ccsv.php” tartalmaz egy függvényt ami létrehoz egy „temp.csv” nevű fáljt. A „temp_see.php” pedig meghívja a „ccsv.php” fájlban lévő „createcsv()” függvényt és utána a „google chart api”-val megrajzoltatja a függvény által létrehozott „temp.csv” fájl adatai alapján a grafikont.
Itt hívnám fel mindenki figyelmét arra, hogy mindenki értelemszerűen adja meg a szükséges adatbázisváltozókat.
$host = "localhost"; $username = "MYNAME"; $password = "MYPASSWORD"; $dbname = "MYADATABASENAME";
Ezután pedig a következő táblát hozzuk létre a kivákasztott adatbázisban. (A név mindegy, csak a lekérdezésekben írjuk át, ha nem az általam használt elnevezést akarjuk használni)
SQL-ben ez így néz ki:
CREATE TABLE temp_log ( ID int NOT NULL AUTO_INCREMENT, date DATE, time TIME, temp FLOAT, PRIMARY KEY (ID) )
Nos, ha mindennel végeztünk, akkor indítsuk újra a NodeMcu-t hardware-esen, és várjuk a csodát. Mivel 15 perc-re van állítva a logolás intervalluma, így ajánlom hogy a teszteléshez vagy állítsuk kissebre ezt az értéket, vagy futtassuk le párszor és a „http_get.lua” fájlt, és nézzük meg kelezkezik-e adatbázisbejegyzés. Amennyiben gyarapodik az adatbázis, akkor nyissuk meg a „temp_see.php”-t.
Voila!! Láss csodát és logol a cucc. Remélem érthető volt a dolog. Sajnálom hogy nem a teljes célközönségnek szól a leírás, de abban az esetben ha valaki kezdőként nekifeszül, és elakad az írjon nekem Send me Email . Amint ráérek és persze tudok is segíteni, mindenképp válaszolok az e-mailekre.