Claire/src/WifiHandler.cpp

82 lines
2.2 KiB
C++
Raw Normal View History

#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);
}
}
void set_blink_rate(float interval) {
if (ticker.active()) {
ticker.detach();
}
if (interval > 0.0f) {
ticker.attach(interval, tick);
}
}
void wifiManagerCb(WiFiManager::Status status) {
if (status.mode == WiFiManager::Mode::CONNECTING) {
set_blink_rate(TICKER_RATE_CONNECTING);
} else if (status.mode == WiFiManager::Mode::SCANNING) {
set_blink_rate(TICKER_RATE_CONNECTING);
} else if (status.mode == WiFiManager::Mode::PORTAL) {
set_blink_rate(TICKER_RATE_CONFIG);
} else if (status.mode == WiFiManager::Mode::ERASING) {
set_blink_rate(TICKER_RATE_ERASE);
} else if (status.mode == WiFiManager::Mode::CONNECTED) {
set_blink_rate(0.0f);
digitalWrite(LED_BUILTIN, HIGH);
} else if (status.mode == WiFiManager::Mode::DISCONNECTED) {
set_blink_rate(0.0f);
digitalWrite(LED_BUILTIN, LOW);
}
}
void connect() {
Serial.begin(115200);
wifiManager.configure("Claire", wifiManagerCb);
// 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
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;
}