连接到 WiFi 的 NodeMCU 错误
NodeMCU error connecting to WiFi
我已经尝试在 NodeMCU 上闪烁,工作正常,但是在与 WiFi 进行基本连接时出现此错误:
init.lua:4: attempt to concatenate global 'gw' (a nil value)
这是连接
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")
对于 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
我已经尝试在 NodeMCU 上闪烁,工作正常,但是在与 WiFi 进行基本连接时出现此错误:
init.lua:4: attempt to concatenate global 'gw' (a nil value)
这是连接
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")
对于 NodeMCU,许多函数都是异步的(假设这是默认值)。因此,调用 wifi.sta.config
不会阻塞您的主线程,因此您的设备很可能在您调用 wifi.sta.getip
.
如果您有来自 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