Ajout config Wifi

This commit is contained in:
Serge NOEL
2026-09-22 16:50:29 +02:00
parent 542e568835
commit d9d8f57369
5 changed files with 156 additions and 24 deletions
+52
View File
@@ -0,0 +1,52 @@
#include <ESP8266WiFi.h>
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
// Définition de la broche de reset (ex: D5 / GPIO14)
#define PIN_CONFIG D5
void setup() {
Serial.begin(115200);
delay(100);
Serial.println("\n--- Démarrage de l'ESP ---");
// 1. Configuration de la broche du bouton avec résistance de Pull-Up interne
// Le bouton doit être câblé entre PIN_CONFIG et le GND (Masse).
pinMode(PIN_CONFIG, INPUT_PULLUP);
// Instanciation de WiFiManager
WiFiManager wm;
// 2. Vérification de l'état du bouton de reset
// Si le bouton est appuyé au démarrage (état LOW), on efface la configuration
if (digitalRead(PIN_CONFIG) == LOW) {
Serial.println("-> PIN_CONFIG à l'état BAS détecté ! Réinitialisation du Wi-Fi...");
// Efface les identifiants Wi-Fi enregistrés dans la mémoire Flash / EEPROM
wm.resetSettings();
// Attente optionnelle pour laisser le temps de relâcher le bouton
delay(2000);
}
// (Optionnel) Temps d'attente max du portail captif en secondes (ex: 3 minutes = 180s)
// wm.setConfigPortalTimeout(180);
// 3. Connexion automatique ou lancement du Portail Captif
// Paramètres : (Nom du PA créé par l'ESP, Mot de passe optionnel du PA)
bool result = wm.autoConnect("ESP-Config-AP", "password123");
if (!result) {
Serial.println("Échec de la connexion ou dépassement du délai du portail captif.");
// Optionnel : Redémarrage si le timeout expire sans configuration
// ESP.restart();
} else {
// Si la connexion réussit (soit via le Wi-Fi enregistré, soit après saisie sur le portail)
Serial.println("-> Connecté au Wi-Fi avec succès !");
Serial.print("Adresse IP attribuée : ");
Serial.println(WiFi.localIP());
}
}
void loop() {
// Votre code principal s'exécute ici une fois la connexion Wi-Fi établie
}
+44 -15
View File
@@ -2,19 +2,48 @@
Projet de bateaux télécommandés pour le bassin des Journées maritimes. Le matériel repose sur des ESP8266 et deux modes réseau :
- **MQTT** : un point d'accès OpenWRT fournit le Wi-Fi et le broker MQTT ; la supervision Banana Pi suit les périphériques et les batteries.
- **MQTT** : un point d'accès OpenWRT fournit le Wi-Fi et le broker MQTT. Un système de supervision Banana Pi suit les périphériques et les batteries.
- **AP autonome** : le bateau crée son propre réseau Wi-Fi et fonctionne sans broker ni supervision.
> **NB** les bateaux en mode autonome sont une option supplémentaires au mode Wifi
## Structure PlatformIO
Le dépôt contient un seul projet PlatformIO avec quatre environnements :
| Environnement | Matériel | Réseau |
| --- | --- | --- |
| `boat_mqtt` | bateau + MX1508 + servo | MQTT |
| `remote_mqtt` | télécommande + capteurs Hall | MQTT |
| `boat_ap` | bateau + MX1508 + servo | point d'accès ESP8266 |
| `remote_ap` | télécommande + capteurs Hall | point d'accès ESP8266 |
| Environnement | Matériel | Réseau |
| ------------- | ---------------------------- | --------------------- |
| `boat_mqtt` | bateau + MX1508 + servo | MQTT |
| `remote_mqtt` | télécommande + capteurs Hall | MQTT |
| `boat_ap` | bateau + MX1508 + servo | point d'accès ESP8266 |
| `remote_ap` | télécommande + capteurs Hall | point d'accès ESP8266 |
> **NB** : Les dispositifs 'autonomes' ne crée leur AP que lorsqu'il
> n'y a pas de Wifi, dans ce cas le bateau crée l'accès Wifi.
**Mode de fonctionnement**
1. Bateaux 'AP'
- pas de configuration -> présente le portail captif
- configuré et wifi présent -> se connecte au Wifi
- configuré et wifi non présent -> se comporte en AP
- configuré et PIN_CONFIG a l'état BAS -> reset de la configuration Wifi
2. Bateaux 'MQTT'
- pas de configuration -> présente le portail captif
- configuré et wifi présent -> se connecte au Wifi
- configuré et PIN_CONFIG a l'état BAS -> reset de la configuration Wifi
3. Remote 'AP'
- pas de configuration -> présente le portail captif
- configuré et wifi présent -> se connecte au Wifi
- configuré et PIN_CONFIG a l'état BAS -> reset de la configuration Wifi
4. Remote 'MQTT'
- pas de configuration -> présente le portail captif
- configuré et wifi présent -> se connecte au Wifi
- configuré et PIN_CONFIG a l'état BAS -> reset de la configuration Wifi
# Compilation avec Platformio
Commandes de départ :
@@ -43,14 +72,14 @@ Le firmware initial est volontairement passif : il initialise les entrées/sorti
Le choix proposé dans `include/pins.h` est :
| Fonction | Broche NodeMCU | GPIO |
| --- | --- | --- |
| Batterie | A0 | ADC0 |
| I2C SDA | D2 | GPIO4 |
| I2C SCL | D1 | GPIO5 |
| Moteur gauche avant/arrière | D5 / D6 | GPIO14 / GPIO12 |
| Moteur droit avant/arrière | D7 / D8 | GPIO13 / GPIO15 |
| Servo gouvernail | D4 | GPIO2 |
| Fonction | Broche NodeMCU | GPIO |
| --------------------------- | -------------- | --------------- |
| Batterie | A0 | ADC0 |
| I2C SDA | D2 | GPIO4 |
| I2C SCL | D1 | GPIO5 |
| Moteur gauche avant/arrière | D5 / D6 | GPIO14 / GPIO12 |
| Moteur droit avant/arrière | D7 / D8 | GPIO13 / GPIO15 |
| Servo gouvernail | D4 | GPIO2 |
Conseils importants :
+8 -1
View File
@@ -1,2 +1,9 @@
void WifiSetup(void);
void WifiSetup(void);
struct WifiConfig {
char mqtt_server[40];
char mqtt_user[32];
char mqtt_passw[32];
char api_token[32];
};
+4
View File
@@ -42,6 +42,10 @@ void setup() {
Serial.printf("Stid maritime: role=%s, mode=%s, chip=%06X\n",
deviceRole, networkMode, ESP.getChipId());
Serial.println("Firmware skeleton ready; motors remain stopped.");
Serial.println();
Serial.print("Adresse MAC STA : ");
Serial.println(WiFi.macAddress());
}
void loop() {
+48 -8
View File
@@ -1,10 +1,39 @@
/**
* @file wifi.cpp
* @brief Gestion du Wi-Fi et du portail de configuration
* @details
* Ce fichier contient les fonctions nécessaires pour gérer la connexion Wi-Fi de l'ESP8266 et pour lancer un portail de configuration via WiFiManager.
* Il permet à l'utilisateur de configurer les paramètres Wi-Fi et d'autres paramètres personnalisés (comme le serveur MQTT et la clé API) via une interface web.
* @note
* Assurez-vous d'avoir installé la bibliothèque WiFiManager pour que ce code fonctionne correctement
* @author Serge NOEL <serge.noel@easylinux.fr>
* @date 2024-06-15
* @version 1.0
*/
void WifiSetup() {
Serial.begin(115200);
void WifiSetup()
{
static WifiConfig wifiConfig;
// Définition du code HTML personnalisé pour la liste déroulante (<select>)
const char* custom_dropdown_html =
"<br/><label for='device_mode'>Mode de fonctionnement :</label>"
"<select id='device_mode' name='device_mode'>"
"<option value='bauto'>Bateau autonome</option>"
"<option value='bmqtt'>Bateau MQTT</option>"
"<option value='tauto'>Télécommande autonome</option>"
"<option value='tmqtt'>Télécommande MQTT</option>"
"</select>";
// Création du paramètre personnalisé
// Syntaxe : WiFiManagerParameter(id, placeholder/label, default_value, length, custom_html)
WiFiManagerParameter custom_device_mode("device_mode", "Mode", "bauto", 40, custom_dropdown_html);
// 1. Création des champs personnalisés (ID, Label, Valeur par défaut, Longueur max)
WiFiManagerParameter custom_mqtt_server("mqtt", "Serveur MQTT", mqtt_server, 40);
WiFiManagerParameter custom_api_token("api", "Clé API", api_token, 32);
WiFiManagerParameter custom_mqtt_server("mqtt", "Serveur MQTT", wifiConfig.mqtt_server, 40);
WiFiManagerParameter custom_mqtt_user("mqtt", "Utilisateur MQTT", wifiConfig.mqtt_user, 32);
WiFiManagerParameter custom_mqtt_passw("mqtt", "Mot de passe MQTT", wifiConfig.mqtt_passw, 32);
WiFiManagerParameter custom_api_token("api", "Clé API", wifiConfig.api_token, 32);
WiFiManager wifiManager;
@@ -12,7 +41,10 @@ void WifiSetup() {
wifiManager.setSaveConfigCallback(saveConfigCallback);
// 2. Ajouter les champs à l'interface graphique de WiFiManager
wifiManager.addParameter(&custom_device_mode);
wifiManager.addParameter(&custom_mqtt_server);
wifiManager.addParameter(&custom_mqtt_user);
wifiManager.addParameter(&custom_mqtt_passw);
wifiManager.addParameter(&custom_api_token);
// Lance le portail
@@ -23,15 +55,17 @@ void WifiSetup() {
}
// 3. Récupérer les valeurs saisies par l'utilisateur après la validation
strcpy(mqtt_server, custom_mqtt_server.getValue());
strcpy(api_token, custom_api_token.getValue());
strcpy(wifiConfig.mqtt_server, custom_mqtt_server.getValue());
strcpy(wifiConfig.mqtt_user, custom_mqtt_user.getValue());
strcpy(wifiConfig.mqtt_passw, custom_mqtt_passw.getValue());
strcpy(wifiConfig.api_token, custom_api_token.getValue());
// Affichage dans le moniteur série
Serial.println("Connecté au Wi-Fi !");
Serial.print("Serveur MQTT enregistré : ");
Serial.println(mqtt_server);
Serial.println(wifiConfig.mqtt_server);
Serial.print("Clé API enregistrée : ");
Serial.println(api_token);
Serial.println(wifiConfig.api_token);
// [Optionnel] Si deconnexion/reconnexion, sauvegarder ici ces variables dans la LittleFS/SPIFFS (mémoire flash)
if (doiventSauvegarderConfiguration) {
@@ -39,6 +73,12 @@ void WifiSetup() {
}
}
void saveConfigCallback() {
// Stocker les valeurs saisies par l'utilisateur dans l'EEPROM
EEPROM.put(0, wifiConfig);
Serial.println("Configuration sauvegardée !");
}
// // Modifier le titre principal de la page web
// wifiManager.setPageTitle("Mon Système Domotique");