diff --git a/Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.bin b/Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.bin new file mode 100644 index 0000000..68e8a2e Binary files /dev/null and b/Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.bin differ diff --git a/Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.pdf b/Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.pdf new file mode 100644 index 0000000..10762f8 Binary files /dev/null and b/Firmware/nodemcu-master-20-modules-2019-06-01-12-50-39-float.pdf differ diff --git a/Temp_DS18B20/solar_zf/a1.lua b/Temp_DS18B20/solar_zf/a1.lua index a8f1f59..09a2c86 100644 --- a/Temp_DS18B20/solar_zf/a1.lua +++ b/Temp_DS18B20/solar_zf/a1.lua @@ -1,10 +1,23 @@ -- programme pour faire un test depuis de le webide +-- source: https://nodemcu.readthedocs.io/en/master/modules/ds18b20/ + function a1() - print("\n a1.lua zf190601.1304 \n") - + print("\n a1.lua zf190601.1538 \n") end +a1() +local ow_pin = 4 +ds18b20.setup(ow_pin) +print("toto182538") + +-- read all sensors and print all measurement results +ds18b20.read( + function(ind,rom,res,temp,tdec,par) + print(ind,string.format("%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",string.match(rom,"(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)")),res,temp,tdec,par) + end,{}) + +print("tutu152603") diff --git a/Temp_DS18B20/solar_zf/boot.lua b/Temp_DS18B20/solar_zf/boot.lua index 447df3e..5485ee0 100644 --- a/Temp_DS18B20/solar_zf/boot.lua +++ b/Temp_DS18B20/solar_zf/boot.lua @@ -1,6 +1,6 @@ -- Scripts à charger après le boot pour démarrer son appli -print("\n boot.lua zf190422.1102 \n") +print("\n boot.lua zf190601.1535 \n") function heartbeat() f= "flash_led_xfois.lua" if file.exists(f) then dofile(f) end @@ -12,8 +12,9 @@ function heartbeat() end) end -f= "led_rgb.lua" if file.exists(f) then dofile(f) end -f= "wifi_ap_start.lua" if file.exists(f) then dofile(f) end +--f= "led_rgb.lua" if file.exists(f) then dofile(f) end +--f= "wifi_ap_start.lua" if file.exists(f) then dofile(f) end +f= "wifi_ap_stop.lua" if file.exists(f) then dofile(f) end f= "wifi_cli_conf.lua" if file.exists(f) then dofile(f) end f= "wifi_cli_start.lua" if file.exists(f) then dofile(f) end f= "telnet_srv2.lua" if file.exists(f) then dofile(f) end @@ -21,7 +22,7 @@ f= "web_ide2.lua" if file.exists(f) then dofile(f) end f= "web_srv2.lua" if file.exists(f) then dofile(f) end --f= "set_time.lua" if file.exists(f) then dofile(f) end --f= "dsleep.lua" if file.exists(f) then dofile(f) end -f= "a_no_linear.lua" if file.exists(f) then dofile(f) end +--f= "a_no_linear.lua" if file.exists(f) then dofile(f) end f=nil heartbeat=nil diff --git a/Temp_DS18B20/solar_zf/led_rgb.lua b/Temp_DS18B20/solar_zf/goodies/led_rgb.lua similarity index 100% rename from Temp_DS18B20/solar_zf/led_rgb.lua rename to Temp_DS18B20/solar_zf/goodies/led_rgb.lua diff --git a/Temp_DS18B20/solar_zf/t1.csv b/Temp_DS18B20/solar_zf/goodies/t1.csv similarity index 100% rename from Temp_DS18B20/solar_zf/t1.csv rename to Temp_DS18B20/solar_zf/goodies/t1.csv diff --git a/Temp_DS18B20/solar_zf/wifi_ap_start.lua b/Temp_DS18B20/solar_zf/goodies/wifi_ap_start.lua similarity index 100% rename from Temp_DS18B20/solar_zf/wifi_ap_start.lua rename to Temp_DS18B20/solar_zf/goodies/wifi_ap_start.lua diff --git a/Temp_DS18B20/solar_zf/oldies/ds18b20-example.lua b/Temp_DS18B20/solar_zf/oldies/ds18b20-example.lua new file mode 100644 index 0000000..8354695 --- /dev/null +++ b/Temp_DS18B20/solar_zf/oldies/ds18b20-example.lua @@ -0,0 +1,52 @@ +t = require("ds18b20") +pin = 3 -- gpio0 = 3, gpio2 = 4 + +local function readout(temp) + if t.sens then + print("Total number of DS18B20 sensors: ".. #t.sens) + for i, s in ipairs(t.sens) do + print(string.format(" sensor #%d address: %s%s", i, ('%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X'):format(s:byte(1,8)), s:byte(9) == 1 and " (parasite)" or "")) + end + end + for addr, temp in pairs(temp) do + print(string.format("Sensor %s: %s °C", ('%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X'):format(addr:byte(1,8)), temp)) + end + + -- Module can be released when it is no longer needed + --t = nil + --package.loaded["ds18b20"]=nil +end + +t:enable_debug() +file.remove("ds18b20_save.lc") -- remove saved addresses +print("=============================================", node.heap()) +print("first call, no addresses in flash, search is performed") +t:read_temp(readout, pin, t.C) + +tmr.create():alarm(2000, tmr.ALARM_SINGLE, function() + print("=============================================", node.heap()) + print("second readout, no new search, found addresses are used") + t:read_temp(readout, pin) + +tmr.create():alarm(2000, tmr.ALARM_SINGLE, function() + print("=============================================", node.heap()) + print("force search again") + t:read_temp(readout, pin, nil, true) + +tmr.create():alarm(2000, tmr.ALARM_SINGLE, function() + print("=============================================", node.heap()) + print("save search results") + t:read_temp(readout, pin, nil, false, true) + +tmr.create():alarm(2000, tmr.ALARM_SINGLE, function() + print("=============================================", node.heap()) + print("use saved addresses") + t.sens={} + t:read_temp(readout, pin) +end) + +end) + +end) + +end) diff --git a/Temp_DS18B20/solar_zf/oldies/ds18b20-web.lua b/Temp_DS18B20/solar_zf/oldies/ds18b20-web.lua new file mode 100644 index 0000000..408612f --- /dev/null +++ b/Temp_DS18B20/solar_zf/oldies/ds18b20-web.lua @@ -0,0 +1,35 @@ +t = require('ds18b20') + +port = 80 +pin = 3 -- gpio0 = 3, gpio2 = 4 +gconn = {} -- global variable for connection + +function readout(temp) + local resp = "HTTP/1.1 200 OK\nContent-Type: text/html\nRefresh: 5\n\n" .. + "" .. + "" .. + "ESP8266
" + + for addr, temp in pairs(temp) do + resp = resp .. string.format("Sensor %s: %s ℃
", ('%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X '):format(addr:byte(1,8)), temp) + end + + resp = resp .. + "Node ChipID: " .. node.chipid() .. "
" .. + "Node MAC: " .. wifi.sta.getmac() .. "
" .. + "Node Heap: " .. node.heap() .. "
" .. + "Timer Ticks: " .. tmr.now() .. "
" .. + "" + + gconn:send(resp) + gconn:on("sent",function(conn) conn:close() end) +end + +srv=net.createServer(net.TCP) +srv:listen(port, + function(conn) + gconn = conn + -- t:read_temp(readout) -- default pin value is 3 + t:read_temp(readout, pin) + end +) diff --git a/Temp_DS18B20/solar_zf/oldies/ds18b20.lua b/Temp_DS18B20/solar_zf/oldies/ds18b20.lua new file mode 100644 index 0000000..b672c87 --- /dev/null +++ b/Temp_DS18B20/solar_zf/oldies/ds18b20.lua @@ -0,0 +1,223 @@ +-------------------------------------------------------------------------------- +-- DS18B20 one wire module for NODEMCU +-- NODEMCU TEAM +-- LICENCE: http://opensource.org/licenses/MIT +-- @voborsky, @devsaurus, TerryE 26 Mar 2017 +---------------------------------------------------------------------------------------------------------------------------------------------------------------- +local modname = ... + +-- Used modules and functions +local table, string, ow, tmr, print, type, tostring, pcall, ipairs = + table, string, ow, tmr, print, type, tostring, pcall, ipairs +-- Local functions +local ow_setup, ow_search, ow_select, ow_read, ow_read_bytes, ow_write, ow_crc8, ow_reset, ow_reset_search, ow_skip, ow_depower = + ow.setup, ow.search, ow.select, ow.read, ow.read_bytes, ow.write, ow.crc8, ow.reset, ow.reset_search, ow.skip, ow.depower +local node_task_post, node_task_LOW_PRIORITY = node.task.post, node.task.LOW_PRIORITY +local string_char, string_dump = string.char, string.dump +local now, tmr_create, tmr_ALARM_SINGLE = tmr.now, tmr.create, tmr.ALARM_SINGLE +local table_sort, table_concat = table.sort, table.concat +local math_floor = math.floor +local file_open = file.open + +table, string, tmr, ow = nil, nil, nil, nil + +local DS18B20FAMILY = 0x28 +local DS1920FAMILY = 0x10 -- and DS18S20 series +local CONVERT_T = 0x44 +local READ_SCRATCHPAD = 0xBE +local READ_POWERSUPPLY= 0xB4 +local MODE = 1 + +local pin, cb, unit = 3 +local status = {} + +local debugPrint = function() return end + +-------------------------------------------------------------------------------- +-- Implementation +-------------------------------------------------------------------------------- +local function enable_debug() + debugPrint = function (...) print(now(),' ', ...) end +end + +local function to_string(addr, esc) + if type(addr) == 'string' and #addr == 8 then + return ( esc == true and + '"\\%u\\%u\\%u\\%u\\%u\\%u\\%u\\%u"' or + '%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X '):format(addr:byte(1,8)) + else + return tostring(addr) + end +end + +local function readout(self) + local next = false + local sens = self.sens + local temp = self.temp + for i, s in ipairs(sens) do + if status[i] == 1 then + ow_reset(pin) + local addr = s:sub(1,8) + ow_select(pin, addr) -- select the sensor + ow_write(pin, READ_SCRATCHPAD, MODE) + data = ow_read_bytes(pin, 9) + + local t=(data:byte(1)+data:byte(2)*256) + -- t is actually signed so process the sign bit and adjust for fractional bits + -- the DS18B20 family has 4 fractional bits and the DS18S20s, 1 fractional bit + t = ((t <= 32767) and t or t - 65536) * + ((addr:byte(1) == DS18B20FAMILY) and 625 or 5000) + + if 1/2 == 0 then + -- integer version + if unit == 'F' then + t = (t * 18)/10 + 320000 + elseif unit == 'K' then + t = t + 2731500 + end + local sgn = t<0 and -1 or 1 + local tA = sgn*t + local tH=tA/10000 + local tL=(tA%10000)/1000 + ((tA%1000)/100 >= 5 and 1 or 0) + + if tH and (t~=850000) then + temp[addr]=(sgn<0 and "-" or "")..tH.."."..tL + debugPrint(to_string(addr),(sgn<0 and "-" or "")..tH.."."..tL) + status[i] = 2 + end + -- end integer version + else + -- float version + if t and (math_floor(t/10000)~=85) then + t = t / 10000 + if unit == 'F' then + t = t * 18/10 + 32 + elseif unit == 'K' then + t = t + 27315/100 + end + self.temp[addr]=t + debugPrint(to_string(addr), t) + status[i] = 2 + end + -- end float version + end + end + next = next or status[i] == 0 + end + if next then + node_task_post(node_task_LOW_PRIORITY, function() return conversion(self) end) + else + --sens = {} + if cb then + node_task_post(node_task_LOW_PRIORITY, function() return cb(temp) end) + end + end +end + +local function conversion(self) + local sens = self.sens + local powered_only = true + for _, s in ipairs(sens) do powered_only = powered_only and s:byte(9) ~= 1 end + if powered_only then + debugPrint("starting conversion: all sensors") + ow_reset(pin) + ow_skip(pin) -- select the sensor + ow_write(pin, CONVERT_T, MODE) -- and start conversion + for i, s in ipairs(sens) do status[i] = 1 end + else + for i, s in ipairs(sens) do + if status[i] == 0 then + local addr, parasite = s:sub(1,8), s:byte(9) + debugPrint("starting conversion:", to_string(addr), parasite == 1 and "parasite" or " ") + ow_reset(pin) + ow_select(pin, addr) -- select the sensor + ow_write(pin, CONVERT_T, MODE) -- and start conversion + status[i] = 1 + if parasite == 1 then break end -- parasite sensor blocks bus during conversion + end + end + end + tmr_create():alarm(750, tmr_ALARM_SINGLE, function() return readout(self) end) +end + +local function _search(self, lcb, lpin, search, save) + self.temp = {} + if search then self.sens = {}; status = {} end + local temp = self.temp + local sens = self.sens + pin = lpin or pin + + local addr + if not search and #sens == 0 then + -- load addreses if available + debugPrint ("geting addreses from flash") + local s,check,a = pcall(dofile, "ds18b20_save.lc") + if s and check == "ds18b20" then + for i = 1, #a do sens[i] = a[i] end + end + debugPrint (#sens, "addreses found") + end + + ow_setup(pin) + if search or #sens == 0 then + ow_reset_search(pin) + -- ow_target_search(pin,0x28) + -- search the first device + addr = ow_search(pin) + else + for i, s in ipairs(sens) do status[i] = 0 end + end + local function cycle() + debugPrint("cycle") + if addr then + local crc=ow_crc8(addr:sub(1,7)) + if (crc==addr:byte(8)) and ((addr:byte(1)==DS1920FAMILY) or (addr:byte(1)==DS18B20FAMILY)) then + ow_reset(pin) + ow_select(pin, addr) + ow_write(pin, READ_POWERSUPPLY, MODE) + local parasite = (ow_read(pin)==0 and 1 or 0) + sens[#sens+1]= addr..string_char(parasite) -- {addr=addr, parasite=parasite, status=0} + debugPrint("contact: ", to_string(addr), parasite == 1 and "parasite" or " ") + end + addr = ow_search(pin) + node_task_post(node_task_LOW_PRIORITY, cycle) + else + ow_depower(pin) + -- place powered sensors first + table_sort(sens, function(a, b) return a:byte(9)