恐慌:调用 Lua API 时发生未受保护的错误(标准输入:8:尝试调用全局 'run'(零值))
PANIC: unprotected error in call to Lua API (stdin:8: attempt to call global 'run' (a nil value))
使用来自 https://github.com/nodemcu/nodemcu-firmware 运行 以下代码的 NodeMCU:
ssid = "www.mydomain.com"
pass = "234234234432"
gpio.write(0, gpio.LOW)
print("Startup up wifi mode")
wifi.setmode(wifi.STATION)
wifi.sta.config(ssid, pass)
wifi.sta.autoconnect(1)
wifi.sta.connect()
tmr.alarm(3, 1000, 1, function()
if (wifi.sta.status() < 5) then
print("Connecting...")
else
tmr.stop(3)
print("Connected having IP "..wifi.sta.getip())
gpio.write(0, gpio.HIGH)
run()
end
end)
gpio.write(0, gpio.HIGH)
function run()
print("run")
myhost="www.adafruit.com"
mypage="testwifi/index.html"
myip=""
sk=net.createConnection(net.TCP, 0)
sk:dns(myhost,function(conn,ip)
myip=ip
sk=net.createConnection(net.TCP, 0)
sk:on("receive", function(sck, c) print(c) end )
sk:connect(80,myip)
sk:send("GET / " .. mypage .." HTTP/1.1\r\nHost: " .. myhost .."\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
sk=nil
end
我收到这个错误:
PANIC: unprotected error in call to Lua API (stdin:8: attempt to call global 'run' (a nil value))
����m������!������!�1���
Waiting answer from ESP - Timeout reached. Command aborted.
我该如何解决?
请记住,NodeMCU/Lua 是完全异步的,函数需要在调用之前定义。
function start()
tmr.alarm(3, 1000, 1, function()
if (wifi.sta.status() < 5) then
print("Connecting...")
else
tmr.stop(3)
print("Connected having IP "..wifi.sta.getip())
gpio.write(0, gpio.HIGH)
run()
end
end)
gpio.write(0, gpio.HIGH)
end
function run()
print("run")
myhost="www.adafruit.com"
mypage="testwifi/index.html"
myip=""
sk=net.createConnection(net.TCP, 0)
sk:dns(myhost,function(conn,ip)
myip=ip
sk=net.createConnection(net.TCP, 0)
sk:on("receive", function(sck, c) print(c) end )
sk:connect(80,myip)
sk:send("GET / " .. mypage .." HTTP/1.1\r\nHost: " .. myhost .."\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
sk=nil
end
start()
此外,请考虑如果您的设备在 成功连接后 断开与 WiFi 的连接会发生什么情况。您停止了计时器...
使用来自 https://github.com/nodemcu/nodemcu-firmware 运行 以下代码的 NodeMCU:
ssid = "www.mydomain.com"
pass = "234234234432"
gpio.write(0, gpio.LOW)
print("Startup up wifi mode")
wifi.setmode(wifi.STATION)
wifi.sta.config(ssid, pass)
wifi.sta.autoconnect(1)
wifi.sta.connect()
tmr.alarm(3, 1000, 1, function()
if (wifi.sta.status() < 5) then
print("Connecting...")
else
tmr.stop(3)
print("Connected having IP "..wifi.sta.getip())
gpio.write(0, gpio.HIGH)
run()
end
end)
gpio.write(0, gpio.HIGH)
function run()
print("run")
myhost="www.adafruit.com"
mypage="testwifi/index.html"
myip=""
sk=net.createConnection(net.TCP, 0)
sk:dns(myhost,function(conn,ip)
myip=ip
sk=net.createConnection(net.TCP, 0)
sk:on("receive", function(sck, c) print(c) end )
sk:connect(80,myip)
sk:send("GET / " .. mypage .." HTTP/1.1\r\nHost: " .. myhost .."\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
sk=nil
end
我收到这个错误:
PANIC: unprotected error in call to Lua API (stdin:8: attempt to call global 'run' (a nil value))
����m������!������!�1���
Waiting answer from ESP - Timeout reached. Command aborted.
我该如何解决?
请记住,NodeMCU/Lua 是完全异步的,函数需要在调用之前定义。
function start()
tmr.alarm(3, 1000, 1, function()
if (wifi.sta.status() < 5) then
print("Connecting...")
else
tmr.stop(3)
print("Connected having IP "..wifi.sta.getip())
gpio.write(0, gpio.HIGH)
run()
end
end)
gpio.write(0, gpio.HIGH)
end
function run()
print("run")
myhost="www.adafruit.com"
mypage="testwifi/index.html"
myip=""
sk=net.createConnection(net.TCP, 0)
sk:dns(myhost,function(conn,ip)
myip=ip
sk=net.createConnection(net.TCP, 0)
sk:on("receive", function(sck, c) print(c) end )
sk:connect(80,myip)
sk:send("GET / " .. mypage .." HTTP/1.1\r\nHost: " .. myhost .."\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
sk=nil
end
start()
此外,请考虑如果您的设备在 成功连接后 断开与 WiFi 的连接会发生什么情况。您停止了计时器...