无法从NodeMCU板连接到Wi-Fi网络

我试图在我的NodeMCU板上连接到我的Wi-Fi网络。我不确定这是硬件问题还是软件问题,但我找不到任何有关该问题的帮助。

我正在尝试使用以下代码连接到WiFi:

wifi.setmode(wifi.STATION)

station_cfg = {};
station_cfg.ssid = "netia9000";
station_cfg.pwd = "mywifipassword";
wifi.sta.config(station_cfg)
wifi.sta.connect()
status_of_wifi = wifi.sta.status()

if status_of_wifi == wifi.STA_IDLE then print"IDLE"end;
if status_of_wifi == wifi.STA_CONNECTING then print"CONNECTING"end;
if status_of_wifi == wifi.STA_WRONGPWD then print"WRONG PS"end;
if status_of_wifi == wifi.STA_APNOTFOUND then print"404"end;
if status_of_wifi == wifi.STA_FAIL then print"500"end;
if status_of_wifi == wifi.STA_GOTIP then print"IP GOT"end;

print(wifi.sta.getip())

但我在控制台上可以读到以下内容:

CONNECTING
nil

我尝试输入错误的数据 - 不存在的WiFi SSID,错误的 `密码,但无论我输入什么,最终都会得到相同的输出:“CONNECTING”和“nil”。

我使用了这段代码来检查可用网络:

wifi.setmode(wifi.STATION)

-- 打印AP列表
function listap(t)
     for ssid,v in pairs(t)do
        authmode,rssi,bssid,channel =
          string.match(v,“(%d),(-?%d +),(%x%x:%x%x:%x%x:%x%x:%x%x:%x%x),(%d +)”)
        print(ssid,authmode,rssi,bssid,channel)
      end
end

wifi.sta.getap(listap)

这很完美地奏效。我在控制台上得到了以下内容:

netia9000 3 -52 e8:11:23:43:bf:a2:8f 10
--其他附近可用的Wi-Fi网络 --

因此,看起来Wi-Fi模块很好,而且这是一个软件问题。我根据[文档]编写了代码(https://nodemcu.readthedocs.io/en/master/en/modules/wifi/#wifistaconfig)。此时,我不知道问题出在哪里。有什么建议吗?

点赞
用户6020403
用户6020403

wifi.sta.connect() 是异步的,因此不能保证在运行 .status() 代码时 AP 连接已完成。实际上,文档说除非 .config() 的 auto 值设置为 false,否则这是不必要的。

但是,您可以像这样向 .config() 添加回调函数:

function showip(params)
    print("连接到Wifi。IP 地址为:" .. params.IP)
end

...
station_cfg.got_ip_cb = showip
wifi.sta.config(station_cfg)

请记住,WiFi 连接可能随时断开。如果您需要在连接的一次或每次连接时进行操作,您真正需要的是注册一个回调函数,而不是假定将有一个恒定的连接。

回调函数将访问所有全局变量,因此您可以在其中存储软件状态,只需确保您能够处理可能产生的任何竞争条件(锁定/同步是另一个线程的讨论)。

2018-01-04 20:20:03