2016-05-28 85 views
0

我曾嘗試在NodeMCU眨眼工作確定,但這樣做對無線網絡的基本連接,當我得到這個錯誤: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") 

回答

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