Detail WifiManager
This commit is contained in:
@@ -0,0 +1,108 @@
|
|||||||
|
## Comment ça fonctionne ?
|
||||||
|
|
||||||
|
1. Au démarrage (Lecture) : Le programme cherche un fichier nommé config.json. S'il existe, il extrait la valeur stockée pour l'injecter dans la variable custom_api_key.
|
||||||
|
|
||||||
|
2. Création du champ : La ligne wm.addParameter(&custom_html_api_key) ajoute un champ de texte sur la page de configuration HTML de WiFiManager avec la valeur actuelle.
|
||||||
|
|
||||||
|
3. Le Callback : Si l'utilisateur clique sur "Save" sur la page web, la fonction saveConfigCallback() passe la variable shouldSaveConfig à true.
|
||||||
|
|
||||||
|
4. Au redémarrage/Connexion (Écriture) : Si le drapeau est à true, le programme récupère la chaîne saisie via .getValue(), crée un nouvel objet JSON et l'écrase dans config.json
|
||||||
|
|
||||||
|
Si vous tenez absolument à utiliser l'EEPROM classique (sans LittleFS)Si votre projet utilise déjà l'EEPROM pour d'autres données, le principe reste identique :
|
||||||
|
|
||||||
|
- Dans l'étape 1, utilisez EEPROM.get() ou EEPROM.readChar() pour remplir votre variable avant le addParameter.
|
||||||
|
- Dans l'étape 3, utilisez EEPROM.put() suivi de EEPROM.commit() pour enregistrer la valeur récupérée par .getValue().
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include <FS.h>
|
||||||
|
#include <LittleFS.h>
|
||||||
|
#include <WiFiManager.h>
|
||||||
|
#include <ArduinoJson.h> // Nécessaire pour structurer les données dans le fichier
|
||||||
|
|
||||||
|
// Définition des variables pour vos paramètres personnalisés
|
||||||
|
char custom_api_key[40] = "valeur_par_defaut";
|
||||||
|
|
||||||
|
// Drapeau pour savoir s'il faut sauvegarder les données
|
||||||
|
bool shouldSaveConfig = false;
|
||||||
|
|
||||||
|
// Fonction de rappel (callback) qui s'active quand on valide la page web
|
||||||
|
void saveConfigCallback() {
|
||||||
|
Serial.println("Configuration modifiée, sauvegarde nécessaire.");
|
||||||
|
shouldSaveConfig = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// 1. LIRE les paramètres existants depuis le système de fichiers (LittleFS)
|
||||||
|
Serial.println("Montage du système de fichiers...");
|
||||||
|
if (LittleFS.begin()) {
|
||||||
|
if (LittleFS.exists("/config.json")) {
|
||||||
|
Serial.println("Lecture du fichier de configuration...");
|
||||||
|
File configFile = LittleFS.open("/config.json", "r");
|
||||||
|
if (configFile) {
|
||||||
|
size_t size = configFile.size();
|
||||||
|
std::unique_ptr<char[]> buf(new char[size]);
|
||||||
|
configFile.readBytes(buf.get(), size);
|
||||||
|
|
||||||
|
// Analyse du JSON (Ici avec ArduinoJson V6 ou V7)
|
||||||
|
JsonDocument doc;
|
||||||
|
auto error = deserializeJson(doc, buf.get());
|
||||||
|
if (!error) {
|
||||||
|
strcpy(custom_api_key, doc["api_key"]);
|
||||||
|
Serial.print("Paramètre chargé : ");
|
||||||
|
Serial.println(custom_api_key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Serial.println("Erreur lors du montage de LittleFS");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. CONFIGURER WiFiManager et injecter le paramètre
|
||||||
|
WiFiManager wm;
|
||||||
|
|
||||||
|
// On lie la fonction de rappel pour la sauvegarde
|
||||||
|
wm.setSaveConfigCallback(saveConfigCallback);
|
||||||
|
|
||||||
|
// Création du champ personnalisé pour l'interface Web
|
||||||
|
// Syntaxe : WiFiManagerParameter(id, label, default_value, length)
|
||||||
|
WiFiManagerParameter custom_html_api_key("api_id", "Clé API", custom_api_key, 40);
|
||||||
|
wm.addParameter(&custom_html_api_key);
|
||||||
|
|
||||||
|
// Lancement du portail de configuration
|
||||||
|
if (!wm.autoConnect("ESP_Config_AP")) {
|
||||||
|
Serial.println("Échec de la connexion, redémarrage...");
|
||||||
|
delay(3000);
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Si on arrive ici, le WiFi est connecté
|
||||||
|
Serial.println("Connecté au WiFi !");
|
||||||
|
|
||||||
|
// 3. ÉCRIRE les nouveaux paramètres si l'utilisateur les a modifiés sur le portail
|
||||||
|
if (shouldSaveConfig) {
|
||||||
|
// Récupération de la valeur saisie dans le formulaire Web
|
||||||
|
strcpy(custom_api_key, custom_html_api_key.getValue());
|
||||||
|
|
||||||
|
Serial.println("Sauvegarde de la nouvelle configuration...");
|
||||||
|
JsonDocument doc;
|
||||||
|
doc["api_key"] = custom_api_key;
|
||||||
|
|
||||||
|
File configFile = LittleFS.open("/config.json", "w");
|
||||||
|
if (configFile) {
|
||||||
|
serializeJson(doc, configFile);
|
||||||
|
configFile.close();
|
||||||
|
Serial.println("Configuration sauvegardée avec succès.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reste de votre code (ex: utilisation de custom_api_key)
|
||||||
|
Serial.print("Ma clé API active est : ");
|
||||||
|
Serial.println(custom_api_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Votre code principal
|
||||||
|
}
|
||||||
|
```
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
void setupMQTT(void);
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
void WifiSetup(void);
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
|
|
||||||
#include "pins.h"
|
#include "pins.h"
|
||||||
|
#include "wifi.h"
|
||||||
|
#include "mqtt.h"
|
||||||
|
|
||||||
#if defined(DEVICE_ROLE_BOAT)
|
#if defined(DEVICE_ROLE_BOAT)
|
||||||
constexpr const char *deviceRole = "boat";
|
constexpr const char *deviceRole = "boat";
|
||||||
@@ -35,6 +37,8 @@ void setup() {
|
|||||||
pinMode(Pins::hallRudderSignal, INPUT);
|
pinMode(Pins::hallRudderSignal, INPUT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
WifiSetup();
|
||||||
|
setupMQTT();
|
||||||
Serial.printf("Stid maritime: role=%s, mode=%s, chip=%06X\n",
|
Serial.printf("Stid maritime: role=%s, mode=%s, chip=%06X\n",
|
||||||
deviceRole, networkMode, ESP.getChipId());
|
deviceRole, networkMode, ESP.getChipId());
|
||||||
Serial.println("Firmware skeleton ready; motors remain stopped.");
|
Serial.println("Firmware skeleton ready; motors remain stopped.");
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* @file mqtt.cpp
|
||||||
|
* @brief Gestion de la communication MQTT
|
||||||
|
*/
|
||||||
|
|
||||||
|
void setupMQTT(void) {
|
||||||
|
// Initialisation du client MQTT
|
||||||
|
mqttClient.setServer(mqtt_server, 1883);
|
||||||
|
mqttClient.setCallback(mqttCallback);
|
||||||
|
}
|
||||||
+50
-50
@@ -1,52 +1,3 @@
|
|||||||
// #include <ESP8266WiFi.h> //https://github.com
|
|
||||||
// #include <DNSServer.h>
|
|
||||||
// #include <ESP8266WebServer.h>
|
|
||||||
// #include <WiFiManager.h> //https://github.com
|
|
||||||
|
|
||||||
// void WifiSetup(void)
|
|
||||||
// {
|
|
||||||
// Serial.begin(115200);
|
|
||||||
|
|
||||||
// // Objet WiFiManager
|
|
||||||
// WiFiManager wifiManager;
|
|
||||||
|
|
||||||
// // Optionnel : réinitialiser les paramètres enregistrés pour les tests
|
|
||||||
// // wifiManager.resetSettings();
|
|
||||||
|
|
||||||
// // Démarre un point d'accès nommé "FinistRC_Config" (sans mot de passe)
|
|
||||||
// // Si la connexion au Wi-Fi enregistré échoue, le portail s'ouvre
|
|
||||||
// if (!wifiManager.autoConnect("FinistRC_Config")) {
|
|
||||||
// // Option 1 : Utiliser le mode sombre intégré
|
|
||||||
// wifiManager.setClass("invert");
|
|
||||||
|
|
||||||
// Serial.println("Échec de la connexion et timeout du portail.");
|
|
||||||
// delay(3000);
|
|
||||||
// ESP.restart(); // Redémarre l'ESP en cas d'échec
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Si on arrive ici, l'ESP8266 est connecté au Wi-Fi
|
|
||||||
// Serial.println("Connecté au réseau Wi-Fi !");
|
|
||||||
// Serial.print("Adresse IP : ");
|
|
||||||
// Serial.println(WiFi.localIP());
|
|
||||||
// }
|
|
||||||
|
|
||||||
// #include <ESP8266WiFi.h>
|
|
||||||
// #include <DNSServer.h>
|
|
||||||
// #include <ESP8266WebServer.h>
|
|
||||||
// #include <WiFiManager.h>
|
|
||||||
|
|
||||||
// // Variables pour stocker les paramètres personnalisés
|
|
||||||
// char mqtt_server[40] = "brokermqtt.local";
|
|
||||||
// char api_token[32] = "votre_cle_ici";
|
|
||||||
|
|
||||||
// // Drapeau pour savoir s'il faut sauvegarder les données
|
|
||||||
// bool doiventSauvegarderConfiguration = false;
|
|
||||||
|
|
||||||
// // Fonction de rappel (callback) appelée lorsque l'utilisateur valide le formulaire
|
|
||||||
// void saveConfigCallback() {
|
|
||||||
// Serial.println("Configuration modifiée. Prêt à sauvegarder.");
|
|
||||||
// doiventSauvegarderConfiguration = true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
void WifiSetup() {
|
void WifiSetup() {
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
@@ -93,4 +44,53 @@ void WifiSetup() {
|
|||||||
|
|
||||||
// // Personnaliser le menu du portail (ne garder que le scan Wi-Fi et l'extinction de l'AP par exemple)
|
// // Personnaliser le menu du portail (ne garder que le scan Wi-Fi et l'extinction de l'AP par exemple)
|
||||||
// std::vector<const char *> menu = {"wifi", "exit"};
|
// std::vector<const char *> menu = {"wifi", "exit"};
|
||||||
// wifiManager.setMenu(menu);
|
// wifiManager.setMenu(menu);
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <WiFiManager.h>
|
||||||
|
|
||||||
|
// 1. Déclarer l'objet WiFiManager globalement ou dans le setup
|
||||||
|
WiFiManager wm;
|
||||||
|
|
||||||
|
// 2. Déclarer les paramètres globalement pour y avoir accès partout
|
||||||
|
// Syntaxe : WiFiManagerParameter identifiant(id, label, valeur_par_defaut, longueur_max);
|
||||||
|
WiFiManagerParameter custom_api_key("api_id", "Cle API", "", 40);
|
||||||
|
WiFiManagerParameter custom_mqtt_server("mqtt_id", "Serveur MQTT", "192.168.1.50", 40);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// 3. Ajouter les paramètres au portail WiFiManager
|
||||||
|
wm.addParameter(&custom_api_key);
|
||||||
|
wm.addParameter(&custom_mqtt_server);
|
||||||
|
|
||||||
|
// Lancement du portail captif
|
||||||
|
if (!wm.autoConnect("ESP_Config_AP")) {
|
||||||
|
Serial.println("Échec de connexion, redémarrage...");
|
||||||
|
delay(3000);
|
||||||
|
ESP.restart();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------
|
||||||
|
// RECOVERY : ICI LE PORTAIL EST FERMÉ ET L'ESP EST CONNECTÉ
|
||||||
|
// -------------------------------------------------------------
|
||||||
|
Serial.println("\n--- Connexion reussie ! Recuperation des valeurs ---");
|
||||||
|
|
||||||
|
// On récupère les valeurs sous forme de chaîne de caractères (const char*)
|
||||||
|
String apiKey = custom_api_key.getValue();
|
||||||
|
String mqttServer = custom_mqtt_server.getValue();
|
||||||
|
|
||||||
|
Serial.print("Cle API saisie : ");
|
||||||
|
Serial.println(apiKey);
|
||||||
|
|
||||||
|
Serial.print("Serveur MQTT saisi : ");
|
||||||
|
Serial.println(mqttServer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Vous pouvez aussi y accéder à tout moment dans le loop() :
|
||||||
|
// String mon_api = custom_api_key.getValue();
|
||||||
|
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
*/
|
||||||
Reference in New Issue
Block a user