TKK_E32230469/firmware_iot_esp12f/wifi.h

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();
}
}