Le firmware 4.4.0 BETA2 pour l’Original Prusa MINI/MINI+ est disponible sur notre page GitHub et la nouvelle fonctionnalité la plus importante est la prise en charge des connexions Wi-Fi. Et il n’y a pas d’autre moyen de le dire : il nous a fallu beaucoup de temps pour livrer ce qui avait été promis. Cela a été un long voyage compliqué. Nous avons rencontré plusieurs impasses, nous avons dû trouver des solutions de contournement à des limitations matérielles – et nous n’avons toujours pas fini. Cependant, la prise en charge du téléchargement sans fil des G-codes et de la gestion à distance de la MINI fonctionne et nous pouvons enfin parler de ce que nous avons dû faire pour arriver à ce stade.

Ajouter le Wi-Fi à la MINI+

L’Original Prusa MINI+ est une machine abordable mais très performante. Lorsque l’équipe matérielle l’a conçu, la clé était de trouver un équilibre entre le nombre de fonctionnalités et le prix. De plus, supporter tous les modèles de cryptage des points d’accès modernes serait impossible sur le CPU actuel de la MINI. C’est pourquoi la puce Wi-Fi n’était pas intégrée à la carte mère.

Donc, à la place, nous sommes partis sur l’idée d’ajouter un simple connecteur sur la carte mère qui permettrait le raccordement d’une économique carte ESP-01, transformant le microcontrôleur externe en pont entre le réseau sans fil et la clé USB. Nous avons fait des recherches et trouvé plusieurs projets open-source usant des capacités de mise en réseau de l’ESP-01, donc le projet était lancé.

Qu’est-ce qu’un ESP-01 ? C’est un module Wi-fi peu coûteux composé d’une pile TCP/IP avec un microcontrôleur intégré. Sa fonction principale est d’apporter une communication sans fil aux projets embarqués. Il agit comme un microcontrôleur autonome, il ne nécessite donc aucun autre microcontrôleur (comme Arduino ou Atmel) pour utiliser ses broches d’E/S. En gros, c’est un pont sans fil vers série avec 1 Mo de mémoire flash, un processeur 32 bits basse consommation et la prise en charge des réseaux Wi-Fi 802.11 b/g/n. C’est une solution incroyablement populaire et abordable depuis 2014. L’Original Prusa MINI/MINI+ prend en charge à la fois l’ESP-01 et la version légèrement modifiée ESP-01S – plus d’informations peuvent être trouvées dans le journal des modifications.

Nous avons commencé à travailler sur la prise en charge du Wi-Fi de la MINI vers la fin de 2020 avec l’intention de faire correctement la partie programmation dès le début au lieu de simplement coller un tas de code ensemble et de le publier à la hâte, car cela signifierait que nous devions tout réécrire à partir de zéro de toute façon, tôt ou tard. Nous avons réuni une équipe dédiée qui a été chargée d’une analyse appropriée de l’ensemble du projet et du prototypage de la solution sans fil.

Faisons-le correctement

Dès le départ, nous recherchions une solution complexe qui prendrait en charge pas seulement de simples transferts de G-codes via le réseau local, mais qui serait également compatible avec notre (alors à venir)PrusaLink et le logiciel de gestion de ferme Prusa Connect . Le plan était de créer une pile TCP/IP stable pour Ethernet et Wi-Fi, d’avoir la possibilité d’utiliser des sockets BSD et d’utiliser une couche d’application – un site Web avec des capacités de contrôle à distance fonctionnant sur un serveur HTTP directement sur l’imprimante. L’équipe a obtenu l’intégralité de la mission et a commencé à travailler.

L’une des idées maîtresses était de garder le firmware actuel de l’ESP-01 intact. Il existe un certain nombre de variantes d’ESP-01 différentes et programmer (et maintenir) de notre propre firmware pour ces microcontrôleurs était supposée exagérée. Il existe déjà une pile LwIP pour l’ESP-01 qui prend en charge le SLIP (Serial Line IP via UART), le NTP et le routage statique. Tout d’abord, nous avons essayé d’ajouter une pile IP parallèle et LwESP qui est une bibliothèque d’analyseur de commandes ESP AT légère. Utiliser une solution open-source semblait être la bonne voie.

Cependant, c’est là que nous avons commencé à nous retrouver dans des impasses. Il y a diverses versions de firmware pour l’ESP-01, chacun avec un ensemble de fonctionnalités légèrement différent et différents niveaux de qualité/fiabilité. Cela signifiait également que nous devions ajouter une quantité massive de code dans le firmware de la Buddy (carte mère de la MINI) à cause de la bibliothèque LwESP. En fin de compte, cela signifierait d’avoir deux piles IP parallèles (une LwIP pour l’Ethernet et une autre répartie entre la Buddy et l’ESP) et de basculer entre elles si nécessaire.

Et il y avait plus de problèmes – seulement 5 connexions, manque de support pour un serveur UDP et divers autres problèmes. En théorie, nous pourrions faire fonctionner cela d’une manière ou d’une autre, mais le tester et le déboguer serait un cauchemar. Cependant, notre collègue de l’équipe SLA a trouvé une solution plutôt ingénieuse – il a mis au point un firmware spécial et léger sur mesure pour l’ESP-01.

Le moment Euréka !

Donc, finalement, nous avons eu un prototype d’un minuscule firmware spécial qui a transformé l’ESP-01 en une interface réseau, quelque chose de similaire à la puce Ethernet sur la carte mère Buddy. C’était quelque chose dont nous avions vraiment besoin : un pas dans la bonne direction.

Et alors notre équipe a reçu un nouveau renfort. Pour citer un film classique : une personne qui en a oublié plus sur le réseautage que nous n’en saurons jamais. Et aussi un architecte C++ hautement qualifié ! Il a repris là où les tentatives précédentes se sont terminées et a commencé par une toute nouvelle analyse. Il lui a fallu un mois seulement pour mettre en place un serveur HTTP flexible et efficace qui est capable de diffuser les réponses aux requêtes (c’est-à-dire qu’il s’adapte à la RAM limitée, quelle que soit la durée de la réponse).

Son collègue a récupéré le firmware personnalisé et a commencé à faire évoluer le prototype ESP agissant comme une carte réseau. Tout d’abord, il a commencé avec la connexion sans fil et a connecté l’ESP via UART (interface série) à un ordinateur portable standard. De cette façon, nous avons atteint des vitesses allant jusqu’à 9/6 Mbit (download/upload). Nous avons enfin eu une connexion sans fil fiable avec une vitesse dépassant le débit maximum de l’interface UART de la MINI, qui est de 4,6 Mbaud.

La connexion de l’ESP à l’interface de la couche physique dans la pile LwIP du firmware de la Buddy a apporté non seulement des économies de codes, mais a également éliminé la schizophrénie susmentionnée des piles IP mixtes pour deux interfaces différentes. Les choses ont commencé à se présenter vraiment bien.

Clés USB maudites

Nous faisions de grands progrès. Le serveur HTTP avançait bien et nous avons commencé à ajouter plus de fonctionnalités – comme télécharger des G-codes depuis PrusaSlicer et télécharger des G-codes depuis l’imprimante. Nous avons ajouté un nouveau navigateur de fichiers avec des vignettes dans l’interface Web et implémenté des fonctions de démarrage/arrêt d’impression (et plusieurs autres).

En avril 2022, nous avions une connexion sans fil stable et le firmware était presque prêt à être publié. Il ne restait plus qu’une chose à résoudre. C’était malheureusement un problème majeur : assurer la stabilité et la compatibilité des différentes clés USB – des modèles chinois sans nom les moins chers aux disques USB de marque. Juste une petite curiosité : de nombreux disques sans nom chinois bon marché fonctionnaient en fait de manière plus fiable que les modèles plus chers. 🙂 Quoi qu’il en soit, nous devions résoudre ces délais d’attente incorrects dans le pilote USB en premier. Nous avons réussi à résoudre ce problème en collaboration avec STM. Mais il y avait autre chose, quelque chose de vraiment diabolique. Alors que les cartes SD ont des temps de réponse très clairement spécifiés, les clés USB n’ont rien de tel. Elles peuvent devenir « silencieux » même pendant des dizaines de secondes, en plus il y a une autre chose appelée « housekeeping ».

Pour faire simple : les clés USB sont conçues pour fonctionner principalement avec des ordinateurs standard – comme les ordinateurs portables, les lecteurs multimédias et les consoles de jeux vidéo. Ces machines ont des quantités folles de RAM (plus de 1 Mo :-)), donc lorsque vous commencez à copier des fichiers sur une clé USB et que celle-ci ne répond plus pendant quelques secondes, il y a toujours une grande mémoire tampon qui aide à surmonter ce délai. Le « housekeeping » est quelque chose que la clé USB fait automatiquement, c’est une routine responsable de la copie interne des blocs de données par >répartir le niveau d’usure plus ou moins uniformément sur la mémoire flash pour prolonger la durée de vie du périphérique de stockage. Cependant, ce « tri » prend du temps.

Certaines clés USB sont si mal conçues qu’elles peuvent cesser de répondre pendant jusqu’à 10 secondes. Nous avons alloué 10 Ko de RAM sur la carte mère Buddy pour servir de tampon et nous avons ainsi supprimé ce problème. Bien qu’il soit théoriquement possible de télécharger des G-codes même pendant les travaux d’impression actifs, il n’est pas recommandé d’utiliser cette fonction en raison de problèmes de performances.

Et enfin, il fallait résoudre le problème avec la bibliothèque FATfs. Cette bibliothèque est principalement utilisée pour les appareils embarqués et elle essaie de garder le système de fichiers aussi cohérent que possible. Cela signifie qu’à chaque fois qu’un fragment de fichier est écrit, la puce du lecteur commence à mettre à jour les tables FAT principale et de sauvegarde. Il s’agit d’un autre tueur de performance qui finira par réduire la durée de vie de la clé USB. Heureusement, nous avons trouvé une solution : une fois que vous avez commencé à télécharger un fichier G-code, nous connaissons déjà la taille totale du fichier – nous avons donc simplement demandé au système de fichiers de réserver d’abord de l’espace pour le fichier entier. Une fois le téléchargement terminé, ce n’est qu’alors que la table FAT est mise à jour.

La route devant nous

Le firmware 4.4.0 BETA actuel offre déjà la fonctionnalité réseau avancée et le téléchargement fiable de G-code. Cependant, nous avons encore du travail à faire. Nous cherchons à savoir si nous pouvons transmettre de manière fiable des fichiers G-code lorsque la MINI/MINI+ imprime. Comme expliqué ci-dessus, nous sommes limités par la technologie des clés USB et bien que le transfert soit théoriquement possible, il y a encore beaucoup de problèmes potentiels.

Nous améliorons encore le code, les débits actuels sont donc à peine supérieurs à 100 ko/s selon la qualité de la connexion sans fil et 300 ko/s sur ethernet. Il reste encore un peu de marge. En théorie, nous devrions être capable d’atteindre une vitesse brute d’environ 460 Ko/s sur l’UART/ESP. Nous nous attendons à ce que la vitesse finale soi tquelque part entre 250 et 350 Ko/s lorsqu’elle est correctement optimisé.

Nous voudrions également nous concentrer nos efforts pour rendre toute l’expérience plus conviviale. À l’heure actuelle, vous devez copier un fichier INI spécial sur la clé USB, ce qui est une solution quelque peu rudimentaire. Cela fonctionne, mais il y a certainement de la place pour de l’amélioration. Et nous voulons implémenter davantage d’améliorations de qualité de vie – comme un indicateur réel de force du signal, par exemple. Faites-nous savoir ce que vous aimeriez voir d’autre !

Il existe de nombreuses clés USB différentes et différents modèles de module ESP-01 qui peuvent affecter la vitesse d’une manière ou d’une autre. Nous vous serions très reconnaissants si vous décidiez de tester le nouveau firmware de la MINI et si vous nous faites savoir quels équipements (ESP et USB) vous utilisez et quelle est votre expérience avec eux !

Bien sûr, l’ensemble du firmware, y compris la technologie Wi-Fi ESP, est entièrement open-source et les codes sources sont librement disponibles sur GitHub. Donc, si vous voulez jouer avec l’ESP, n’hésitez pas à récupérez les codes sources ici !

Et vous pouvez aller voir la version actuelle du firmware sur notre page Github.