diff --git a/docs/en/modules/wifi.md b/docs/en/modules/wifi.md index 8178c1d83d..1941cf3cd0 100644 --- a/docs/en/modules/wifi.md +++ b/docs/en/modules/wifi.md @@ -1504,7 +1504,7 @@ T: Table returned by event. - `wifi.eventmon.STA_DISCONNECTED`: Station was disconnected from access point. - `SSID`: SSID of access point. - `BSSID`: BSSID of access point. - - `REASON`: See [wifi.eventmon.reason](#wifieventmonreason) below. + - `reason`: See [wifi.eventmon.reason](#wifieventmonreason) below. - `wifi.eventmon.STA_AUTHMODE_CHANGE`: Access point has changed authorization mode. - `old_auth_mode`: Old wifi authorization mode. - `new_auth_mode`: New wifi authorization mode. diff --git a/docs/en/upload.md b/docs/en/upload.md index 9ff9a3b075..1eb5867e0a 100644 --- a/docs/en/upload.md +++ b/docs/en/upload.md @@ -56,24 +56,65 @@ function startup() end end +-- Define WiFi station event callbacks +wifi_connect_event = function(T) + print("Connection to AP("..T.SSID..") established!") + print("Waiting for IP address...") + if disconnect_ct ~= nil then disconnect_ct = nil end +end + +wifi_got_ip_event = function(T) + -- Note: Having an ip address does not mean there is internet access! + -- Internet connectivity can be determined with net.dns.resolve(). + print("Wifi connection is ready! IP address is: "..T.IP) + print("Startup will resume momentarily, you have 3 seconds to abort.") + print("Waiting...") + tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup) +end + +wifi_disconnect_event = function(T) + if T.reason == wifi.eventmon.reason.ASSOC_LEAVE then + --the station has disassociated from a previously connected AP + return + end + -- total_tries: how many times the station will attempt to connect to the AP. + local total_tries = 75 + print("\nWiFi connection to AP("..T.SSID..") has failed!") + + --There are many possible disconnect reasons, the following iterates through + --the list and returns the string corresponding to the disconnect reason. + for key,val in pairs(wifi.eventmon.reason) do + if val == T.reason then + print("Disconnect reason:"..val.."("..key..")") + break + end + end + + if disconnect_ct == nil then + disconnect_ct = 1 + else + disconnect_ct = disconnect_ct + 1 + end + if disconnect_ct < total_tries then + print("Retrying connection...(attempt "..(disconnect_ct+1).." of "..total_tries..")") + else + wifi.sta.disconnect() + print("Aborting connection to AP!") + disconnect_ct = nil + end +end + +-- Register WiFi Station event callbacks +wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, wifi_connect_event) +wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, wifi_got_ip_event) +wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, wifi_disconnect_event) + print("Connecting to WiFi access point...") wifi.setmode(wifi.STATION) -wifi.sta.config(SSID, PASSWORD) +wifi.sta.config({ssid=SSID, pwd=PASSWORD, save=true}) -- wifi.sta.connect() not necessary because config() uses auto-connect=true by default -tmr.create():alarm(1000, tmr.ALARM_AUTO, function(cb_timer) - if wifi.sta.getip() == nil then - print("Waiting for IP address...") - else - cb_timer:unregister() - print("WiFi connection established, IP address: " .. wifi.sta.getip()) - print("You have 3 seconds to abort") - print("Waiting...") - tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup) - end -end) -``` -Inspired by [https://github.com/ckuehnel/NodeMCU-applications](https://github.com/ckuehnel/NodeMCU-applications) +``` # Compiling Lua on your PC for Uploading