feat: Wi-Fi provisioning via WiFiManager captive portal

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 20:41:30 +07:00
co-authored by Claude Opus 4.8
parent 77d0a35d69
commit cb3a06382e
3 changed files with 28 additions and 0 deletions
+8
View File
@@ -7,6 +7,7 @@
#include "forecast.h" #include "forecast.h"
#include "history.h" #include "history.h"
#include "app_settings.h" #include "app_settings.h"
#include "net.h"
#include "state.h" #include "state.h"
AppState g_state; AppState g_state;
@@ -51,6 +52,13 @@ void setup() {
historyLoad(); // restore prior samples (empty on first ever boot) historyLoad(); // restore prior samples (empty on first ever boot)
Serial.printf("history restored: %d samples\n", historyCount()); Serial.printf("history restored: %d samples\n", historyCount());
displaySplash("WiFi", "Connect / portal");
if (netBegin()) {
Serial.printf("WiFi connected: %s\n", netIP().c_str());
} else {
Serial.println(F("WiFi not connected - running offline"));
}
// Seed first sample immediately. // Seed first sample immediately.
sampleNow(); sampleNow();
historyAdd(rtcEpoch(), g_state.mslHpa, g_state.tempC); historyAdd(rtcEpoch(), g_state.mslHpa, g_state.tempC);
+14
View File
@@ -0,0 +1,14 @@
#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include "config.h"
#include "net.h"
bool netBegin() {
WiFiManager wm;
wm.setConfigPortalTimeout(180); // give up portal after 3 min, run offline
bool ok = wm.autoConnect(AP_NAME); // opens AP "WeatherPredictor-Setup" if no creds
return ok;
}
bool netConnected() { return WiFi.status() == WL_CONNECTED; }
String netIP() { return WiFi.localIP().toString(); }
+6
View File
@@ -0,0 +1,6 @@
#pragma once
#include <Arduino.h>
bool netBegin();
bool netConnected();
String netIP();