连接到 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