我正在尝试修复我在网上找到的一段代码。 (是的,我知道....) 但是,如果你们能帮我解决这个错误,那就太好了:
错误:lua:init.lua:15:尝试调用方法“ alarm”(nil值)
代码(从此处:https://github.com/Christoph-D/esp8266-wakelight)
dofile("globals.lc")
wifi.setmode(wifi.STATION)
wifi.sta.config(WIFI_SSID, WIFI_PASSWORD)
wifi.sta.sethostname(MY_HOSTNAME)
if WIFI_STATIC_IP then
wifi.sta.setip({ip = WIFI_STATIC_IP, netmask = WIFI_NETMASK, gateway = WIFI_GATEWAY})
end
wifi.sta.connect()
-- Initialize the LED_PIN to the reset state.
gpio.mode(LED_PIN, gpio.OUTPUT)
gpio.write(LED_PIN, gpio.LOW)
tmr.alarm(
MAIN_TIMER_ID, 2000, tmr.ALARM_AUTO, function ()
if wifi.sta.getip() then
tmr.unregister(MAIN_TIMER_ID)
print("Config done, IP is " .. wifi.sta.getip())
dofile("ledserver.lc")
end
end)
我在那里可以做什么?怎么了?
干杯,谢谢!!
答案 0 :(得分:1)
全部在手册中。您只需要阅读它即可。
有一个示例,说明如何使用计时器对象的警报方法。
if not tmr.create():alarm(5000, tmr.ALARM_SINGLE, function()
print("hey there")
end)
then
print("whoopsie")
end
您试图呼叫tmr.alarm
,但它是tobj:alarm
。该手册未提及tmr.alarm
。该功能已于2019年1月从NodeMCU中删除。
您使用的是在线发现的基于旧版NodeMCU的代码。它正在使用现在不推荐使用的功能。
请参见https://github.com/nodemcu/nodemcu-firmware/pull/2603#issuecomment-453235401
和
因此,必须首先创建一个计时器对象,然后才能使用其任何方法。 alarm
不再是tmr
模块的方法。
修改
首先,您必须创建一个计时器对象https://nodemcu.readthedocs.io/en/latest/modules/tmr/#tobjcreate
local tObj = tmr.create()
然后,您必须register进行回调并start计时器。有一个便捷功能alarm可以为我们完成这一切。
当我们不再需要计时器时,我们必须通过调用来释放资源
tObj:unregister()
尝试类似
-- create a timer object
local tObj = tmr.create()
-- register an alarm
tObj:alarm(2000, tmr.ALARM_AUTO, function ()
if wifi.sta.getip() then
tObj:unregister()
print("Config done, IP is " .. wifi.sta.getip())
dofile("ledserver.lc")
end
end)