diff --git a/credentials.lua.example b/credentials.lua.example new file mode 100644 index 0000000..1bc1711 --- /dev/null +++ b/credentials.lua.example @@ -0,0 +1,2 @@ +SSID = "MyWifi" +PASSWORD = "mypasswd" \ No newline at end of file diff --git a/dallas.lua b/dallas.lua index 84d109b..b5a0ef4 100644 --- a/dallas.lua +++ b/dallas.lua @@ -1,51 +1,6 @@ -function bxor(a,b) - local r = 0 - for i = 0, 31 do - if ( a % 2 + b % 2 == 1 ) then - r = r + 2^i - end - a = a / 2 - b = b / 2 - end - return r -end - function getTemp() - addr = ow.reset_search(pin) - repeat - tmr.wdclr() - - if (addr ~= nil) then - 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 - ow.reset(pin) - ow.select(pin, addr) - ow.write(pin, 0x44, 1) - tmr.delay(1000000) - 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 > 32768) then - t = (bxor(t, 0xffff)) + 1 - t = (-1) * t - end - t = t * 625 - lasttemp = t - print("Last temp: " .. lasttemp) - end - tmr.wdclr() - end - end - end - addr = ow.search(pin) - until(addr == nil) + t = require("ds18b20") + t.setup(9) + addrs = t.addrs() + lasttemp = t.read(nil,t.C) end diff --git a/ds18b20.lua b/ds18b20.lua new file mode 100644 index 0000000..de2d869 --- /dev/null +++ b/ds18b20.lua @@ -0,0 +1,143 @@ +-------------------------------------------------------------------------------- +-- DS18B20 one wire module for NODEMCU +-- NODEMCU TEAM +-- LICENCE: http://opensource.org/licenses/MIT +-- Vowstar +-- 2015/02/14 sza2 Fix for negative values +-------------------------------------------------------------------------------- + +-- Set module name as parameter of require +local modname = ... +local M = {} +_G[modname] = M +-------------------------------------------------------------------------------- +-- Local used variables +-------------------------------------------------------------------------------- +-- DS18B20 dq pin +local pin = nil +-- DS18B20 default pin +local defaultPin = 9 +-------------------------------------------------------------------------------- +-- Local used modules +-------------------------------------------------------------------------------- +-- Table module +local table = table +-- String module +local string = string +-- One wire module +local ow = ow +-- Timer module +local tmr = tmr +-- Limited to local environment +setfenv(1,M) +-------------------------------------------------------------------------------- +-- Implementation +-------------------------------------------------------------------------------- +C = 'C' +F = 'F' +K = 'K' +function setup(dq) + pin = dq + if(pin == nil) then + pin = defaultPin + end + ow.setup(pin) +end + +function addrs() + setup(pin) + tbl = {} + ow.reset_search(pin) + repeat + addr = ow.search(pin) + if(addr ~= nil) then + table.insert(tbl, addr) + end + tmr.wdclr() + until (addr == nil) + ow.reset_search(pin) + return tbl +end + +function readNumber(addr, unit) + result = nil + setup(pin) + flag = false + if(addr == nil) then + ow.reset_search(pin) + count = 0 + repeat + count = count + 1 + addr = ow.search(pin) + tmr.wdclr() + until((addr ~= nil) or (count > 100)) + ow.reset_search(pin) + end + if(addr == nil) then + return result + end + 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.") + ow.reset(pin) + ow.select(pin, addr) + ow.write(pin, 0x44, 1) + -- tmr.delay(1000000) + present = ow.reset(pin) + ow.select(pin, addr) + ow.write(pin,0xBE,1) + -- print("P="..present) + data = nil + data = string.char(ow.read(pin)) + for i = 1, 8 do + data = data .. string.char(ow.read(pin)) + end + -- print(data:byte(1,9)) + crc = ow.crc8(string.sub(data,1,8)) + -- print("CRC="..crc) + if (crc == data:byte(9)) then + t = (data:byte(1) + data:byte(2) * 256) + if (t > 32767) then + t = t - 65536 + end + + if (addr:byte(1) == 0x28) then + t = t * 625 -- DS18B20, 4 fractional bits + else + t = t * 5000 -- DS18S20, 1 fractional bit + end + + if(unit == nil or unit == 'C') then + -- do nothing + elseif(unit == 'F') then + t = t * 1.8 + 320000 + elseif(unit == 'K') then + t = t + 2731500 + else + return nil + end + t = t / 10000 + return t + end + tmr.wdclr() + else + -- print("Device family is not recognized.") + end + else + -- print("CRC is not valid!") + end + return result +end + +function read(addr, unit) + t = readNumber(addr, unit) + if (t == nil) then + return nil + else + return t + end +end + +-- Return module table +return M diff --git a/server.lua b/server.lua index d71dfdc..6e72706 100644 --- a/server.lua +++ b/server.lua @@ -1,3 +1,9 @@ +temp = -999 + +t = require("ds18b20") +t.setup(4) +addrs = t.addrs() + mycounter=0 srv=net.createServer(net.TCP) srv:listen(80, function(conn) @@ -9,9 +15,13 @@ srv:listen(80, function(conn) m="" end - getTemp() + _temp = t.read(nil,t.C) - conn:send("

Hello, this is Jeenas ESP8266.

How are you today.
Count=" .. mycounter .. m .. "
Heap=" .. node.heap() .. "
Temp=" .. lasttemp) + if _temp ~= nil then + temp = _temp + end + + conn:send("

Hello, this is Jeenas ESP8266.

How are you today.
Count=" .. mycounter .. m .. "
Heap=" .. node.heap() .. "
Temp=" .. temp) end) conn:on("sent", function(conn) conn:close() end) end)