我正在使用 nodeMCU ESP8266 12E 主板,我可以成功连接到我的wifi网络并测试IP。问题是,拥有IP并不一定意味着有可用的带宽。可能是ISP关闭了,我的路由器仍然给ESP8266一个有效的IP。
我该如何处理?
我一直在玩下面的代码,看看当我从调制解调器拔出电线到路由器时如何响应以模拟" NO-Bandwidth "情况。我以为STA_DHCP_TIMEOUT会自动解决这个问题,但它不像我想的那样工作。原谅我的无知,因为我是Lua和NodeMCU api的完全新手。
wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T)
print("wIfI Connected")
end)
wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
print("wIfI Disconnected")
end)
wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
print("wIfI Got an IP")
end)
wifi.eventmon.register(wifi.eventmon.STA_DHCP_TIMEOUT, function()
print("DHCP TIMEOUT")
end)
wifi.setmode(wifi.STATION)
wifi.sta.config("mySSID","myPassword")
print(wifi.sta.getip())
答案 0 :(得分:3)
我是Lua和NodeMCU api的完全新手
通过“无带宽”你似乎意味着没有互联网连接,对吧?如果是这样,那么这个问题似乎与两者中的任何一个都无关。 IMO它更像是一个基本的网络问题。
正如您所说,这并不一定意味着该设备实际上可以连接到互联网。如果路由器充当DHCP服务器,并且连接到路由器的调制解调器提供互联网访问,则可以理解的是,如果断开两者,设备将无法访问互联网。
要检测是否可以从您的设备访问互联网,您需要尝试连接到那里的服务器。使用NodeMCU最简单的方法是将GET request发送到已知资源,看看是否收到回复。你显然需要HTTP模块。
http.get("http://httpbin.org/ip", nil, function(code, data)
if (code < 0) then
print("HTTP request failed")
else
print(code, data)
end
end)
更新20181130
以后改进自己的答案永远不会太晚......比使用HTTP模块更容易尝试DNS解析如下:
net.dns.resolve("www.google.com", function(sk, ip)
if (ip == nil) then print("DNS fail! Maybe not connected to the internet.") else print(ip) end
end)