Ajout config Wifi
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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
@@ -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];
|
||||
};
|
||||
@@ -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
@@ -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");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user