Raspberry Pi 4 pour piloter sa CNC, avec bCNC et/où CNCjs. On vous montre TOUT !

Il arrive très souvent de vouloir piloter sa CNC indépendamment de son PC. Une alternative bon marché est d’utiliser un Raspberry Pi (Abrévié en RPi pour la suite), sur lequel on va pouvoir se connecter à distance, où localement en lui adjoignant écran et clavier.
Nous allons considérer une installation sans écran ni clavier, solution très pratique et économique. Si vous préférez avoir Ecran et Clavier, vous pourrez faire tout ce que nous allons expliquer, simplement, au lieu de le faire avec le bureau à distance de Windows, vous le ferez localement sur le RPi.

Matériel nécessaire :

  • Un PC avec Internet
  • Carte Micro SD (8Go suffisent, je n’ai pas essayé avec 4)
  • Un moyen pour lire/écrire cette carte depuis le PC. Un dongle USB est parfait.
  • Un Raspberry PI 4. Plus il a de mémoire, mieux ce sera.
  • Soit une clef USB mémoire (Thumb Drive), soit un disque SSD. On évoquera ce matériel plus en détail plus tard.
  • Un cable Ethernet, ou une clef WiFi compatible RPi, pour communiquer avec le RPi

Autant préciser d’entrée de jeu qu’une explication détaillée ne sera pas fournie sur toutes les commandes passées et tous les utilitaires utilisés. Ce document (et vidéo) est bien assez long comme ça. Vous pouvez utiliser Google pour chercher des informations complémentaires. Je ne m’étends pas non plus sur la sécurité, tout simplement parce que, si votre RPi est connecté à votre réseau local, et que vous ne donnez aucun accès public à son adresse IP depuis votre Box, personne d’autre que vous ne pourra jamais s’y connecter. Maintenant, chaque cas est différent, et vous pourrez éventuellement avoir besoin de plus de sécurité. Dans ce cas, je vous engage, là aussi, à faire vos recherches sur Internet dans ce sens, mais je ne peux pas passer le temps nécessaire pour chaque cas particulier.

1ère Etape – Rendre son RPi bootable depuis un port USB

Classiquement, un RPi boot (et utilise) une carte micro SD. Seulement c’est lent, et assez limité en taille. Si nous voulons pouvoir utiliser notre RPi comme un PC (à peu près), nous allons vouloir utiliser un disque SSD, beaucoup plus rapide qu’une carte, et avec une bien plus grande capacité (en général). Comme il faut bien commencer quelque part, même si nous ne nous en servirons pas par la suite, il nous faut donc nous munir d’une carte micro SD, sur laquelle on va installer Raspberry Pi OS Lite. Pour cette installation provisoire, pas besoin des graphiques de bureau, la version « Légère » est donc parfaite. Plus petit = plus rapide.


Après avoir téléchargé le fichier ZIP, et décompressé celui-ci, il faut copier l’image sur la carte SD. J’utilise Win32 Disk Imager pour ça, mais il existe d’autres utilitaires qui ont la même fonction.

Vous devriez maintenant voir votre lecteur s’appeler « Boot », avec un certain nombre de fichiers. Créez un nouveau fichier, vide, avec le nom « ssh », sans extension.

On peut maintenant retirer la carte SD du lecteur, l’installer sur le RPi, et booter celui-ci.

Connexion en SSH

On devrait maintenant pouvoir se connecter en SSH. Mais d’abord, il faut trouver quelle est l’adresse IP assignée à votre RPi par le DHCP de votre box. J’ai Free, et la gestion de la FreeBox me montre l’état du réseau local .

On voit que mon « nouveau » RPi, assigné aujourd’hui, est joignable avec l’adresse IP 192.168.0.85. Il existe beaucoup d’utilitaires différents permettant une connexion SSH, comme PUTTY. Personnellement, comme c’est quelque chose que je fais souvent, j’utilise un utilitaire un peu plus évolué, MobaXTerm
On va donc se connecter, pour la première fois, sur notre RPi, en connexion locale Ethernet

Et nous passons tout de suite les premières commandes en ligne (vous pouvez copier/coller, l’une après l’autre). L’identifiant par défaut est pi, mot de passe raspberry.

sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo rpi-update

Au bout d’un certain temps (rappelez-vous, nous sommes pour l’instant sur une carte SD, pas rapide), vous devriez voir ceci :

Si le Raspberry Pi que vous avez acheté est très récent, il se peut qu’il n’y ait pas de mise à jour du firmware. Comme indiqué à la fin de la mise à jour, nous devons maintenant rebooter le Pi, pour activer la mise à jour et nous assurer que tout va bien. Pour cela on passe la simple commande
sudo reboot

Installation du nouveau bootloader

Pour pouvoir booter depuis un port USB, il nous faut installer un nouveau bootloader, et mettre à jour l’eeprom pour ça.

sudo rpi-eeprom-update -d -a

Nouveau reboot. Astuce : appuyez au clavier sur la flèche haute pour faire défiler vos commandes précédentes. Comme on a déjà fait un reboot, pas la peine de le retaper.
maintenant, après le reboot, on va pouvoir configurer notre RPi pour qu’il puisse booter depuis un port USB.

sudo raspi-config

On fait « Entrée » sur l’option 6, pour avoir accès aux réglages avancés, puis on sélectionne l’option A6, pour l’ordre de boot.
Là, on sélectionne l’option B2, pour donner la priorité à USB, mais en gardant la possibilité de booter sur la carte D si nécessaire.

Un message de confirmation nous indique que notre choix est validé.

On peut sortir de l’utilitaire de configuration en sélectionnant « Finish » avec la touche tabulation.

Et on choisit un reboot ensuite.

Ecriture sur le disque SSD ou la clef USB

On peut faire sudo halt pour arrêter le RPi maintenant, mais je trouve toujours plus sûr, en plus, de débrancher son alimentation à ce moment.
On peut maintenant copier notre OS « light », comme précédemment, mais cette fois-ci sur notre disque SSD (ou clef USB). Ne sélectionnez pas « Formater le disque ». Ce n’est normalement pas utile. Si vous êtes sur un disque SSD, ce devrait prendre nettement moins de temps que la première fois. N’oubliez pas de rajouter « ssh » une fois le système copié.

Après avoir rebooter depuis le lecteur USB, et nous être à nouveau connectés, nous allons passer à nouveau les commandes déjà vues :
sudo apt update
sudo apt upgrade
sudo apt full-upgrade

Nous sommes sur un nouveau système d’exploitation, il nous faut donc aussi le mettre à jour. C’est de toutes façons une bonne habitude, à chaque fois que vous vous connectez sur votre RPi en ssh, de lui passer ces commandes. Les mises à jour du système sont très fréquentes. La dernière, full-upgrade, n’est pas systématiquement nécessaire.

Maintenant que toutes les dernières mises à jour sont installées, nous allons pouvoir lancer à nouveau sudo raspi-config, mais cette fois-ci nous allons configurer un certain nombre de choses dont nous ne nous sommes pas encore occupés puisqu’il ne s’agissait que d’une installation temporaire.
Premièrement, nous commençons par mettre notre RPI en Français. Choix Menu 5, Localisation, puis L1, Locale. Faire défiler la liste jusqu’à trouver fr_FR.UTF-8, et appuyez sur la barre espace pour sélectionner. Ensuite touche tabulation pour sélectionner OK, et Enter pour valider le choix.    On peut retourner sur le menu localisation pour configurer la Zone temps, le clavier. Si vous vous connectez en WiFi, sélectionnez aussi le Pays.

La localisation effectuée, nous choisissons les options avancées pour étendre le système. Ce serait quand même dommage d’avoir un SSD de 640 Go et de n’en utiliser que 4, par exemple.

Un message nous indique que la partition redimensionnée sera accessible après un reboot. Donc, nous faisons un reboot maintenant « sudo reboot » après être sorti de l’utilitaire de configuration avec Finish.

Une fois relancé, on peut vérifier l’espace disque disponible avec la commande « df -h » Dans mon cas, j’ai 24 Go disponibles sur une clef USB de 32 Go (J’utilise cette clef pour l’article et la vidéo, en « vrai », j’ai un SSD de 180 Go)

Connexion avec le Bureau à Distance de Windows

Une connexion SSH, c’est très bien, rapide, mais ça nous force à n’utiliser que la ligne de commande. Dans certains cas, et notamment pour faire fonctionner bCNC, il nous faut voir ce que nous faisons. Nous allons donc installer sur notre RPi un utilitaire qui va nous permettre d’utiliser le bureau à distance de Windows, comme nous le ferions pour n’importe quel autre ordinateur Windows sur notre réseau local. Cela va nous permettre d’éviter d’avoir à connecter physiquement un écran au RPi. Seulement, ayant installé un système « light », sans bureau, il faut installer un bureau pour notre RPi maintenant, avant d’installer le bureau à distance.
Cela se fait avec la commande
sudo apt-get install raspberrypi-ui-mods xinit xserver-xorg
Une fois cette installation faite, on reboot avec sudo reboot

Maintenant, nous téléchargeons Xrdp, une implémentation open-source du protocole Microsoft Remote Desktop Protocol. Il suffit pour cela de taper
sudo apt install xrdp
en ligne de commande sur notre terminal ssh.

Ensuite, on peut lancer le bureau à distance de Windows

qui devrait s’ouvrir sur ceci. Eventuellement, le mot de passe sera demandé.

Dans mon cas, le terminal installé d’origine étant peu lisible


J’ai installé un terminal plus classique et plus lisible « sudo apt install lxterminal » Il y a un vrai mieux, je trouve.

Installation de Samba, partage de fichiers sur le RPi

Nous allons maintenant installer un utilitaire appelé « Samba ». Qu’est-ce que c’est ? Il s’agit d’un protocole de transfert de fichiers développé par Microsoft et multi-plateformes. Cela permet l’échange de fichiers et le partage d’imprimantes sur Linux, Windows et MacOS. Nous allons nous en servir pour envoyer directement nos fichiers G-Code, générés par Fusion 360 ou par un slicer pour imprimante 3D, directement sur le Raspberry pi, par le réseau. Fini le besoin d’aller physiquement sur la machine avec une carte SD.

Les lignes de commande que je vais partager maintenant peuvent être entrées depuis le terminal sur le bureau du RPi, où bien avec votre utilitaire SSH. L’effet sera le même.

sudo apt-get install libcups2 samba samba-common cups

Après installation, il faut configurer Samba. On va commencer par faire une copie de sécurité du fichier smb.conf
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak 
Nous pouvons maintenant créer un nouveau fichier de configuration
sudo nano /etc/samba/smb.conf 

En copiant/collant les lignes ci-dessous

[global]
workgroup = WORKGROUP

log file = /var/log/samba/log.%m
max log size = 1000
logging = file
panic action = /usr/share/samba/panic-action %
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[homes]
comment = Home Directories
browseable = no
read only = yes
create mask = 0700
directory mask = 0700
valid users = %S
[share]
comment = Pi
Shared Folder path = /home/pi/Downloads/share
browseable = yes
writeable = yes
only guest = no
create mask = 0777
directory mask = 0777
public = yes
guest ok = yes

Si vous n’êtes pas sûr du nom de votre réseau, vous pouvez le trouver avec la commande « net config workstation », a passer en ligne de commande Windows ou PowerShell

Pas de changement pour moi, puisque le « workgroup » s’appelle bien WORKGROUP. Modifiez en fonction de ce que vous voyez pour vous.
CTRL + X, puis Y, puis Enter, pour valider les modifications effectuées avec nano.

On peut partager n’importe quel dossier existant, où bien en créer un pour l’occasion. Comme je suis sur le bureau du RPi, je m’en sers pour créer un nouveau dossier « share » à l’intérieur de mon dossier « downloads »


Il me faut maintenant aller modifier le fichier de configuration de samba pour lui indiquer ce qui est partagé :

sudo nano /etc/samba/smb.conf path = /home/pi/Downloads/share 

Attention aux majuscules, Linux, et donc le RPi, sont sensibles à la casse. On valide les modifications dans nano comme précédemment.

Bien, très bien, même. Maintenant que Samba est configuré et installé, on devrait pouvoir connecter notre répertoire « share » comme emplacement réseau dans Windows. MAIS, ça ne marche pas !
En tous cas, pas comme ça, sans rien faire, mais cela peut dépendre de votre version de Windows. Chez moi, avec Windows 10 à jour 21H2 build 19044.1415, rien à faire, j’obtenais systématiquement un message d’erreur me disant que la connexion était refusée. D’autant plus frustré que cela avait parfaitement fonctionné auparavant. Donc, après moults recherches sur Internet, j’ai découvert qu’une récente mise à jour de Windows avait modifié certains paramètres liés à Samba.
Tout d’abord, Microsoft à mis à jour le protocole SMB, mais Samba ne suit pas forcément aussi vite. Il faut donc aller dans « Activer/désactiver des Fonctionnalités de Windows »

Et cocher la case en face de « Support de Partage de Fichiers SMB 1.0/CFIS », puis faire OK pour que Windows installe cette fonction. Il se peut qu’il soit nécessaire de rebooter Windows.

Ensuite, et toujours dans Windows, il faut lancer l’Editeur de Stratégie de groupe local . Taper gpedit.msc dans la recherche

Cliquez sur « modèles d’administration », puis « Réseau »

Dans Réseau, cherchez « Station de travail LANMAN » et activez « Activer les ouvertures de session invité non sécurisées »

Pfff, ben voilà, c’est fait !
Nous allons enfin pouvoir attacher notre partage Samba comme un nouveau lecteur disque dans Windows.

Et ça marche, sans mot de passe !


On peut aller se créer un nouveau dossier qui va nous servir, dans Fusion 360, comme dossier où exporter les chemins d’outils générés. Même pas besoin de copier un fichier pour l’usinage.

Et si on passait maintenant aux choses sérieuses, comme d’installer bCNC sur notre Raspberry Pi flambant neuf ?

Installation de bCNC

J’ai déjà fait une vidéo il y a quelque temps https://youtu.be/7IYmDCeF7Oc, mais on va rapidement revenir sur le sujet pour que ce dossier soit complet. De plus, des mises à jour dans l’OS du Pi sont intervenues, qui rendent l’installation un peu plus complexe. Python est normalement déjà installé avec le RPi, mais l’utilitaire PIP ne l’est pas, et nous allons en avoir besoin, puisque c’est la méthode recommandée pour installer bCNC

sudo apt install pip

Nous pouvons maintenant passer à l'installation de bCNC

pip install –upgrade bCNC

On passe sur le terminal dans le bureau du RPi, et on lance
python -m bCNCoui, mais ! On va presque certainement obtenir une erreur, avec à la fin quelque chose du style « ImportError: No module named _tkinter »

La version (récente) de python installée d'origine avec l'OS ne comprend pas certaines librairies/packages nécessaires au fonctionnement de bCNC . Nous allons donc les installer maintenant.

sudo apt-get install python3-tk
pip install numpy --global-option="-mfloat-abi=hard" --force-reinstall

Nous allons enfin pouvoir lancer bCNC, avec python -m bCNC, et cette fois-ci, la fenêtre de bCNC s'ouvre sur notre bureau.


Il faut bien sûr ouvrir le port pour communiquer avec l'Arduinio et GRBL. La dénomination n'est pas exactement intuitive. Comme vous pouvez le voir, chez moi il s'appelle « spy:///dev/ttyACM0?color »
Une fois connecté, on devrait voir apparaitre des coordonnées, et surtout, en cliquant sur l'icone terminal, en haut à droite de la fenêtre, on peut vérifier que l'on est bien en communication avec GRBL

Et de un ! On passe au suivant.

Installation de CNCjs

Par différence avec bCNC, en installant CNCjs, on installe en fait un serveur auquel on va se connecter via un navigateur Internet. L’avantage est que l’on va pouvoir piloter sa CNC depuis n’importe quel accessoire électronique disposant d’un accès à votre réseau local. L’inconvénient, c’est que l’installation est un peu plus complexe, et basée sur Javascript au lieu de Python, mais comme je vous mets tout ça étape par étape, ça deviendra en fait très simple.

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - # Install NodeJS v16
sudo apt install -y nodejs

Vous allez sans doute voir un nombre impressionnant de lignes de warning, ne vous affolez pas, tout va bien…
sudo npm install -g pm2 pm2 startup 


Cette commande nous demande de passer une nouvelle commande  pour modifier la variable d'environnement PATH (Nous sommes en train de mettre en place ce qui va exécuter CNCjs, un serveur internet, en fait). Je m'exécute donc, en faisant un copié/collé de cette ligne dans mon terminal ssh. Je lance maintenant la commande « pm2 start $(which cncjs) -- --port 8000 -m /tinyweb:/home/pi/tinyweb » pour actuellement démarrer CNCjs sur le port 8000

En résultat, je devrais voir un process en trains de s'exécuter





Reste à sauver cela, et afficher la liste pour être sûr
pm2 save

pm2 list
Je peux d'ores et déjà visualiser ma page CNCjs sur le bureau du RPi, après avoir installé Chromium 

sudo apt install chromium-browser -y






Reste à configurer le pare-feu du RPi pour rediriger le port 80 vers le port 8000, et pouvoir accéder à CNCjs depuis n'importe quelle machine sur le réseau. Si iptables n'est pas installé, vous pouvez le faire en lançant 
sudo apt install iptables
Ensuite, 
sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000 sudo apt-get install iptables-persistent -y
Finalement, on peut rebooter notre RPI pour vérifier que tout va bien, et se connecter à CNCjs. La sélection du port est bien plus claire que depuis bCNC






J'avoue ne plus utiliser que CNCjs, exclusivement. Le système de macro est plus « propre » que celui de bCNC, l'écran est clair, et accessible depuis n'importe quelle machine






Utilisez maintenant votre Raspberry Pi, j'espère que cette longue explication vous aura permis de faire fonctionner tout ça. Il est bien sûr aussi possible d'installer un programme pour vous connecter à votre (vos) imprimante(s) 3D. J'utilise Repetier Server pour cela, que je préfère de très loin à Octoprint, plus limité. Mais je vous laisse chercher la documentation pour cette installation vous-même. 

Voilà, bon courage !
				

2 réflexions sur “Raspberry Pi 4 pour piloter sa CNC, avec bCNC et/où CNCjs. On vous montre TOUT !”

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Retour en haut