#lua #wifi #nodemcu
#lua #wifi #nodemcu
Вопрос:
Я использую плату NodeMCU ESP8266 12E, и я могу успешно подключиться к своей сети Wi-Fi и протестировать IP. Проблема в том, что наличие IP не обязательно подразумевает наличие доступной полосы пропускания. Возможно, интернет-провайдер не работает, и мой маршрутизатор по-прежнему выдает ESP8266 действительный IP-адрес.
Как мне с этим справиться?
Я поиграл с приведенным ниже кодом, чтобы посмотреть, как он реагирует, когда я отсоединяю провод от своего модема к маршрутизатору, чтобы имитировать ситуацию «отсутствия пропускной способности». Я думал, что STA_DHCP_TIMEOUT автоматически решит проблему, но она работает не так, как я думаю. Простите мое невежество, поскольку я полный новичок в Lua и API NodeMCU.
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?
Ответ №1:
Я полный новичок в Lua и API NodeMCU
Под «отсутствием пропускной способности» вы, похоже, подразумеваете отсутствие подключения к Интернету, верно? Если это так, то этот вопрос кажется совершенно не связанным ни с одним из двух. ИМО, это скорее базовый сетевой вопрос.
- «Тайм-аут DHCP» означает, что время ожидания устройства истекло для получения IP-адреса.
- «Got IP» означает, что один из компонентов вашей сетевой инфраструктуры (DHCP-сервер) был доступен и назначил IP-адрес вашему устройству.
Как вы отметили, это не обязательно означает, что устройство действительно может подключаться к Интернету. Если маршрутизатор действует как DHCP-сервер, а модем, подключенный к маршрутизатору, обеспечивает доступ в Интернет, понятно, что устройство не будет иметь доступа в Интернет, если вы отключите их.
Чтобы определить, доступен ли Интернет с вашего устройства, вам нужно попытаться подключиться к существующему серверу. С помощью NodeMCU проще всего отправить запрос GET на известный ресурс и посмотреть, получите ли вы ответ. Для этого вам, очевидно, понадобится 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)
Комментарии:
1. Спасибо, теперь я знаю, на чем сосредоточить свои исследования. На моем сервере размещения веб-сайта я создам специальный URL-адрес для выполнения этого теста, чтобы ESP8266 мог вызвать его напрямую. Большое спасибо