#include "network.h" #include "config.h" #include #include #include static uint32_t _dernierRetryMs = 0; static uint32_t _debutConnexionMs = 0; static bool _connexionEnCours = false; // Démarre la tentative de connexion STA (non-bloquant) static void _demarrerSTA() { Serial.printf("[WIFI] Connexion STA → SSID: %s\n", WIFI_SSID); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASS); _debutConnexionMs = millis(); _connexionEnCours = true; netStatus.modeAP = false; // reset dès la tentative STA } static void _demarrerAP() { Serial.println("[WIFI] Bascule AP → ESP_CHEF_JARDIN"); WiFi.mode(WIFI_AP); WiFi.softAP(AP_SSID, AP_PASS); netStatus.modeAP = true; netStatus.wifiConnecte = false; netStatus.rssi = 0; Serial.printf("[WIFI] AP IP: %s\n", WiFi.softAPIP().toString().c_str()); } static void _configurerMDNS() { MDNS.end(); if (MDNS.begin(MDNS_NOM)) { MDNS.addService("http", "tcp", 80); Serial.printf("[mDNS] Accessible via http://%s.local\n", MDNS_NOM); } } static void _configurerOTA() { ArduinoOTA.setPassword(OTA_PASS); ArduinoOTA.onStart([]() { Serial.println("[OTA] Mise à jour démarrée"); }); ArduinoOTA.onEnd([]() { Serial.println("[OTA] Terminée — redémarrage"); }); ArduinoOTA.onError([](ota_error_t err) { Serial.printf("[OTA] Erreur [%u]\n", err); }); ArduinoOTA.begin(); Serial.println("[OTA] Prêt"); } void network_init() { _demarrerSTA(); } void network_update() { // ── Gestion OTA ───────────────────────────────────────────────── if (netStatus.wifiConnecte && !netStatus.modeAP) { ArduinoOTA.handle(); } // ── Connexion STA en cours ─────────────────────────────────────── if (_connexionEnCours) { if (WiFi.status() == WL_CONNECTED) { _connexionEnCours = false; netStatus.wifiConnecte = true; netStatus.modeAP = false; netStatus.uptimeDemarrage = millis(); Serial.printf("[WIFI] Connecté — IP: %s\n", WiFi.localIP().toString().c_str()); _configurerMDNS(); _configurerOTA(); } else if (millis() - _debutConnexionMs > WIFI_TIMEOUT_MS) { _connexionEnCours = false; Serial.println("[WIFI] Timeout STA"); _demarrerAP(); } return; } // ── STA connecté : surveiller les déconnexions ────────────────── if (netStatus.wifiConnecte && !netStatus.modeAP) { if (WiFi.status() != WL_CONNECTED) { netStatus.wifiConnecte = false; Serial.println("[WIFI] Déconnexion détectée — retry dans 30s"); _dernierRetryMs = millis(); } else { netStatus.rssi = WiFi.RSSI(); } return; } // ── Mode AP : retry STA toutes les 60s ────────────────────────── if (netStatus.modeAP) { if (millis() - _dernierRetryMs > 60000) { Serial.println("[WIFI] Mode AP — retry STA..."); _dernierRetryMs = millis(); _demarrerSTA(); } return; } // ── STA déconnecté (hors AP) : retry toutes les 30s ───────────── if (!netStatus.wifiConnecte && millis() - _dernierRetryMs > WIFI_RETRY_MS) { _dernierRetryMs = millis(); _demarrerSTA(); } }