107 lines
3.1 KiB
C
107 lines
3.1 KiB
C
#include <ESP8266WiFi.h>
|
|
#include <ESP8266mDNS.h>
|
|
|
|
bool useStaticIP = false;
|
|
#ifndef STASSID
|
|
#define STASSID "FADI"
|
|
#define STAPSK "12341234"
|
|
#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();
|
|
|
|
}
|
|
|
|
}
|