3

当 NodeMCU 处于工作站模式并在 init.lua 中使用以下代码片段时,在报告 IP 地址(或达到 IP 堆栈就绪状态)之前,平均仍需要大约 6 次循环迭代

wifi.sta.disconnect()
--settings.lua
SSID    = "xxxx"
APPWD   = "yyyy"

cfg =
  {
    ip="192.168.0.85",
    netmask="255.255.255.0",
    gateway="192.168.0.1"
  }
wifi.sta.setip(cfg)
wifi.sta.config(SSID,APPWD)
wifi.sta.autoconnect(1)

-- wait for WIFI ----
function checkWIFI() 
    print("Waiting for WIFI...")
    ipAddr = wifi.sta.getip()
    if ( ( ipAddr ~= nil ) and  ( ipAddr ~= "0.0.0.0" ) )then
        print("IP Address: " ..ipAddr)

    else
      -- schedule try again 
      tmr.alarm( 0 , 1000 , 0 , checkWIFI)
    end  
end
tmr.alarm( 0 , 1000 , 0 , checkWIFI)

尝试了有无静态IP配置,好像没有什么不同 这正常吗?有没有办法让速度更快?我只是做错了吗?

4

2 回答 2

0

以下是我的实践经验,现在可能已经过时了。我需要重新测试这些...

我做了类似的事情,效果很好。但是,虽然 WiFi 在“重置”后无法快速使用,但在从深度睡眠中唤醒时可以非常快速地使用。

首次使用后(设置会自动保存)我稍后会这样做 lua wifi.sta.setip(cfg) wifi.sta.status() -- this used to speed things up

我还设置wifi.sta.autoconnect(0)了避免 dhcp 延迟。

顺便说一句,要检查连接,最好等待wifi.sta.status() == 5.

高温高压

于 2015-12-20T02:34:07.610 回答
0

根据@Eyal 的回答,我通常能够在深度睡眠后的 415-470 毫秒内(基于计时器)或冷开机后的 3.25 秒内获得 IP 地址。

注意:此解决方案没有 DNS 解析

将您的网络配置保存到闪存

wifi.sta.clearconfig()
wifi.setmode(wifi.STATION)
station_cfg={}
station_cfg.ssid="MyWiFiNetwork"
station_cfg.pwd="MyWiFiPassword"
station_cfg.save=true
station_cfg.auto=false
wifi.sta.config(station_cfg)

每次开机

cfg =
  {
    ip="192.168.0.99",
    netmask="255.255.255.0",
    gateway="192.168.0.1"
  }
wifi.sta.setip(cfg)
wifi.sta.connect()

测试它

function checkWIFI() 
    ipAddr = wifi.sta.getip()
    
    if ( wifi.sta.status() == wifi.STA_GOTIP )then
        --LED On
        gpio.write(4, gpio.LOW)
        gpio.mode(4, gpio.OUTPUT)
        print("Time " .. tmr.now()/1000 .. "ms")           
        print("IP Address: " ..ipAddr)

    else
      -- schedule try again 
      tmr.create():alarm(50, tmr.ALARM_SINGLE, checkWIFI)
    end  
    print("WiFi Status "  ..  wifi.sta.status())
end
tmr.create():alarm(50, tmr.ALARM_SINGLE, checkWIFI)
于 2022-01-11T12:59:09.520 回答