为什么 wifi.sta 在 wifi.setmode(wifi.STATIONAP) 后仍为空?

编辑:我想要做的事情基本上就是在 softap 运行 TCP 服务器之后配置 station。 我在之前正确地配置了它,但仍然在调用wifi.sta.config(station_cfg)时得到“恐慌错误”,因为 wifi.sta 为空。

当我这样做:

function connectHib()
   wifi.setmode(wifi.STATIONAP)
   [AP config here]
   station_cfg={}
   station_cfg.ssid = ""
   station_cfg.pwd = ""
   station_cfg.save = false
   station_cfg.auto = false
   wifi.sta.config(station_cfg)
end

它运行良好,但是当我调用它,然后使用srv=net.createServer(net.TCP)启动一个服务器,再调用以下函数时:

function validateSTA()
   station_cfg={}
   station_cfg.ssid = _G.wifi
   station_cfg.pwd = _G.senha
   station_cfg.save = false
   station_cfg.auto = false
   wifi.sta.config(station_cfg) -- 这会产生一个错误
   wifi.sta.connect()
end

它在被注释的行上给我一个恐慌错误。我只是想重新配置仅限于 STATION 模块的连接,然后告诉它连接以便验证连接。

我正在使用:

由 frightanic.com 提供的 NodeMCU 自定义版本
    分支:master
    提交:67027c0d05f7e8d1b97104e05a3715f6ebc8d07f
    SSL:false
    模块:adc,file,gpio,net,node,pwm,sjson,tmr,uart,wifi
 在 2018-04-16 13:55 创建的构建
 在 SDK 2.2.1(cfd48f3) 上由 Lua 5.1.4 支持

令我困惑的是为什么它似乎在之前没有被“声明”了,但是在第一个函数中它可以使用... 我以为wifi.sta是全局,就像_G变量一样。

如果我在没有我的 init.lua 的 ESP 上单独调用函数,它也可以工作。

我还尝试了调试固件,唯一奇怪的东西是每4秒左右调用一次的_wifi_event_monitor_handle_event_cb。

谢谢各位,非常感谢,因为我已经困在这里一个星期了。

点赞
用户4687565
用户4687565

像许多其他脚本语言一样,Lua 没有声明,只有赋值操作。

在第一次和第二次调用期间,应该检查 wifi 的值。在第一次中,似乎将其用作表格,在第二个函数中尝试将其用作字符串来设置 station_cfg.ssid = _G.wifi

或者可能的原因是全局变量不是“像 _G”,它们存储在 _G 中。

2018-04-17 21:27:16