Passer une TwoTrees TTC450 sous FluidNC — modes CNC et laser sans reflashage

Traduction automatique depuis l'anglais — non relue.
Summary

Comment j’ai remplacé le firmware stock GRBL-ESP32 d’une TwoTrees TTC450 par FluidNC, pour basculer instantanément entre CNC et laser via un simple fichier YAML.

Le problème avec le firmware d’origine

La TwoTrees TTC450 est une machine sérieuse : 460×460 mm de zone de travail, moteurs NEMA 17 sur vis à bille en Z, broche 500 W, châssis aluminium solide. La mienne est livrée avec le module laser 20 W, ce qui la rend utilisable aussi bien en fraisage qu’en gravure. Le contrôleur est le MKS DLC32 v2.1, une carte ESP32 capable de piloter aussi bien une fraiseuse CNC qu’un laser. L’écran MKS TS35 installé par-dessus lui donne un aspect soigné.

La page TTC450 de Melvin Isken sur diode-laser-wiki est une excellente référence pour cette machine — elle couvre le montage, le firmware, les réglages et FluidNC en détail. Ce post s’appuie sur ce travail, étend la config FluidNC au laser 20 W et au mode CNC, et documente les adaptations nécessaires pour faire tourner l’écran et les plugins supplémentaires.

Le firmware stock, une version Makerbase de GRBL-ESP32, fonctionne bien à la livraison. Mais il a une limitation qui m’a rattrapé très vite : CNC et laser sont deux binaires distincts. Passer de la fraise au laser signifie brancher un câble USB, lancer le MKS Flash Tool, attendre le reflashage, et tout reconnecter. Sur une machine que j’utilise régulièrement dans les deux modes, c’est de la friction inutile.

J’ai aussi découvert que le binaire livré par TwoTrees et le firmware réellement installé sur la machine ne correspondaient pas — les partitions applicatives différaient octet par octet, ce qui m’a rendu prudent quant aux hypothèses sur l’état d’origine.

Pourquoi FluidNC

FluidNC est un firmware ESP32 moderne centré sur un fichier de configuration YAML. CNC ou laser n’est pas une question de firmware — c’est une question de fichier de config. On garde deux YAML sur la flash de la carte, et basculer entre les deux revient à taper :

1
2
$Config/Filename=config_laser.yaml
$Bye

C’est tout. Pas de câble, pas de reflashage, pas d’outil Windows.

FluidNC propose aussi une interface web servie via WiFi, une journalisation série détaillée, une configuration modifiable à chaud, et un système de plugins plus riche que GRBL. L’écosystème est actif et les releases sont prévisibles.

Le tableau suivant résume les compromis :

Critère Stock (Makerbase) FluidNC
CNC sans reflashage
Laser sans reflashage ❌ (binaire séparé)
Basculement CNC↔Laser Reflashage ~5 min $Config/Filename=… + $Bye
Configuration Paramètres GRBL $$ YAML + WebUI
Interface web Basique Complète (gestionnaire de fichiers, terminal, macros)
Debug / logs Limité Série détaillé + WebSocket
Rollback config Toujours possible
Écran MKS TS35 ❌ (upstream)
Communauté TTC450 ★★★★☆ ★★★☆☆

Les deux dernières lignes posaient problème : le firmware stock pilote le TS35 nativement, et FluidNC en amont n’a pas ce support (et a explicitement refusé de l’ajouter). J’y reviens.

La procédure de sauvegarde

Avant de toucher au firmware, je voulais une sauvegarde complète de l’état d’origine. La flash ESP32 est accessible via serial avec esptool, et un dump complet capture tout : bootloader, table de partitions, les deux slots OTA, et le SPIFFS.

1
2
esptool.py --chip esp32 --port /dev/tty.usbserial-110 --baud 921600 \
  read_flash 0x00000 0x800000 flash_backup.bin

J’ai ensuite vérifié que le dump n’était pas vide et confirmé l’identité du firmware :

  • Chaîne $I : PRODUCER:MKS_DLC32 / VER:1.1h.2023070302
  • Affichage TS35 : MKS DLC32 CNC V2.1 — V2.3 (8M.H35.20230803)

Cette sauvegarde me donnait un point de retour complet. En cas de problème, un write_flash remet la machine dans son état d’origine.

Layout flash et analyse des partitions

J’ai aussi extrait la table de partitions pour comprendre l’organisation de la flash. Le firmware stock utilise un layout OTA standard ESP32 avec deux slots applicatifs et un SPIFFS. FluidNC utilise huge_app.csv, un layout sans OTA qui donne à l’application un slot de 3 Mo — pas de mise à jour en roulant, mais pas d’espace gaspillé non plus.

Une préoccupation passagère : est-ce que reflasher endommage l’ESP32 ? La spec datasheet pour la flash NOR est 100 000 cycles d’effacement par secteur. À raison d’un reflashage par jour, ça fait 273 ans. La question ne mérite pas qu’on s’y attarde.

Installation de FluidNC

L’installation se fait en trois binaires : bootloader, table de partitions, et le firmware.

1
2
3
4
5
esptool.py --chip esp32 --port /dev/tty.usbserial-110 --baud 921600 \
  write_flash \
    0x1000  bootloader.bin \
    0x8000  partitions.bin \
    0x10000 firmware.bin

Au premier démarrage, FluidNC crée un point d’accès WiFi (FluidNC, pas de mot de passe). On s’y connecte, on ouvre http://192.168.4.1, on envoie un fichier YAML, et la machine tourne.

Écrire la configuration YAML

Le fichier YAML est là où se fait le vrai travail. FluidNC attend une description complète de la machine : axes, steps/mm, vitesses max, accélération, limites, sortie broche ou laser, entrée palpeur.

Pour la config CNC de la TTC450, les valeurs viennent des specs des steppers :

1
2
3
4
NEMA 17 (17HS8401S) : 200 pas/tour (1,8°/pas)
Micro-stepping A4988 : 1/16 → 3200 pas/tour
Vis à bille T8 : 4 mm/tour
steps/mm = 3200 / 4 = 800

La config laser est la même description mécanique avec un bloc broche différent — une sortie laser PWM à la place du relais qui pilote la broche.

Mettre au point la config a demandé quelques vérifications croisées. Une config FluidNC communautaire pour la TTC450 existait comme point de départ, mais elle couvrait uniquement un module laser de moindre puissance et n’avait pas été validée en mode CNC ni pour le module 20W. Je l’ai confrontée aux réglages d’usine TwoTrees et au code source du firmware Makerbase, ce qui a permis de résoudre quelques divergences — certaines valeurs de la référence semblent être des marges de sécurité conservatrices plutôt que des limites physiques réelles. Le résultat est une config complète et sourcée pour les deux modes sur la TwoTrees TTC450 avec le module laser 20W. La liste complète des sources et des décisions se trouve dans docs/yaml-config-sources.fr.md.

Les configs TTC450, la procédure d’installation, et les variantes firmware pré-compilées — dont des builds avec les plugins couverts dans les posts qui suivent — sont dans github.com/jordanauge/fluidnc-ttc450. J’ai le laser 20W ; le dépôt recense aussi la config de diode-laser-wiki pour la variante 5,5W. Les PRs pour d’autres combinaisons matérielles sont les bienvenues.

Les deux configs coexistent sur la carte sous les noms config_cnc.yaml et config_laser.yaml. Le basculement est instantané et réversible.

Le problème de l’écran

Le TS35 est piloté en SPI et est spécifique au firmware Makerbase. FluidNC en amont ne le supporte pas, et après discussion publique dans le ticket #759, l’équipe principale a fermé la demande hors périmètre.

Cela signifiait faire tourner FluidNC sans affichage local — la machine fonctionnait parfaitement via WiFi, mais l’écran restait noir. Pour une machine dans un atelier, c’est un recul visible.

J’ai fini par écrire un plugin FluidNC standalone pour remettre l’affichage en service. C’est une autre histoire, couverte dans un post dédié.

Résultat

La machine démarre maintenant sous FluidNC v4.0.2, se connecte au WiFi local en mode STA, et est accessible depuis un navigateur à son adresse IP. Les premiers tests avec gSender confirment que la communication WiFi fonctionne, même si ce n’est pas la méthode recommandée pour un usage en production. Passer du mode CNC au mode laser prend une dizaine de secondes, sans aucun outil. La procédure de sauvegarde permet de restaurer le firmware Makerbase d’origine en moins de deux minutes si besoin.

L’approche YAML s’avère une vraie amélioration par rapport aux paramètres $$. La configuration de la machine est désormais un fichier texte versionnable, commenté, avec un historique et des diffs lisibles.

Ce post est le premier d’une série sur le projet CNC TTC450. Le dépôt avec les configs TTC450, les builds firmware et la procédure d’installation est sur github.com/jordanauge/fluidnc-ttc450.