2024-07-28 17:24:50 +02:00
|
|
|
#include <Ticker.h>
|
|
|
|
#include <WiFiManager-esp32.h> // https://github.com/admarschoonen/WiFiManager
|
|
|
|
|
|
|
|
#include "../include/WifiHandler.hpp"
|
|
|
|
|
|
|
|
WiFiManager wifiManager;
|
|
|
|
Ticker ticker;
|
|
|
|
|
|
|
|
static void tick(void) {
|
|
|
|
int state = 0;
|
|
|
|
|
|
|
|
if (LED_BUILTIN >= 0) {
|
|
|
|
state = digitalRead(LED_BUILTIN);
|
|
|
|
digitalWrite(LED_BUILTIN, !state);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-08-16 21:29:50 +02:00
|
|
|
void set_blink_rate(float interval) {
|
2024-08-08 22:54:33 +02:00
|
|
|
if (ticker.active()) {
|
|
|
|
ticker.detach();
|
|
|
|
}
|
2024-07-28 17:24:50 +02:00
|
|
|
|
2024-08-16 21:29:50 +02:00
|
|
|
if (interval > 0.0f) {
|
|
|
|
ticker.attach(interval, tick);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void wifiManagerCb(WiFiManager::Status status) {
|
2024-07-28 17:24:50 +02:00
|
|
|
if (status.mode == WiFiManager::Mode::CONNECTING) {
|
2024-08-16 21:29:50 +02:00
|
|
|
set_blink_rate(TICKER_RATE_CONNECTING);
|
2024-07-28 17:24:50 +02:00
|
|
|
} else if (status.mode == WiFiManager::Mode::SCANNING) {
|
2024-08-16 21:29:50 +02:00
|
|
|
set_blink_rate(TICKER_RATE_CONNECTING);
|
2024-07-28 17:24:50 +02:00
|
|
|
} else if (status.mode == WiFiManager::Mode::PORTAL) {
|
2024-08-16 21:29:50 +02:00
|
|
|
set_blink_rate(TICKER_RATE_CONFIG);
|
2024-07-28 17:24:50 +02:00
|
|
|
} else if (status.mode == WiFiManager::Mode::ERASING) {
|
2024-08-16 21:29:50 +02:00
|
|
|
set_blink_rate(TICKER_RATE_ERASE);
|
2024-07-28 17:24:50 +02:00
|
|
|
} else if (status.mode == WiFiManager::Mode::CONNECTED) {
|
2024-08-16 21:29:50 +02:00
|
|
|
set_blink_rate(0.0f);
|
2024-07-28 17:24:50 +02:00
|
|
|
digitalWrite(LED_BUILTIN, HIGH);
|
|
|
|
} else if (status.mode == WiFiManager::Mode::DISCONNECTED) {
|
2024-08-16 21:29:50 +02:00
|
|
|
set_blink_rate(0.0f);
|
2024-07-28 17:24:50 +02:00
|
|
|
digitalWrite(LED_BUILTIN, LOW);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void connect() {
|
|
|
|
Serial.begin(115200);
|
|
|
|
|
2024-08-16 21:29:50 +02:00
|
|
|
wifiManager.configure("Claire", wifiManagerCb);
|
2024-07-28 17:24:50 +02:00
|
|
|
|
|
|
|
// fetches ssid and pass and tries to connect
|
|
|
|
// if it does not connect it starts an access point
|
|
|
|
// and goes into a blocking loop awaiting configuration
|
|
|
|
if (!wifiManager.autoConnect()) {
|
|
|
|
Serial.println("failed to connect and hit timeout");
|
|
|
|
// reset and try again, or maybe put it to deep sleep
|
|
|
|
ESP.restart();
|
|
|
|
delay(1000);
|
|
|
|
}
|
|
|
|
|
|
|
|
// if you get here you have connected to the WiFi
|
|
|
|
Serial.print("connected with address: ");
|
|
|
|
Serial.println(WiFi.localIP());
|
|
|
|
|
|
|
|
// keep LED on
|
2024-08-16 21:29:50 +02:00
|
|
|
digitalWrite(LED_BUILTIN, HIGH);
|
|
|
|
}
|
|
|
|
|
|
|
|
void resetSettings() {
|
|
|
|
WiFiManager::Status status = {.wifi_status = 0U, .mode = WiFiManager::Mode::ERASING};
|
|
|
|
|
|
|
|
Serial.println("resetting wifi settings...");
|
|
|
|
|
|
|
|
wifiManagerCb(status);
|
|
|
|
wifiManager.resetSettings();
|
|
|
|
delay(1000);
|
|
|
|
status.mode = WiFiManager::Mode::DISCONNECTED;
|
|
|
|
wifiManagerCb(status);
|
|
|
|
|
|
|
|
return;
|
2024-07-28 17:24:50 +02:00
|
|
|
}
|