Mettre en place Octoprint pour une imprimante 3D

Publié le 21/06/2023 et écrit par Vincent Finance, dans la catégorie : #bricolatique

Quand on débute dans l'impression 3D, la première chose que l'on cherche à faire est de pouvoir contrôler son imprimante de n'importe où et de pouvoir lancer et surveiller ses impressions à distance. Une solution courante est d'utiliser Octopi, une distribution tout-en-un qui permet d'utiliser une carte de type Raspberry Pi pour avoir une interface Web pour son imprimante.
Cependant, vu que je n'ai pas ce genre de carte, je préfère utiliser une autre solution : installer directement Octoprint (le logiciel servant de base pour Octopi) sur un vieux client léger (Thin client) compatible 64 bits. Voici donc un petit tutoriel pour reproduire mon installation !

Vous aurez donc besoin de :

Installer le système

Dans notre exemple, nous allons utiliser Debian GNU/Linux, une distribution adaptée aux serveurs et postes de travail et qui est réputée pour être stable. Son installation ne sera pas abordée ici, mais vous pouvez inspirer de ce tutoriel.

Pour l’installation, j’ai choisi les composants Utilitaires standards et Serveur SSH, afin d’avoir le minimum nécessaire pour démarrer. Je me connecterai par la suite en SSH pour configurer et utiliser ma machine.

Installer Octoprint

Prérequis

Nous allons maintenant installer les logiciels suivants :

Sous Debian, cela se fait avec cette commande :

$ sudo apt install -y nginx python3.11 python3.11-venv python3-setuptools python-dev-is-python3 cmake libjpeg62-turbo-dev git tmux build-essential

Créer ensuite un compte dédié à Octoprint et ajouter le dans les groupes video, dialout et tty pour avoir accès à l’imprimante 3D et à la webcam :

$ sudo adduser octoprint
$ sudo usermod -a -G dialout,tty,video octoprint

Installer octoprint via pip

Nous allons ici utiliser une fonction pratique de Python pour notre installation d'Octoprint : les environnements virtuels. Cela nous permettra d'isoler le logiciel du reste du système et de faciliter les mises à jour futures.

Pour installer octoprint avec cette méthode, taper la suite de commandes ci-dessous :

$ sudo -i -u octoprint

$ mkdir octoprint && cd octoprint
$ python3 -m venv .
$ source bin/activate

$ pip install octoprint

Lancer ensuite octoprint pour vérifier que tout se lance sans erreurs :

$ octoprint serve

Si tout est OK et qu'aucune erreur grave ne s'affiche, vous pouvez taper sur les touches Ctrl et C pour fermer le programme.

Installer mjpg-streamer

mjpg-streamer est une solution simple pour obtenir un flux vidéo depuis une webcam et il permet d’utiliser plusieurs technologies pour afficher le retour en direct. Il embarque aussi une petite interface web que nous allons utiliser avec Octoprint. Malheureusement, ce logiciel n'est pas disponible nativement sous Debian, mais il est possible de le compiler depuis le dépôt officiel.

Commencer par brancher la webcam sur le PC et vérifier qu’elle apparaît bien :

$ sudo lsusb
[...]
Bus 001 Device 004: ID 1bcf:2284 Sunplus Innovation Technology Inc. papalook AF 925
[...]

Récupérer la dernière version du dépôt de mjpg-streamer, lancer la compilation du logiciel avant de l'installer :

$ git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental/
$ make
$ sudo make install

Vérifier qu'aucune erreur ne s'affiche et que le programme s'installe correctement. La console devrait vous donner une liste de dossiers qui seront à utiliser par la suite avec mjpg_streamer.
Lancer la commande de test suivante pour vérifier que le logiciel reconnaît bien la caméra et que celle-ci s'allume :

$ sudo mjpg_streamer -i '/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 10 -r 1280x720' -o '/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www/'
MJPG Streamer Version: git rev: 310b29f4a94c46652b20c4b7b6e5cf24e532af39
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 1280 x 720
 i: Frames Per Second.: 10
 i: Format............: JPEG
 i: TV-Norm...........: DEFAULT
 o: www-folder-path......: /usr/local/share/mjpg-streamer/www/
 o: HTTP TCP port........: 8085
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled

Si tout est OK et qu'aucune erreur grave ne se présente, vous pouvez taper sur les touches Ctrl et C pour fermer le programme.

Créer les services

Pour qu'Octoprint et mjpg-streamer démarrent automatiquement lorsqu'on allume le thin client, nous allons mettre en place deux fichiers de services Systemd et les activer.

Le premier fichier permet de lancer octoprint avec son utilisateur dédié :

$ sudo vim /etc/systemd/system/octoprint.service

[Unit]
Description=The snappy web interface for your 3D printer
After=network-online.target
Wants=network-online.target

[Service]
Environment="LC_ALL=C.UTF-8"
Environment="LANG=C.UTF-8"
Type=exec
User=octoprint
ExecStart=/home/octoprint/octoprint/bin/octoprint serve

[Install]
WantedBy=multi-user.target

Le deuxième fichier permet de lancer mjpg-streamer avec l'utilisateur octoprint et d'activer la webcam automatiquement :

$ sudo vim /etc/systemd/system/mjpeg-webcam.service

[Unit]
Description=The snappy web interface for your webcam
After=network-online.target
Wants=network-online.target

[Service]
Environment="LC_ALL=C.UTF-8"
Environment="LANG=C.UTF-8"
Type=exec
User=octoprint
ExecStart=mjpg_streamer -i '/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 10 -r 1280x720' -o '/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www/'

[Install]
WantedBy=multi-user.target

Vous pouvez noter que l'emplacement des fichier input et output dépendent directement de ce que la commande d'installation nous avait indiqué tout à l'heure.

Recharger la configuration de Systemd et activer les deux nouveaux services. L'option -now permet de les lancer en même temps que l'activation :

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now octoprint mjpeg-webcam

Vous pouvez vérifier que tout est bon en exécutant sudo systemctl status octoprint mjpeg-webcam. Les deux services sont alors en active (running).

Configurer Nginx

Pour afficher notre interface et le retour vidéo, nous allons directement passer par ce qu'on appelle un proxy inverse : cela nous permettra d’ouvrir seulement les ports 80 et 443 sur le pare-feu et d'utiliser une belle URL pour notre installation. Ici, c'est le serveur web nginx qui va servir de proxy inverse.

Installer donc la configuration suivante dans le dossier /etc/nginx/sites-available/ de la machine :

$ sudo vim /etc/nginx/sites-available/octoprint

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Nom de domaine
    server_name windows.home.arpa; ## Vous pouvez changer cette partie par ce qui vous plaît ou bien par l'adresse IP de la machine

    # Options pour le certificat SSL
    ssl_certificate /etc/ssl/Octoprint.crt;
    ssl_certificate_key /etc/ssl/private/Octoprint.key;

    # Logs
    access_log /var/log/nginx/octoprint-access.log;
    error_log /var/log/nginx/octoprint-error.log;

    # Redirection for Octoprint
    location / {
        proxy_pass       http://127.0.0.1:5000/;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Scheme $scheme;
        proxy_http_version 1.1;
        client_max_body_size 0;
    }

    location /webcam/ {
        proxy_pass http://127.0.0.1:8085/;
    }
}

Générer un certificat auto-signé dans le dossier /etc/ssl et activer la configuration du nouveau site :

$ sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/Octoprint.key -out /etc/ssl/Octoprint.crt -sha256 -days 3650 -nodes -subj "/C=FR/ST=Auvergne Rhone Alpes/L=Lyon/O=Automario/CN=windows.home.arpa"
$ sudo ln -s /etc/nginx/sites-available/octoprint /etc/nginx/sites-enabled/octoprint

Ici, le CN correspond au nom de domaine présent dans la partie server_name, mais vous pouvez mettre une adresse IP à la place.

Vérifier la configuration de Nginx avant de le lancer :

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Relancer Nginx pour charger la nouvelle configuration :

sudo systemctl restart nginx

Ouvrer les ports 80 et 443 de votre pare-feu (via firewalld, iptables ou nftables)

Tester

Aller sur l’adresse http://votreip/ : l’interface d’Octoprint s’affiche avec l’assistant d’installation.
Aller sur l’adresse http://votreip/webcam : la page de mjpg-streamer doit s’afficher avec plusieurs options.

Configuration d’octoprint

Maintenant que tout fonctionne, on peut passer à la configuration via l’assistant.

Cliquer sur Suivant et suivre les étapes pour créer le compte d’administration, installer le profil de l’imprimante, configurer les options de mise à jour et activer le support de la webcam.

Pour utiliser la webcam, indiquer l’URL donnée par mjpg-streamer dans la section VLC : http://votreip/webcam

Cliquer sur Suivant puis sur Terminer pour fermer l’assistant. Octoprint charge alors son interface principale.

Cliquer sur Connect pour vous connecter à l’imprimante et essayer de la faire bouger avec les boutons fléchés sur la droite. Si tout fonctionne, la tête d’impression va bouger dans les directions qu’on lui envoie et votre imprimante sera prête à imprimer.

Un peu de personnalisation

Selon moi, l’interface par défaut n’est pas la plus optimale pour utiliser son imprimante au quotidien, notamment car on ne voit pas la webcam dans le tableau de bord.
Pour régler ce petit détail, on peut installer l’extension UI Customizer : elle permet de changer l’apparence de l’interface, mettre des thèmes et surtout afficher tous les panneaux que l’on souhaite. Je recommande le thème Cyborg Dark.

Si vous aimez vérifier votre imprimante, vous pouvez aussi installer l'extension Octopod Plugin qui permet d'ouvrir l'accès de votre Octoprint à votre smartphone via une application mobile nommée Octopod. Cette application est disponible sur Android et iOS et permet d'afficher la webcam, contrôler votre machine ou encore lancer une impression directement depuis son interface.

Avec tout ça, vous pouvez maintenant lançer des impressions à distance, connaître l'avancement en temps réel et téléverser vos fichiers en Gcode depuis n'importe quel poste.

Capture d'écran de mon interface d'Octoprint


Un commentaire à ajouter ?

Pour ajouter votre commentaire, envoyez directement un mail ici