blak soft
Member
это мой первый опыт
никак не могу сделать простой термометр
использую
1. NodeMCU Lua V2 wi-fi на базе ESP8266 (CP2102)
2. Датчик температуры DS18B20 в герметичном корпусе
нашел листинги
ds18b20.lua
main.lua
init.lua
заливаю через программу "ESPlorer" но выдает ошибку
unprotected error in call to Lua API (ds18b20.lua:44: attempt to index upvalue '?' (a nil value))
перед запуском программы выдает следующее
ets Jan 8 2013,rst cause:2, boot mode3,7)
load 0x40100000, len 27556, room 16
tail 4
chksum 0xf8
load 0x3ffe8000, len 2440, room 4
tail 4
chksum 0x48
load 0x3ffe8988, len 136, room 4
tail 4
chksum 0x4b
csum 0x4b
NodeMCU custom build by frightanic.com
branch: dev
commit: bb9a5977d3eddd65b653b76dc4769cfd35be630e
SSL: false
modules: bme280,cron,crypto,file,gpio,http,i2c,net,node,rtctime,sntp,spi,tmr,u8g2,uart,websocket,wifi,wifi_monitor,wps
build created on 2018-11-18 07:57
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
подскажите что делаю не так
никак не могу сделать простой термометр
использую
1. NodeMCU Lua V2 wi-fi на базе ESP8266 (CP2102)
2. Датчик температуры DS18B20 в герметичном корпусе
нашел листинги
ds18b20.lua
Код:
--------------------------------------------------------------------------------
-- DS18B20 one wire module for NODEMCU
-- NODEMCU TEAM
-- LICENCE: http://opensource.org/licenses/MIT
-- Vowstar <vowstar@nodemcu.com>
-- 2015/02/14 sza2 <sza2trash@gmail.com> 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 == 'K') then
t = t + 2731500
else
return nil
end
-- Fix by noss. Returns formatted string.
--t = t / 10000
t1 = t / 10000
t2 = (t >= 0 and t % 10000) or (10000 - t % 10000)
t = t1 .. "."..string.format("%04d", t2)
--end of fix
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
Код:
t = require('ds18b20')
-- ESP-01 GPIO Mapping
gpio0 = 3
t.setup(gpio0)
function getTmp(t)
local tempr = t.read()
print("Temp:"..tempr.." C\n")
end
tmr.alarm(1, 1000,1, function() getTmp(t) end )
Код:
tmr.register (0, 15000, tmr.ALARM_SINGLE, function (t) tmr.unregister (0); print ( "запуск файла main.lui"); dofile ( "main.lua") end)
tmr.start (0)
unprotected error in call to Lua API (ds18b20.lua:44: attempt to index upvalue '?' (a nil value))
перед запуском программы выдает следующее
ets Jan 8 2013,rst cause:2, boot mode3,7)
load 0x40100000, len 27556, room 16
tail 4
chksum 0xf8
load 0x3ffe8000, len 2440, room 4
tail 4
chksum 0x48
load 0x3ffe8988, len 136, room 4
tail 4
chksum 0x4b
csum 0x4b
NodeMCU custom build by frightanic.com
branch: dev
commit: bb9a5977d3eddd65b653b76dc4769cfd35be630e
SSL: false
modules: bme280,cron,crypto,file,gpio,http,i2c,net,node,rtctime,sntp,spi,tmr,u8g2,uart,websocket,wifi,wifi_monitor,wps
build created on 2018-11-18 07:57
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
подскажите что делаю не так