2026-09-22 16:50:29 +02:00
2026-09-22 16:50:29 +02:00
2026-09-21 13:28:19 +02:00
2026-09-22 16:50:29 +02:00
2026-09-22 16:50:29 +02:00
2026-09-21 13:10:47 +02:00
2026-09-21 13:10:47 +02:00
2026-09-22 16:50:29 +02:00

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. 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

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 :

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).
  1. 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.
  1. 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.

  2. 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.
S
Description
No description provided
Readme
56 KiB
Languages
C++ 97.9%
C 2.1%