126 lines
6.8 KiB
Markdown
126 lines
6.8 KiB
Markdown
# Journées maritimes de Brest 2027
|
|
|
|
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.
|
|
- **AP autonome** : le bateau crée son propre réseau Wi-Fi et fonctionne sans broker ni supervision.
|
|
|
|
## 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 |
|
|
|
|
Commandes de départ :
|
|
|
|
```text
|
|
pio run -e boat_mqtt
|
|
pio run -e remote_mqtt
|
|
pio run -e boat_ap
|
|
pio run -e remote_ap
|
|
pio device monitor -b 115200
|
|
```
|
|
|
|
Le firmware initial est volontairement passif : il initialise les entrées/sorties et affiche son rôle sur le port série, mais n'active pas les moteurs. Les broches sont centralisées dans `include/pins.h`.
|
|
|
|
## Conseils de réalisation et de câblage
|
|
|
|
### Alimentation
|
|
|
|
- Ne jamais alimenter les moteurs depuis le régulateur 3,3 V de l'ESP8266.
|
|
- Relier toutes les masses : batterie, MX1508, régulateur et ESP8266.
|
|
- Ajouter un condensateur de découplage près de l'ESP8266 et du MX1508 ; les moteurs peuvent provoquer des resets Wi-Fi.
|
|
- Vérifier au multimètre la tension réellement appliquée à l'ESP8266 avant insertion de la batterie.
|
|
- Le pont diviseur de mesure batterie doit ramener la tension maximale sous la limite de l'entrée A0 de la carte utilisée. Cette limite varie selon le module ESP8266 : vérifier sa fiche technique.
|
|
- Pour une batterie 2S, dimensionner le diviseur sur 8,4 V (batterie pleine), pas sur sa tension nominale.
|
|
|
|
### Broches ESP8266
|
|
|
|
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 |
|
|
|
|
Conseils importants :
|
|
|
|
- GPIO0, GPIO2 et GPIO15 participent au démarrage de l'ESP8266. Le MX1508 et le servo ne doivent pas imposer un mauvais niveau logique pendant le boot ; tester le démarrage avec le moteur déconnecté, puis vérifier les niveaux avec un oscilloscope ou un analyseur logique.
|
|
- D8/GPIO15 est utilisé ici pour disposer de quatre sorties moteur, mais il doit être validé sur le montage final. Prévoir une résistance ou un buffer si le MX1508 perturbe le niveau de boot.
|
|
- L'ESP8266 ne possède qu'une seule entrée analogique. Deux capteurs Hall analogiques ne peuvent donc pas être raccordés directement : utiliser un ADC externe I2C (ADS115).
|
|
- Si les capteurs Hall sont des capteurs numériques à seuil, les raccorder à des GPIO distincts et adapter `pins.h` et le filtrage logiciel.
|
|
- Le servo doit avoir une alimentation adaptée et une masse commune ; ne pas supposer que le 3,3 V de l'ESP8266 suffit à fournir son courant de pointe.
|
|
|
|
### Sécurité de fonctionnement
|
|
|
|
- Prévoir un état d'arrêt au démarrage, à la perte Wi-Fi, à la perte MQTT et après expiration d'un watchdog de commande.
|
|
- Le dernier ordre reçu ne doit jamais rester actif indéfiniment : chaque commande doit porter une durée de validité courte.
|
|
- Ajouter une commande d'arrêt locale sur chaque pupitre et tester le comportement avec le broker indisponible.
|
|
- Ne tester les moteurs qu'avec l'hélice retirée, puis dans un bassin sécurisé.
|
|
|
|
## Prochaines étapes
|
|
|
|
1. Mesurer et documenter les tensions batterie et les rapports des diviseurs.
|
|
2. Valider le démarrage avec le câblage MX1508 et la table de broches.
|
|
3. Ajouter la lecture calibrée des capteurs Hall et de la batterie.
|
|
4. Définir le payload et les topics MQTT, par exemple `bateau/00001/cmd` et `bateau/00001/status`.
|
|
5. Implémenter le failsafe, puis le pilotage moteur/servo.
|
|
6. Ajouter la page de configuration Wi-Fi, l'identifiant du bateau et les paramètres de calibration.
|
|
|
|
# Annexe
|
|
|
|
La commande wifiManager.autoConnect("FinistRC_Config") provient de la très populaire bibliothèque WiFiManager (développée à l'origine par tzapu) pour les microcontrôleurs ESP8266 et ESP32 (souvent utilisés en C++ sous l'IDE Arduino).
|
|
|
|
Cette fonction est conçue pour gérer automatiquement la connexion Wi-Fi de votre carte sans avoir à inscrire le nom du réseau (SSID) et le mot de passe en dur dans le code.
|
|
|
|
Voici en détail le déroulement de son fonctionnement étape par étape :
|
|
1. Tentative de connexion silencieuse (Mode Station / STA)
|
|
|
|
Lorsque la carte démarre et qu'elle exécute cette ligne :
|
|
|
|
Le microcontrôleur va d'abord chercher s'il a déjà des identifiants Wi-Fi enregistrés dans sa mémoire non-volatile (EEPROM / Flash).
|
|
|
|
S'il trouve un réseau enregistré : Il tente de s'y connecter en tant que client Wi-Fi standard.
|
|
|
|
Si la connexion réussit : La fonction autoConnect() renvoie true, le programme sort immédiatement de la fonction et continue la suite du code (votre boucle setup() se termine, puis loop() prend le relais).
|
|
|
|
2. Basculement en Point d'Accès (Mode AP) si la connexion échoue
|
|
|
|
Si aucune information Wi-Fi n'est enregistrée, ou si le réseau enregistré est hors de portée / inaccessible (ex: box éteinte ou changement de mot de passe) :
|
|
|
|
La commande bloque le reste du programme (elle ne passe pas aux lignes de code suivantes tant que le réseau n'est pas configuré).
|
|
|
|
L'ESP bascule en mode Point d'Accès (Access Point).
|
|
|
|
Il génère son propre réseau Wi-Fi avec le nom transmis en paramètre : FinistRC_Config.
|
|
|
|
3. Portail Captif (Captive Portal)
|
|
|
|
Vous prenez votre téléphone ou votre ordinateur et vous vous connectez au réseau Wi-Fi FinistRC_Config.
|
|
|
|
Grâce au mécanisme de Portail Captif, votre appareil détectera automatiquement qu'il n'y a pas d'Internet et ouvrira spontanément une page web (ou vous invitera à "Vous connecter au réseau").
|
|
|
|
Si la page ne s'ouvre pas seule, il suffit d'ouvrir un navigateur web et d'aller à l'adresse 192.168.4.1.
|
|
|
|
4. Configuration et enregistrement
|
|
|
|
Sur cette interface web d'accueil :
|
|
|
|
L'utilisateur clique sur "Configure WiFi".
|
|
|
|
L'ESP scanne les réseaux Wi-Fi environnants et affiche la liste.
|
|
|
|
L'utilisateur sélectionne sa box Wi-Fi, saisit le mot de passe et valide.
|
|
|
|
L'ESP sauvegarde les identifiants dans sa mémoire flash, ferme son réseau temporaire FinistRC_Config et redémarre son module Wi-Fi pour se connecter à la box.
|
|
|
|
Une fois connecté, la fonction autoConnect() se débloque et votre programme principal s'exécute normalement. |