Vous aimeriez allumer et éteindre l’éclairage intérieur de votre WonderMaker ZR directement depuis Fluidd, ou automatiquement au début et à la fin d’une impression? Voici la méthode que j’ai mise au point et testée sur notre imprimante.
Test effectué sur une WonderMaker ZR à quatre têtes (T0 à T3), firmware 1.1.13. Aucun flash du firmware, aucune mise à jour de Klipper et aucun remplacement du logiciel Makerbase ne sont nécessaires. Nous ajoutons toutefois un petit module Python à Klipper, trois macros G-code et un service Linux. Le bouton d’éclairage de l’écran tactile continue de fonctionner exactement comme avant.
Compatibilité : WonderMaker commercialise des modèles distincts : ZR (une tête), ZR Ultra et ZR Ultra-S (quatre têtes). La méthode présentée ici est confirmée sur ma machine seulement. Elle est plausible sur une ZR Ultra sans enceinte si le contrôleur et la sortie d’éclairage sont identiques, mais je ne l’ai pas vérifiée. La compatibilité de la ZR de base et des autres versions de firmware reste à confirmer. Ne poursuivez pas si le test GPIO de l’étape 2 ne concorde pas.
1. Ouvrir une session SSH sur l’imprimante
Sous Windows, ouvrez PuTTY (Option 1) : entrez l’adresse IP de la ZR dans « Host Name », conservez le port 22 et le type SSH, puis cliquez sur « Open ». Acceptez la clé d’hôte après avoir vérifié qu’il s’agit bien de votre imprimante. Sur Windows Terminal, macOS ou Linux (Option 2), vous pouvez utiliser :
ssh t13dp@ADRESSE_IP_DE_LA_ZR
Dans notre installation, le nom d’utilisateur SSH est t13dpet au moment d’écrire ce blogue, le mot de passe par défaut est TM88888. Saisissez son mot de passe (les caractères ne s’affichent pas pendant la saisie). Les chemins et commandes ci-dessous correspondent à cette installation.
2. Identifier et vérifier le GPIO de l’éclairage
Vérifiez d’abord la présence du GPIO utilisé sur la machine :
cat /sys/class/gpio/gpio76/{direction,active_low,value}
Sur notre imprimante, les deux premières lignes sont out et 0. La dernière ligne est la valeur actuelle de l’éclairage : 0 lorsque les LED sont éteintes et 1 lorsqu’elles sont allumées. Actionnez le bouton d’éclairage de l’écran tactile et relancez la commande : cette dernière valeur doit changer. Si le dossier gpio76 est absent ou si la valeur ne change pas, arrêtez ici : les paramètres de votre version pourrait être différent.
Vérifiez ensuite que les interfaces G-code utilisées par notre module existent dans la version installée de Klipper :
grep -nE 'def register_command|def register_mux_command|def run_script_from_command|def get_reactor' /home/t13dp/klipper/klippy/gcode.py /home/t13dp/klipper/klippy/klippy.py
Cette commande doit notamment retourner des lignes pour register_command et get_reactor. Elle ne modifie rien.
3. Autoriser Klipper à accéder à l’éclairage
Par défaut, le GPIO est contrôlé par root, tandis que Klipper est exécuté par t13dp. Pour le test immédiat :
sudo chown t13dp:netdev /sys/class/gpio/gpio76/value && sudo chmod 660 /sys/class/gpio/gpio76/value && test -w /sys/class/gpio/gpio76/value && echo "GPIO76 accessible à Klipper"
Résultat attendu : GPIO76 accessible à Klipper. Ces permissions temporaires seront rétablies automatiquement au redémarrage à l’étape 7.
4. Installer le petit module Python
Pour créer le fichier du script Python, collez tout le bloc suivant dans la fenêtre SSH, y compris les lignes sudo tee et PY et faire Entrée au clavier. Ne les collez pas à l’intérieur de l’éditeur nano : ce sont des délimiteurs de commande shell.
sudo tee /home/t13dp/klipper/klippy/extras/zr_light.py >/dev/null <<'PY'
GPIO = "/sys/class/gpio/gpio76/value"
class ZRLight:
def __init__(self, config):
gcode = config.get_printer().lookup_object("gcode")
gcode.register_command("ZR_LIGHT_ON", self.cmd_on)
gcode.register_command("ZR_LIGHT_OFF", self.cmd_off)
gcode.register_command("ZR_LIGHT_TOGGLE", self.cmd_toggle)
def set_light(self, value, gcmd):
try:
with open(GPIO, "w") as f:
f.write(str(value))
except OSError as e:
raise gcmd.error("ZR light: %s" % e)
def cmd_on(self, gcmd):
self.set_light(1, gcmd)
def cmd_off(self, gcmd):
self.set_light(0, gcmd)
def cmd_toggle(self, gcmd):
try:
with open(GPIO, "r") as f:
current = int(f.read().strip())
except (OSError, ValueError) as e:
raise gcmd.error("ZR light: %s" % e)
self.set_light(0 if current else 1, gcmd)
def load_config(config):
return ZRLight(config)
PY
Vérifiez la syntaxe du fichier créé :
python3 -m py_compile /home/t13dp/klipper/klippy/extras/zr_light.py && echo "Module valide"
Résultat attendu : Module valide. Cette opération n’effectue aucun changement d’état des LED.
5. Créer les trois macros dans Fluidd
Créez un fichier de configuration dédié contenant l’activation du module et les macros visibles dans Fluidd :
cat > /home/t13dp/printer_data/config/zr_light.cfg <<'EOF'
[zr_light]
[gcode_macro LIGHT_ON]
gcode:
ZR_LIGHT_ON
[gcode_macro LIGHT_OFF]
gcode:
ZR_LIGHT_OFF
[gcode_macro LIGHT_TOGGLE]
gcode:
ZR_LIGHT_TOGGLE
EOF
Vous obtiendrez les commandes LIGHT_ON, LIGHT_OFF et LIGHT_TOGGLE. Elles appellent respectivement les commandes internes ZR_LIGHT_ON, ZR_LIGHT_OFF et ZR_LIGHT_TOGGLE.
6. Inclure les macros et redémarrer Klipper
Sauvegardez printer.cfg et ajoutez l’inclusion du nouveau fichier (une seule fois) :
CFG=/home/t13dp/printer_data/config/printer.cfg; cp -a "$CFG" "$CFG.pre-zr-light"; grep -Fqx '[include zr_light.cfg]' "$CFG" || sed -i '1i[include zr_light.cfg]' "$CFG"
Dans la console Fluidd, lorsque l’imprimante est au repos, envoyez :
RESTART
Le RESTART recharge la configuration Klipper : il ne reflashe pas le firmware. Trois nouvelles macros devraient apparaître dans Fluidd. Testez chacune, puis vérifiez que le bouton d’éclairage de l’écran tactile fonctionne toujours.
Note sur les commandes pendant une impression : pendant certaines opérations d’attente de Klipper (notamment le nivellement du plateau ou l’attente de la température), les commandes LIGHT_ON, LIGHT_OFF et LIGHT_TOGGLE peuvent ne pas s’exécuter immédiatement. Elles sont généralement exécutées lorsque l’imprimante reprend l’exécution du G-code. Elles fonctionnent normalement lorsque l’imprimante est inactive ou pendant une impression hors de ces phases d’attente.
7. Conserver les permissions après redémarrage
Comme les permissions de /sys/class/gpio sont recréées au démarrage, installez ce service systemd qui attend l’apparition de gpio76 et accorde l’accès au compte t13dp :
sudo tee /etc/systemd/system/zr-light-gpio.service >/dev/null <<'EOF'
[Unit]
Description=ZR internal lighting GPIO permissions
After=makerbase-client.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'i=0; while [ ! -e /sys/class/gpio/gpio76/value ]; do i=$((i+1)); [ "$i" -lt 60 ] || exit 1; sleep 1; done; chown t13dp:root /sys/class/gpio/gpio76/value && chmod 600 /sys/class/gpio/gpio76/value'
[Install]
WantedBy=multi-user.target
EOF
Activez le service et appliquez immédiatement ses permissions :
sudo systemctl daemon-reload && sudo systemctl enable --now zr-light-gpio.service
Contrôlez le résultat :
systemctl show zr-light-gpio.service -p Result -p ExecMainStatus -p UnitFileState; stat -c '%U:%G %a' /sys/class/gpio/gpio76/value
Résultats attendus : Result=success, ExecMainStatus=0, UnitFileState=enabled et t13dp:root 600. Un état inactive (dead) est normal pour ce service de type oneshot : il se termine après avoir appliqué les permissions.
Après un redémarrage complet de la ZR, vérifiez de nouveau les macros Fluidd et le bouton tactile. Dans notre cas, les deux continuent de fonctionner.
8. Allumer et éteindre les LED automatiquement pendant les impressions
Dans Wonderprint-Orca, passez en mode Advanced, puis ouvrez le profil de l’imprimante et la section Machine G-code. Dans Machine start G-code, ajoutez cette ligne au tout début du script existant :
LIGHT_ON
Dans Machine end G-code, ajoutez :
LIGHT_OFF
Sur le profil, où la routine de fin repose sur PRINT_END, placez LIGHT_OFF immédiatement avant la ligne PRINT_END, afin que l’extinction soit exécutée avant que la macro ne réinitialise le fichier d’impression. Conservez toutes les autres commandes d’origine, notamment START_PRINT et PRINT_END.
Ces ajouts concernent la fin normale d’un travail produit avec ce profil. Une annulation, une erreur ou un G-code provenant d’un autre profil ne déclenche pas nécessairement LIGHT_OFF. Les boutons manuels restent utilisables à tout moment.
9. Changer le mot de passe SSH par défaut
Puisque l’accès SSH donne accès à la configuration de l’imprimante et pourrait compromettre la sécurité de votre imprimante et réseau local, profitez de cette intervention pour modifier le mot de passe du compte t13dp. Dans votre session SSH :
passwd
Saisissez le mot de passe actuel, puis le nouveau mot de passe deux fois. La saisie reste invisible. Gardez la session ouverte le temps de tester une nouvelle connexion SSH avec le nouveau mot de passe. Cette opération change le mot de passe Linux du compte connecté, sans modifier le firmware.
Ce petit guide vous a été utile ?
Ne pas pouvoir contrôler l’éclairage de notre WonderMaker ZR autrement que par l’écran tactile nous agaçait royalement ! Alors, nous avons décidé de régler le problème et de partager une solution que nous n’avons trouvée documentée nulle part ailleurs.
Si cette procédure vous a épargné quelques heures de recherches et de frustration, un petit retour d’ascenseur serait grandement apprécié : Partagez la bonne nouvelle !
Et si vous avez déjà fait affaire avec notre petite entreprise familiale (Impression 3D Québec / 3D Prints Canada), nous serions également ravis de connaître votre expérience dans un avis Google.
Bonnes impressions !
Notes et références
Cette procédure documente un test réel sur le firmware 1.1.13, et non une fonction officiellement prise en charge par WonderMaker (bien que nous jugeons que ceci devrait être une fonction de base! ;)) sur toutes les ZR. Elle n’installe ni KIAUH ni gcode_shell_command, et ne modifie pas le binaire propriétaire makerbase-client. Elle ajoute du code à l’installation Klipper existante : après une mise à jour importante, vérifiez donc que le module zr_light.py est toujours présent.
Documentation : modèles et assistance WonderMaker · commandes G-code Klipper · Machine G-code d’OrcaSlicer.


0 Comments