Dance de robots WowWee MiP (Hack ESP32)

Le défi : un robot sympa, trois téléphones en moins

Le WowWee MiP est ce petit robot équilibriste contrôlé à l’origine par Bluetooth et une app smartphone. L’application n’est plus mis à jours, donc il devient un peu difficile d’utiliser le robot. Du coup on le trouve en dessous des 10 euros sur les sites de vente d’occasion.
Dans mon projet ROBOT MIP, je l’ai sorti de cette logique « Controlé depuis le téléphone » : une carte ESP32-C3 dialogue en UART (115200 baud) directement avec le bus série du robot. Plus besoin de l’app officielle pour avancer, tourner, allumer le torse ou jouer un « Hello » depuis la mémoire interne du MiP.
La question suivante est venue naturellement : et si j’en avais plusieurs sur scène ? Pas trois ou cinq téléphones … Mais une seule interface, un programme lisible, et la possibilité que plusieurs robots agissent en même temps pendant qu’un autre robot attend son tour.


L’architecture en une phrase

Navigateur → master PHP → ESP32 → MiP.

Le serveur PHP ne parle pas au robot : il tient une file d’attente par robot (fichiers JSON, pas de base de données lourde). Chaque MiP porte une ESP32 qui, toutes les ~150 ms, demande s’il y a un ordre pour lui. Si oui, elle traduit la commande en octets sur l’UART. Le robot obéit — modulo le sol en moquette ou le parquet glissant, classiques en démo robotique.

[ MiP Studio ]     [ Tableau de bord ]
        \                 /
         v               v
      +---------------------+
      |   Master PHP        |
      |   files JSON        |
      +---------------------+
         ^      ^      ^
      [ESP]  [ESP]  [ESP]
         |      |      |
       MiP1   MiP2   MiP3

Stack volontairement simple : PHP 8.1, JavaScript vanilla côté navigateur, firmware Arduino sur ESP32-C3. Référence protocole trouvé sur Git : documentation WowWee MiP.


Deux interfaces, deux usages

Le tableau de bord — le pupitre du régisseur

Page web avec l’image du MiP et des zones cliquables : tête, torse, base, système. On choisit un robot ou un groupe, on envoie un coup de « Avancer », un flash vert sur le torse, un son nommé (« 22 — Hello », « 35 — Whaa? »). Les groupes permettent d’envoyer la même action à plusieurs robots avec un horodatage synchronisé côté serveur (at_ms).

Pour les bricoleurs du protocole, une zone octets bruts accepte n’importe quelle séquence UART documentée (max 32 octets), sans attendre qu’une nouvelle commande soit codée dans l’interface.

MiP Studio — composer un programme brique par brique

MiP Studio est un éditeur visuel type « briques » (un mini Scratch dédié aux MiP). On empile des blocs, on lance le programme depuis le navigateur.

  • Mouvements — avancer, reculer, pivoter, stop moteurs ; durées calibrées en pas de ~7 ms.
  • Torse & yeux — couleur au nuancier, flash RGB, LED de tête.
  • Sons — liste déroulante avec libellés (catalogue Sound.txt, index 1–47 documentés sur 106 possibles).
  • Flux — pauses, boucles, arrêt de programme.
  • En même temps (parallèle) — le bloc clé pour le multi-robots.

Chaque brique d’action porte sa propre cible (robot ou groupe). Pas de cible globale ambiguë : si une action part, c’est qu’on a explicitement choisi où elle va.


Sous le capot (version courte)

  • API REST minimaliste : queue-command.php reçoit un JSON (op, paramètres, cible).
  • Conversion : mip_command_line.php produit des lignes texte (fwd 20 60snd 35chests 0 0 255) comprises par le firmware.
  • ESP32 : ping régulier, poll de la file, exécution UART via mipRunSimpleLine.
  • Sécurité : session web + clé API partagée avec les cartes (à configurer localement, jamais en clair sur un dépôt public).
  • Sauvegarde Studio : programmes dans le localStorage du navigateur (Sauver / Charger sur la machine locale).

Commandes supportées côté API : réveil, roulement, pivot, LED tête, torse fixe/flash, sons (index 1–106), volume, statut, modes système avancés, octets bruts. Les sons ne se « téléversent » pas : ce sont des échantillons déjà présents dans la mémoire WowWee du MiP.


Ce que le projet ne prétend pas faire

  • Importer un MP3 personnalisé sur le MiP.
  • Synchroniser dix robots à la milliseconde près sur du Wi-Fi 2,4 GHz chargé : on vise une démo multi-robots convaincante, pas une synchro scénique parfaite.

Pourquoi ce projet m’a amusé

Parce qu’il relie des couches qui n’ont rien à voir au départ : protocole propriétaire d’un jouet 2014, UART, Wi-Fi embarqué, files JSON, et une interface qui doit rester lisible pour un humain qui compose une séquence — pas un paquet réseau.

Le bloc En même temps, c’est le moment « ah oui » en démo. Les libellés de sons, c’est le moment « enfin » en atelier. Les cibles par brique, c’est le moment où le programme devient une partition qu’on peut relire.


DEMO !