Agis en tant qu'expert en développement embarqué ESP32, C++ et PlatformIO. Je souhaite que tu rédiges l'architecture logicielle et le code d'un projet d'afficheur de navigation maritime étanche. Voici les spécifications matérielles et logicielles à respecter scrupuleusement : 1. MATÉRIEL & ENVIRONNEMENT : - Microcontrôleur : Waveshare ESP32-S3-Zero. - Écran : Waveshare E-Ink 4.2 pouces monochrome (400x300 pixels), positionné à l'horizontale. - Contrôles : 2 ou 3 boutons tactiles capacitifs (utilisant les broches "Touch" natives de l'ESP32-S3 connectées à des tiges métalliques). - Environnement : PlatformIO, framework Arduino, plateforme espressif32 (v6.x+). 2. FONCTIONNALITÉS PRINCIPALES : - Connexion BLE : L'ESP32-S3 se connecte en mode Client à une station centrale pour recevoir les données de navigation (vent, vitesse, polaires, etc.). Les spécifications exactes du service/caractéristiques BLE sont fournies séparément. - Interface Web (Mode AP) : Au démarrage (via une combinaison de boutons tactiles ou si le BLE est inaccessible), l'ESP32 active un point d'accès Wi-Fi sécurisé. Il héberge une interface web rudimentaire (HTML/CSS ultra-léger) permettant : * La configuration des pages/tuiles de l'écran. * La mise à jour du firmware via OTA (gestion des partitions requise dans platformio.ini). - Stockage persistant : La configuration des écrans doit être sauvegardée en mémoire non volatile (Preferences ou LittleFS). 3. AFFICHAGE & INTERFACE GRAPHIQUE : - Utiliser obligatoirement la bibliothèque 'GxEPD2_BW' pour l'écran E-Ink. - L'écran de 400x300 est divisé en une grille fixe de 4 "tuiles" paramétrables. - Chaque tuile doit pouvoir afficher une donnée spécifique reçue en BLE (ex: Vitesse, Angle du Vent, Écart à la polaire) avec une police d'écriture de grande taille et une étiquette. - Les boutons tactiles permettent de changer de "Page" (profils de 4 tuiles différents) ou de déclencher un rafraîchissement complet de l'écran. 4. ATTENTES : - Propose une structure de fichiers propre pour PlatformIO (main.cpp, ble_manager, wifi_manager, display_manager, config_manager). - Donne la configuration du fichier 'platformio.ini' (incluant le partitionnement personnalisé pour l'OTA et les bibliothèques requises à jour : GxEPD2, etc.). - Fournis un code propre, modulaire, optimisé pour limiter les rafraîchissements complets de l'e-ink (privilégier le rafraîchissement partiel pour les données numériques). - au niveau des librairies j'aimerais que tu utilise les dernières versions de : * zinggjm/GxEPD2 (pour la gestion de l'e-ink display) * bblanchon/ArduinoJson (si nécessaire pour le parsing json) * h2zero/NimBLE-Arduino (pour la communication BLE avec la station) * ESP32Async/ESPAsyncWebServer (pour le serveur async) * adafruit/Adafruit NeoPixel (pour la gestion de la led de statut, j'aimerais que cela indique le statut ble/wifi) - La documentation technique doit être faite en anglais. - Fournis des fichiers complets. Merci !