Nicu Hodos c03c3d03fd decouple mqtt:
- register onConnected and onDisconnected callbacks
- allow optional Scheduler
- publishInit is independent on Scheduler
2024-05-22 13:42:52 +02:00

69 lines
1.8 KiB
C++

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266mDNS.h>
#include "credentials.h"
namespace Wifi {
WiFiEventHandler stationConnectedHandler;
WiFiEventHandler stationDisconnectedHandler;
ESP8266WiFiMulti wifiMulti;
String currentSSID;
String currentPsk;
void printStatus();
Task tReconnect(1 * TASK_MINUTE, TASK_FOREVER, [](){
if (WiFi.status() != WL_CONNECTED) {
WiFi.forceSleepWake();
WiFi.begin(currentSSID.c_str(), currentPsk.c_str());
Serial.println("Reconnecting to WiFi netowrk...");
}
}, &ts);
void setup() {
stationConnectedHandler = WiFi.onStationModeGotIP([](const WiFiEventStationModeGotIP& e) {
Serial.println("Connected to network.");
printStatus();
tReconnect.cancel();
Ota::tLoop.enable();
Mqtt::tReConnect.enable();
});
stationDisconnectedHandler = WiFi.onStationModeDisconnected([](const WiFiEventStationModeDisconnected& e) {
Serial.println("Disconnected from network.");
});
for (uint32_t i = 0; i < sizeof(credentials) / sizeof(WifiCredentials); i++) {
wifiMulti.addAP(credentials[i].ssid, credentials[i].password);
}
WiFi.setHostname("rc-gateway");
Serial.println("Connecting to WiFi netowrk.");
while (wifiMulti.run() != WL_CONNECTED) {
delay(500);
}
currentSSID = WiFi.SSID();
currentPsk = WiFi.psk();
}
void printStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
}