NodeMCU连接WiFi时出错

我尝试了在NodeMCU上进行了闪烁,一切正常,但是当进行基本的WiFi连接时,我会得到以下错误:

init.lua:4: 拼接全局变量'gw' (空值)

这是连接方式:

wifi.setmode(wifi.STATION)
wifi.sta.config("WiFi名称","密码")
ip, nm, gw=wifi.sta.getip()
print("\nIP信息:\nIP地址:"..ip.." \n子网掩码:"..nm.." \n网关地址:"..gw.."\n")
点赞
用户131929
用户131929

使用 NodeMCU,许多功能都是异步的(默认情况下都是)。因此,调用 wifi.sta.config 不会阻塞你的主线程,因此在你调用 wifi.sta.getip 时,你的设备可能还没有连接到 WiFi。

如果你有来自dev分支的固件,可以使用 WiFi 事件监视器 来解决这个问题:

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)

我在 一个 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
-- 如果没有连接到 WiFi,点亮一个 LED(见下文)
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
        -- 只有在状态实际发生变化时才执行一些操作
        -- 当然你可以将这两个 `if` 合并,但对于此 Gist 来说更加明确
        if wifiReady == 0 then
            wifiReady = 1
            print("WiFi: connected")
            turnWiFiLedOn()
            -- 执行一些操作
        end
    else
        wifiReady = 0
        print("WiFi: (re-)connecting")
        turnWiFiLedOnOff()
        wifi.sta.connect()
    end
end
2016-05-28 06:27:52