我已尝试在NodeMCU上工作正常,但在与WiFi进行基本连接时出现此错误:
init.lua:4:尝试连接全局'gw'(零值)
这是连接
wifi.setmode(wifi.STATION)
wifi.sta.config("wifi-name","password")
ip, nm, gw=wifi.sta.getip()
print("\nIP Info:\nIP Address: "..ip.." \nNetmask: "..nm.." \nGateway Addr: "..gw.."\n")
答案 0 :(得分:2)
使用NodeMCU,许多功能都是异步的(假设这是默认设置)。因此,呼叫wifi.sta.config
并不会阻止您的主要线程,因此,当您调用wifi.sta.getip
时,您的设备很可能无法连接到WiFi。
如果您拥有dev
分支机构的固件,则可以使用WiFi event monitor来解决此问题:
wifi.sta.eventMonReg(wifi.STA_GOTIP, function()
ip, nm, gw=wifi.sta.getip()
print("\nIP Info:\nIP Address: "..ip.." \nNetmask: "..nm.." \nGateway Addr: "..gw.."\n")
end)
我记录了一个更基本的计时器回调驱动方法in a Gist:
wifiReady = 0
function configureWiFi()
wifi.setmode(wifi.STATION)
wifi.sta.config(WIFI_SSID, WIFI_PASS)
wifi.sta.connect()
tmr.alarm(WIFI_ALARM_ID, 1000, 1, wifi_watch)
end
-- while NOT connected to WiFi you blink a LED, see below
function wifi_watch()
-- 0: STATION_IDLE,
-- 1: STATION_CONNECTING,
-- 2: STATION_WRONG_PASSWORD,
-- 3: STATION_NO_AP_FOUND,
-- 4: STATION_CONNECT_FAIL,
-- 5: STATION_GOT_IP.
status = wifi.sta.status()
if status == 5 then
-- only do something if the status actually changed
-- you could of course combine these two 'if's but it's more explicit for this gist
if wifiReady == 0 then
wifiReady = 1
print("WiFi: connected")
turnWiFiLedOn()
-- do something
end
else
wifiReady = 0
print("WiFi: (re-)connecting")
turnWiFiLedOnOff()
wifi.sta.connect()
end
end