387838349dd39a98ae7ecfc4c093cd866d75cbf0
# 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 (solution recommandée) ou un multiplexeur analogique. - 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.
Languages
C++
97.9%
C
2.1%