From 725feade27813d0f5a323d504cc259bc24ec38e4 Mon Sep 17 00:00:00 2001 From: Jonathan Karras Date: Fri, 10 Mar 2017 14:10:49 -0700 Subject: [PATCH] Update DS18b20 examples (#1851) - Remove old non-async examples from `lua-examples`. - Rename `ds18b20.EN.md` to `README.md` - Change remaining `toBase64` calls to the more standard `toHex` call. - Fix some spelling and markdown formatting issues in README file. Addresses issue #1841 --- lua_examples/onewire-ds18b20.lua | 76 ------------------- lua_examples/yet-another-ds18b20.lua | 73 ------------------ .../ds18b20/{ds18b20.EN.md => README.md} | 24 +++--- lua_modules/ds18b20/ds18b20-web.lua | 8 +- 4 files changed, 16 insertions(+), 165 deletions(-) delete mode 100644 lua_examples/onewire-ds18b20.lua delete mode 100644 lua_examples/yet-another-ds18b20.lua rename lua_modules/ds18b20/{ds18b20.EN.md => README.md} (72%) diff --git a/lua_examples/onewire-ds18b20.lua b/lua_examples/onewire-ds18b20.lua deleted file mode 100644 index a1a03b23..00000000 --- a/lua_examples/onewire-ds18b20.lua +++ /dev/null @@ -1,76 +0,0 @@ ---' --- ds18b20 one wire example for NODEMCU (Integer firmware only) --- NODEMCU TEAM --- LICENCE: http://opensource.org/licenses/MIT --- Vowstar ---' - -pin = 9 -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.") - repeat - 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) - - -- handle negative temperatures - if (t > 0x7fff) then - t = t - 0x10000 - end - - if (addr:byte(1) == 0x28) then - t = t * 625 -- DS18B20, 4 fractional bits - else - t = t * 5000 -- DS18S20, 1 fractional bit - end - - local sign = "" - if (t < 0) then - sign = "-" - t = -1 * t - end - - -- Separate integral and decimal portions, for integer firmware only - local t1 = string.format("%d", t / 10000) - local t2 = string.format("%04u", t % 10000) - local temp = sign .. t1 .. "." .. t2 - print("Temperature= " .. temp .. " Celsius") - end - tmr.wdclr() - until false - else - print("Device family is not recognized.") - end - else - print("CRC is not valid!") - end -end diff --git a/lua_examples/yet-another-ds18b20.lua b/lua_examples/yet-another-ds18b20.lua deleted file mode 100644 index b6c225c5..00000000 --- a/lua_examples/yet-another-ds18b20.lua +++ /dev/null @@ -1,73 +0,0 @@ ------------------------------------------------------------------------------- --- DS18B20 query module --- --- LICENCE: http://opensource.org/licenses/MIT --- Vladimir Dronnikov --- --- Example: --- dofile("ds18b20.lua").read(4, function(r) for k, v in pairs(r) do print(k, v) end end) ------------------------------------------------------------------------------- -local M -do - local bit = bit - local format_addr = function(a) - return ("%02x-%02x%02x%02x%02x%02x%02x"):format( - a:byte(1), - a:byte(7), a:byte(6), a:byte(5), - a:byte(4), a:byte(3), a:byte(2) - ) - end - local read = function(pin, cb, delay) - local ow = require("ow") - -- get list of relevant devices - local d = { } - ow.setup(pin) - ow.reset_search(pin) - while true do - tmr.wdclr() - local a = ow.search(pin) - if not a then break end - if ow.crc8(a) == 0 and - (a:byte(1) == 0x10 or a:byte(1) == 0x28) - then - d[#d + 1] = a - end - end - -- conversion command for all - ow.reset(pin) - ow.skip(pin) - ow.write(pin, 0x44, 1) - -- wait a bit - tmr.alarm(0, delay or 100, 0, function() - -- iterate over devices - local r = { } - for i = 1, #d do - tmr.wdclr() - -- read rom command - ow.reset(pin) - ow.select(pin, d[i]) - ow.write(pin, 0xBE, 1) - -- read data - local x = ow.read_bytes(pin, 9) - if ow.crc8(x) == 0 then - local t = (x:byte(1) + x:byte(2) * 256) - -- negatives? - if bit.isset(t, 15) then t = 1 - bit.bxor(t, 0xffff) end - -- NB: temperature in Celsius * 10^4 - t = t * 625 - -- NB: due 850000 means bad pullup. ignore - if t ~= 850000 then - r[format_addr(d[i])] = t - end - d[i] = nil - end - end - cb(r) - end) - end - -- expose - M = { - read = read, - } -end -return M diff --git a/lua_modules/ds18b20/ds18b20.EN.md b/lua_modules/ds18b20/README.md similarity index 72% rename from lua_modules/ds18b20/ds18b20.EN.md rename to lua_modules/ds18b20/README.md index 155bc29d..0bcd2a4c 100644 --- a/lua_modules/ds18b20/ds18b20.EN.md +++ b/lua_modules/ds18b20/README.md @@ -1,5 +1,5 @@ -#DS18B20 Module -##Require +# DS18B20 Module +## Require ```lua ds18b20 = require("ds18b20") ``` @@ -10,31 +10,31 @@ package.loaded["ds18b20"]=nil ``` -##readTemp() -Scans the bus for DS18B20 sensors, starts a readout (conversion) for all sensors and calls a callback function when all temperatures are available. Powered sensors are read at once first. Parasit-powered sensors are read one by one. The first parasit-powered sensor is read together with all powered sensors. +## readTemp() +Scans the bus for DS18B20 sensors, starts a readout (conversion) for all sensors and calls a callback function when all temperatures are available. Powered sensors are read at once first. Parasite-powered sensors are read one by one. The first parasite-powered sensor is read together with all powered sensors. The module requires `ow` module. -The also module uses `encoder` module for printing debug information with more readable representation of sensor address (`encoder.toBase64()`). +The also module uses `encoder` module for printing debug information with more readable representation of sensor address (`encoder.toHex()`). -####Syntax +#### Syntax `readTemp(callback, pin)` -####Parameters -- `callback` function that receives all results when all conversions finish. The callback funciton has one parameter - an array addressed by sensor addresses and a value of the temperature (string for integer version). +#### Parameters +- `callback` function that receives all results when all conversions finish. The callback function has one parameter - an array addressed by sensor addresses and a value of the temperature (string for integer version). - `pin` pin of the one-wire bus. If nil, GPIO0 (3) is used. -####Returns +#### Returns nil -####Example +#### Example ```lua t = require("ds18b20") pin = 3 -- gpio0 = 3, gpio2 = 4 function readout(temp) for addr, temp in pairs(temp) do - print(string.format("Sensor %s: %s 'C", encoder.toBase64(addr), temp)) + print(string.format("Sensor %s: %s 'C", encoder.toHex(addr), temp)) end -- Module can be released when it is no longer needed @@ -48,7 +48,7 @@ if t.sens then print("Total number of DS18B20 sensors: "..table.getn(t.sens)) for i, s in ipairs(t.sens) do -- print(string.format(" sensor #%d address: %s%s", i, s.addr, s.parasite == 1 and " (parasite)" or "")) - print(string.format(" sensor #%d address: %s%s", i, encoder.toBase64(s.addr), s.parasite == 1 and " (parasite)" or "")) -- readable address with base64 encoding is preferred when encoder module is available + print(string.format(" sensor #%d address: %s%s", i, encoder.toHex(s.addr), s.parasite == 1 and " (parasite)" or "")) -- readable address with Hex encoding is preferred when encoder module is available end end ``` diff --git a/lua_modules/ds18b20/ds18b20-web.lua b/lua_modules/ds18b20/ds18b20-web.lua index 41182dfd..a8347097 100644 --- a/lua_modules/ds18b20/ds18b20-web.lua +++ b/lua_modules/ds18b20/ds18b20-web.lua @@ -8,13 +8,13 @@ function readout(temp) local resp = "HTTP/1.1 200 OK\nContent-Type: text/html\nRefresh: 5\n\n" .. "" .. "" .. - "ESP8266
" - + "ESP8266
" + for addr, temp in pairs(temp) do -- resp = resp .. string.format("Sensor %s: %s ℃
", addr, temp) - resp = resp .. string.format("Sensor %s: %s ℃
", encoder.toBase64(addr), temp) -- readable address with base64 encoding is preferred when encoder module is available + resp = resp .. string.format("Sensor %s: %s ℃
", encoder.toHex(addr), temp) -- readable address with base64 encoding is preferred when encoder module is available end - + resp = resp .. "Node ChipID: " .. node.chipid() .. "
" .. "Node MAC: " .. wifi.sta.getmac() .. "
" ..