#include #include bool useStaticIP = false; #ifndef STASSID #define STASSID "DWI 2319" #define STAPSK "*65S265u" #endif const char* ssid = STASSID; const char* password = STAPSK; String staticIP = "192.168.0.100"; String staticGateway = "192.168.0.1"; String staticSubnet = "255.255.255.0"; String staticDNS = "192.168.0.1"; String mdnsPrefix = "SMART-UPS"; //for fast access like http://smart-ups.local static volatile bool wifiStarted = false; static volatile uint32_t wifiNextCheckTick = 0; static volatile bool wifiConnected = false; static volatile bool wifiConnecting = false; static volatile uint8_t wifiCurrentState = 0; static volatile bool setWifiConfig = false; static volatile uint8_t wifiSignalLevel = 0; //0=none, 1=low, 2=medium, 2=high long rssi = -999; void WiFiManagerRoutine() { int8_t wifiState = WiFi.status(); bool isWifiConnected = wifiState == WL_CONNECTED; if (isWifiConnected) wifiConnecting = false; if (wifiConnected != isWifiConnected){ setWifiConfig = true; //reset config on reconnect wifiConnected = isWifiConnected; if (wifiConnected) wifiCurrentState = 2; //connected } //wifi signal update rssi = WiFi.RSSI(); if (rssi <= -80){ wifiSignalLevel = 1; }else if (rssi > -80 && rssi <= -70){ wifiSignalLevel = 2; }else if (rssi > -70 && rssi <= -60){ wifiSignalLevel = 3; }else{ wifiSignalLevel = 3; } if (!isWifiConnected){ if (wifiState==WL_NO_SSID_AVAIL || wifiState==WL_CONNECT_FAILED || wifiState==WL_CONNECTION_LOST) { wifiConnecting = false; wifiCurrentState=0; wifiSignalLevel = 0; } if (!wifiStarted || (millis() - wifiNextCheckTick) >= 30000UL){ //check each 30seconds wifiStarted = true; Serial.print("Connecting to "); Serial.println(ssid); WiFi.setOutputPower(20.5);//set to max dbm for reliability (for highest RF power output, supply current ~ 80mA) //WiFi.setOutputPower(0);//(for lowest RF power output, supply current ~ 70mA) WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); wifiNextCheckTick = millis(); //next 30 seconds check again wifiConnecting = true; wifiCurrentState = 1; //connecting } }else{ if (!wifiStarted){ wifiStarted = true; setWifiConfig = true; } if (setWifiConfig){ //set connection on first time connected setWifiConfig = false; WiFi.setAutoReconnect(true); WiFi.persistent(true); if (useStaticIP){ IPAddress ip, gateway, subnet, dns; bool b = ip.fromString(staticIP); b = gateway.fromString(staticGateway); b = subnet.fromString(staticSubnet); b = dns.fromString(staticDNS); WiFi.config(ip, gateway, subnet, dns); } Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin(mdnsPrefix)) { Serial.print("MDNS responder started as "); Serial.print(mdnsPrefix); Serial.println(".local"); } } MDNS.update(); } }