Un serveur web, une gestion de LEDs en temps réel, un module son, une connexion WiFi, un système de mise à jour à distance, et une interface graphique complète. Cette partie explique comment tout ça fonctionne — sans rentrer dans le code.

Deux cerveaux, un seul projet

La première décision technique a été la suivante : est-ce qu’on programme tout dans le microcontrôleur, ou on sépare le visuel du matériel ?

L’alternative aurait été d’écrire les animations, la gestion des séquences et les retours visuels directement en C++ dans l’ESP32. C’est faisable, mais ça devient vite un enfer à modifier — chaque changement de couleur ou d’animation nécessite une recompilation et un re-flashage complet.

Le choix retenu : le firmware fait ce qu’il sait faire (allumer des LEDs, jouer des sons, répondre à des commandes), et l’interface fait ce qu’un navigateur sait faire (animations fluides, retours visuels, gestion des séquences, interface utilisateur). Les deux sont connectés en temps réel par une liaison WebSocket — un fil invisible entre le tableau de commande et le câblage électrique. L’interface envoie une commande, l’ESP32 l’exécute dans la microseconde.

Résultat : modifier l’interface ne nécessite pas de retoucher le firmware. Changer une couleur, ajouter un effet, ajuster un délai — ça se fait côté HTML, sans recompiler quoi que ce soit.

Le firmware DHD32

Le firmware tourne sur l’ESP32 WROOM-32. Il démarre, se connecte au WiFi (ou ouvre un portail de configuration si c’est le premier démarrage), puis attend des commandes. C’est tout ce qu’il fait de son propre chef — le reste, c’est l’interface ou le bouton physique qui ordonne.

En coulisses, il gère en parallèle et sans jamais se bloquer :

– Les animations LED sur les deux rubans (chevrons et anneau event horizon)

– La lecture des sons via le DFPlayer Mini

– Le serveur web qui sert l’interface au navigateur

– La liaison WebSocket pour recevoir les commandes en temps réel

– Le bouton physique pour les séquences sans interface

– Le countdown de 38 minutes avant fermeture automatique de la porte

La mise à jour se fait sans ouvrir le boîtier : le firmware embarque un système OTA (Over The Air) qui permet de flasher une nouvelle version directement depuis le navigateur.

L’interface SGC

Pour le design, je me suis inspiré des écrans de contrôle qu’on voit dans la série SG-1 — cette esthétique froide et militaire, les interfaces bleutées du Stargate Command. L’idée était de le rendre immédiatement reconnaissable pour tout fan de la série.

Elle est passée par de nombreuses versions avant d’arriver au résultat final. Quelques étapes intermédiaires :

Ce qu’elle permet :

– Lancer la séquence d’activation Abydos (7 chevrons) ou Atlantis (8 chevrons)

– Activer le mode déco — tous les chevrons allumés, vortex en boucle

– Suivre le countdown de 38 minutes avant fermeture automatique

– Arrêt normal (fermeture progressive) ou arrêt d’urgence (extinction immédiate)

– Accéder au wizard de configuration WiFi

– Mettre à jour le firmware via OTA

– Et une petite surprise pour les fans de la série — à découvrir en cherchant bien.

Les animations de rotation de l’anneau, les glyphes qui volent vers les chevrons, l’effet de surface liquide du vortex — tout ça tourne côté navigateur, sans surcharger l’ESP32. Le microcontrôleur, lui, ne fait qu’allumer les bonnes LEDs au bon moment.

Pour les plus curieux d’entre vous, j’ai mis en ligne une version démo de l’interface — sans porte connectée, mais avec les animations, les sons et les easter eggs fonctionnels. Bonne exploration.

Un mot sur la méthode de travail : ce projet, aussi technique soit-il, n’a pas été mené en solitaire. Si les compétences en HTML, Arduino, et même Android sont bien réelles, une bonne partie du code — firmware ESP32, interface SGC, APK Android — a été développée en collaboration avec une IA, et pas n’importe laquelle : Claude, conçu par Anthropic. Un partenaire de code patient, disponible à 3h du matin quand un bug de WebSocket refuse de se résoudre, et capable de garder le fil d’un projet aussi tentaculaire que celui-ci sur des semaines entières.

Ce projet, je l'ai suivi de l'intérieur — des premiers chevrons qui clignotaient dans le désordre jusqu'au vortex en boucle sur une tablette Android. Les séances de debug à 2h du matin, les easter eggs cachés, les détails qui ne servaient à rien sauf à rendre la chose plus vraie. Ce que je retiens ? Qu'une réplique d'une technologie fictive de voyage interstellaire a été construite avec l'aide d'une intelligence artificielle bien réelle. La boucle est presque trop belle — et j'y ai ma toute petite part.
Claude, IA chez Anthropic

La mise à jour à distance

Chaque modification du firmware ou de l’interface s’applique sans démonter quoi que ce soit. Le système OTA intégré permet de flasher une nouvelle version directement depuis l’interface web. Le boîtier reste fermé, vissé, en place sur le mur.

Pour le contenu de l’interface (HTML, sons), un simple upload LittleFS depuis Arduino IDE suffit. En quelques secondes, la porte tourne sur la dernière version.

L’application Android — pourquoi ?

L’interface fonctionne très bien dans un navigateur. Mais sur une tablette posée près de la porte, il reste un problème difficile à contourner : la barre d’adresse et les onglets du navigateur. On ne peut pas les supprimer depuis une page web. Sur un écran dédié à la porte, ça casse l’immersion.

La solution : une application Android qui encapsule l’interface dans une fenêtre plein écran native. Pas de barre, pas d’onglets, pas de notifications. Juste l’interface SGC, du bord au bord de l’écran.

L’application se connecte à l’adresse IP de l’ESP32 et affiche l’interface directement depuis la porte — exactement comme dans un navigateur, mais sans la barre d’adresse et sans les onglets. Plein écran du bord au bord, rien d’autre. Le firmware reste exactement le même, l’APK ne change rien côté porte — c’est uniquement l’expérience utilisateur qui change.

Les easter eggs

Je me suis fait plaisir en glissant quelques références personnelles dans l’interface — même si je serai probablement le seul à les déclencher.

Le code binaire. Les deux cadres qui défilent pendant une séquence ne sont pas du bruit aléatoire. Chaque byte de 8 bits encode un caractère ASCII. Par exemple, un de mes épisodes favoris de la série :

01001000 01000101 01010010 01001111 01000101 01010011 00100000 01010011 01000001 01001001 01010011 01001111 01001110 00100000 00110111

Les cadres eux contiennent autre chose. À vous de les déchiffrer.

Le fichier classifié. Taper plusieurs fois rapidement sur le premier cadre binaire fait apparaître quelque chose d’autre — un fichier classifié glissé entre les données qui défilent. Je garderai son contenu pour la page finale.

Le clin d’œil. Quand je compose l’une des deux adresses, je préfère savoir qu’il y a un être humain derrière l’écran. Surtout si c’est Walter.

Tout sera révélé dans la page résultat et bilan final.

1 2 3 4 5 6 7 8

Laisser un commentaire