无法从 NodeMCU 板连接到 Wi-Fi 网络
Cannot connect to wi-fi network from NodeMCU board
我正在尝试连接到我的 NodeMCU 板上的 wifi 网络。不确定是硬件问题还是软件问题,但我找不到有关此问题的任何帮助。
我正在尝试使用此代码连接到 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)
-- print ap list
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
-- other wi fi networks available nearby --
看来wifi模块没问题,是软件问题。我按照the documentation写了代码。在这一点上,我不知道出了什么问题。有什么建议吗?
wifi.sta.connect() 不是同步的,因此不能保证 AP 会在您的 .status() 代码运行时完成连接。事实上,文档说它应该是不必要的,除非 .config() 的自动值设置为 false。
但是,您可以像这样向 .config() 添加回调:
function showip(params)
print("Connected to Wifi. Got IP: " .. params.IP)
end
...
station_cfg.got_ip_cb = showip
wifi.sta.config(station_cfg)
请记住,wifi 会一直断断续续。如果你需要突袭连接(一次性或每次连接),你真的想注册一个回调而不是假设会有一个持续的连接。
回调将可以访问你所有的全局变量,所以你可以在那里存储软件状态,只要确保你能接受你可能想到的任何可能的竞争条件(locking/sync 是另一个的讨论线程)。
我正在尝试连接到我的 NodeMCU 板上的 wifi 网络。不确定是硬件问题还是软件问题,但我找不到有关此问题的任何帮助。
我正在尝试使用此代码连接到 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)
-- print ap list
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
-- other wi fi networks available nearby --
看来wifi模块没问题,是软件问题。我按照the documentation写了代码。在这一点上,我不知道出了什么问题。有什么建议吗?
wifi.sta.connect() 不是同步的,因此不能保证 AP 会在您的 .status() 代码运行时完成连接。事实上,文档说它应该是不必要的,除非 .config() 的自动值设置为 false。
但是,您可以像这样向 .config() 添加回调:
function showip(params)
print("Connected to Wifi. Got IP: " .. params.IP)
end
...
station_cfg.got_ip_cb = showip
wifi.sta.config(station_cfg)
请记住,wifi 会一直断断续续。如果你需要突袭连接(一次性或每次连接),你真的想注册一个回调而不是假设会有一个持续的连接。
回调将可以访问你所有的全局变量,所以你可以在那里存储软件状态,只要确保你能接受你可能想到的任何可能的竞争条件(locking/sync 是另一个的讨论线程)。