即使使用有效 IP 也测试无带宽

Test no-bandwidth even with valid IP

我正在使用 nodeMCU ESP8266 12E 开发板,我可以成功连接到我的 wifi 网络并测试 IP。问题是,拥有 IP 并不一定意味着有可用带宽。可能是 ISP 关闭了,我的路由器仍然给 ESP8266 一个有效的 IP。

我该如何处理?

我一直在研究下面的代码,看看它如何响应当我拔下调制解调器到路由器的电线以模拟“NO -带宽”的情况。我以为 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())

下图显示了输出。有人可以告诉我如何在我拥有有效 IP 的情况下感知 "NO-Bandwidth" 吗?

I am a complete novice in Lua and the NodeMCU api

你说的"no-bandwidth"好像是没有网络连接吧?如果是这样,那么这个问题似乎与这两个问题都无关。 IMO 这更像是一个基本的网络问题。

  • "DHCP timeout"表示设备获取IP地址超时
  • "Got IP" 表示您的网络基础设施的组件之一(DHCP 服务器)可以访问并为您的设备分配了一个 IP 地址。

如您所述,这并不一定意味着该设备实际上可以连接到互联网。如果路由器充当 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)