Last Updated on 12 september 2022 by Syds
Om m’n Laser graveerder en 3D Laser printer via het netwerk te kunnen bedienen heb ik een Raspberry Zero ingericht als WiFi printserver en hierop Octoprint geinstalleerd.
Noot: 12-9-2022 vanwege het chip tekort zijn er momenteel geen Raspberry Zero’s te koop. Voor een ander project “Vintage internetradio” heb ik een Raspberry Zero 2W nodig. Daarom een Banana Pi M2 Zero gekocht ter vervanging van onderhavige 3D printserver zodat ik de Raspberry Zero 2W vrij speel voor genoemd project. Dus zelf onderstaande procedure nogmaals doorgelopen met de een Banana Pi M2 Zero voorzien van Raspbian 11 Bullsye, zie ook mijn blogbericht voor het installeren van bullseye op een Banana Pi M2 Zero. Hierbij kwamen wat kleine verschillen aan het licht. Het deze verschillen in deze blog verwerkt met een duidelijke indicatie, en tekst in italic, dat deze stap alleen noodzakelijk is op een Banana Pi M2 Zero. Voor degene die een 3D printserver wil installeren op de Banana Pi M2 Zero is het uitgangspunt dat je Raspbian Bullseye hebt geinstalleerd en dat je verder gaat bij het aanpassen van de hostname in Stap 1.
Onderdelen:
Onderdeel | Aantal | Prijs | Webshop |
Raspberry Pi Zero 2W | 1 | € 24,20 | Raspberry Store |
USB Mini HUB OTG | 1 | € 5,95 | KIWI Electronics |
Sandisk High endurance 32Gb Micro- SD-card | 1 | € 10,90 | Dataio.nl |
M2,5 8mm boutjes en moertjes | 4 | € 0,40 | Plat |
Optioneel: Webcam | 1 | Rommelbak | |
Optioneel: Officiele Raspberry PI voeding | 1 |
Benodigdheden
- Laptop/Desktop met (Micro)SD kaartlezer
- Verloopkabel of -adapter HDMI naar HDMI-stekker D micro
- USB-C male naar USB-A female adapter (of de USB Mini HUB OTG van hierboven)
- Toetsenbord met USB-A aansluiting
- Muis met USB-A aansluiting
- Monitor met HDMI-aansluiting
- 3D printer + PLA
Stap 1. Raspbian op de Micro SD kaart installeren en configureren
Download de Raspberry Pi Imager van https://downloads.raspberrypi.org/imager/imager_latest.exe, en open de exe. De installatie wizard van de Imager tool start. Klik op “Installeren”, en daarna op “Voltooien”
De Imager tool start en je krijgt een melding met de vraag of de Raspberry Pi imager wijzigingen op je apparaat mag aanbrengen, bevestig dit met “Ja
Daarna verschijnt de user-interface van de imager tool
Plaats de lege SD-Card in je kaartlezer. Kies bij “Besturingssysteem” voor “Raspberry PI OS (32-BIT)” en bij “Opslagapparaat” de SD-Card die je net geplaatst hebt. Klik daarna op “Schrijf”, en Raspbian wordt op je SD-Card geïnstalleerd.
Haal nadat de Imager tool klaar is, sluit de Imager tool en haal de SD-kaart uit je Laptop/Desktop en schuif hem in de Raspberry Zero 2W
Sluit Toetsenbord, Muis en Monitor aan. (De Raspberry Zero ondersteund ook Bluetooth, dus je kunt ook een Bluetooth toetsenbord en muis gebruiken. Maar om die in te kunnen stellen zul je toch eerst met een USB-A variant aan de slag moeten). Sluit de Raspberry Zero met een voeding van minimaal 5.2v en 2.5A (gebruik hier bij voorkeur een officiele Raspberry Pi voeding) aan op het lichtnet. Raspbian start nu op in Desktop mode. Log in met username “pi” en wachtwoord “raspberry”.
Automatisch start de “Welkom bij Raspberry Pi” installatie wizard op
Klik op “Next”, en stel je Land, Taal en TimeZone in
Verander nu het wachtwoord van de user “pi”
Selecteer het WiFi netwerk en vul het WiFi password in
Laat de Raspberry Zero de updates van Raspbian downloaden en installeren
En klik tenslotte op “Restart” om de setup af te ronden
Enable eventueel SSH volgens de tutorials op https://phoenixnap.com/kb/enable-ssh-raspberry-pi#ftoc-heading-1
Maak met een terminal programma, bijv. Putty, connectie met de Raspberry Zero 2W. Achterhaal hiervoor het ip-address van je Raspberry Zero 2W van je router of dhcp-server, of open op de desktop van de Raspberry Zero een terminalvenster en gebruik het commando ipconfig om het ip-address te achterhalen.
In mijn geval heb ik er voor gekozen om SSH te activeren op de Raspberry Zero 2W volgens de beschrijving op https://phoenixnap.com/kb/enable-ssh-raspberry-pi#ftoc-heading-3
En maak verbinding met de Raspberry Zero m.b.v. de volgende putty settings, de eerste keer dat je via SSH connectie maakt moet je bevestigen dat de fingerprint van de Raspberry Zero toegevoegd wordt aan het register, bevestig dit met “Ja”
Log in met user pi en het wachtwoord wat je eerder ingegeven hebt. We gaan nu nog een paar zaken configureren, zoals de hostnaam en (optioneel) syslog, voer hiervoor de volgende commando’s uit
$ sudo vi /etc/hostname
Verander de hostname “raspberrypi” naar een naam van je keuze, in mijn geval “printserver”, en sla de file op. Verander tevens in /etc/hosts de hostname achter 127.0.0.1 (zogenaamde localhost)ca
$ sudo vi /etc/hosts
Die ziet er dan als volgt uit
pi@raspberrypi:~ $ cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 printserver
Voeg tot slot de hostname toe aan de dhcp-client configuratie file /etc/dhcpcd.conf, dit onder “# define static profile”
$ sudo vi /etc/dhcpcd.conf
Die ziet er dan als volgt uit
$ cat /etc/dhcpcd.conf
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel
# Inform the DHCP server of our hostname for DDNS.
hostname
# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid
# Persist interface configuration when dhcpcd exits.
persistent
# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit
# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu
# Most distributions have NTP support.
#option ntp_servers
# A ServerID is required by RFC2131.
require dhcp_server_identifier
# Generate SLAAC address using the Hardware Address of the interface
#slaac hwaddr
# OR generate Stable Private IPv6 Addresses based from the DUID
slaac private
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1
hostname=printserver.sydspost.nl
# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
reboot de Raspberry Zero met
sudo reboot
Maak opnieuw verbinding met de Raspberry Zero in putty door voor de optie “Restart Session” te kiezen, en log opnieuw in als user pi. Als alles goed is gegaan zie je dat de prompt is aangepast naar: pi@printserver:~ $.
Optioneel kun je de systeem logging van de Raspberry Zero naar een centrale syslog server laten zenden, zie ook mijn tutorial “Syslog server inrichten“. Standaard is rsyslog al geïnstalleerd binnen de Raspbian image en behoeft alleen nog geconfigureerd te worden. Volg hiervoor stap 3. van voorgenoemde tutorial, dus:
sudo vi /etc/rsyslog.conf
Voeg nu onderstaande regel toe boven in de file, net onder de eerste uitgecommentarieerde regels:
@@<ip-address syslog server>:<poortnummer>
In mijn geval dus @@192.168.2.29:514, de eerste 5 regels van de file ziet er dan zo uit:
nslu2:~# cat /etc/rsyslog.conf # /etc/rsyslog.conf Configuration file for rsyslog. # # For more information see # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html @@192.168.2.29:514
Herstart ook daar de rsyslog deamon met:
sudo systemctl restart rsyslog
Check de /var/log/syslog file op je Centrale syslog-server om te checken of de Printserver zijn logging doorstuurt naar de centrale Syslog server.
Stap 2. OctoPrint installeren
Start m.b.v. terminal software, bijv. Putty, een telnet of SSH sessie naar je Raspberry Zero en log in als user Pi. Controleer eerst of de python3 versie die voor geinstalleerd is op je Raspbian image hoger of gelijk is aan versie 3.6.
$ python3 --version Python 3.6.9
Indien lager dan versie 3.6, upgrade python3 dan met sudo apt-get install python3
Installeer nu Octoprint met m.b.v. de volgende commando’s:
$ pip3 install octoprint
Geef de user Pi voldoende rechten op de USB poorten
$ sudo usermod -a -G tty pi $ sudo usermod -a -G dialout pi
Zorg ervoor dat OctoPrint automatisch opstart bij het starten van de Raspberry Zero
$ wget https://github.com/OctoPrint/OctoPrint/raw/master/scripts/octoprint.service && sudo mv octoprint.service /etc/systemd/system/octoprint.service
Verander het path naar de OctoPrint binary in /etc/systemd/system/octoprint.service, naar /home/pi/.local/bin/octoprint
[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=pi ExecStart=/home/pi/.local/bin/octoprint [Install] WantedBy=multi-user.target
Voeg het script toe aan de autostart met
$ sudo systemctl enable octoprint.service Created symlink /etc/systemd/system/multi-user.target.wants/octoprint.service → /etc/systemd/system/octoprint.service.
En start OctoPrint voor de eerste keer op met
$ ./.local/bin/octoprint serve
of
$ sudo service octoprint start
Achterhaal het IP address van je Raspberry Zero met
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 0c:9d:92:30:0f:41 brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 80:c5:f2:ea:b3:69 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.115/24 brd 192.168.2.255 scope global dynamic noprefixroute wlp3s0
valid_lft 3566sec preferred_lft 3566sec
inet6 2a02:a459:46e4:1:82c5:f2ff:feea:b369/128 scope global dynamic noprefixroute
valid_lft 202831sec preferred_lft 116431sec
inet6 fe80::6a46:a0e1:cc3a:1648/64 scope link noprefixroute
valid_lft forever preferred_lft forever
In mijn geval dus 192.168.2.115, open nu in een browser de url: http://<ip-address>:5000, in mijn geval http://192.168.2.115:5000/
Volg de Setup Wizard door op Next te klikken. Je hebt geen backup te restoren, dus sla deze stap over door op Next te klikken. Geef daarna een Username en Password op om OctoPrint te beheren, bijv:
- Username: Pi
- Password: <wachtwoord>
En klik op “Create Account” en daarna op “Next”
Klik daarna onderin op het tab “Online Connectivity Check” op “Enable Connectivity Check”, en klik op “Next”.
Klik op het tab “Anonymous Usage Tracking” op “Disable Anonymous Usage Tracking” en klik op “Next”.
Klik op het tab “Plugin Blacklist” op “Enable Plugin Blacklist Processing” en klik op “Next”.
Op tab “Default Printer Profile” maak ik een profiel aan voor m’n 3D printer Creality Ender 5 Pro, dit met de volgende settings:
Form factor: Rectangular
Origin: Lower Left
Heated Bed: Yes (checked)
Heated Chamber: No (unchecked)
Width: 220mm
Depth: 220mm
Height: 300mm
Axes: Default**
Custom Bounding Box: No (unchecked)
Nozzle Diameter: 0.4mm
Number of Extruders: 1
Klik daarna op “Next”. Het tab “Server Commands” laat ik leeg, evenals het tab “Webcam & Timelapse”. Klik op “Finish”
Octoprint opent nu het startscherm, configureer hier de connection settings van de Creality Ender 5 Pro 3D printer.
Achterhaal eerst de USB poort waarop de printer is aangesloten met behulp van het volgende commando
$ dmesg [369738.533818] usb 1-1.1: new full-speed USB device number 17 using dwc_otg [369738.767095] usb 1-1.1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64 [369738.767113] usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [369738.767123] usb 1-1.1: Product: USB Serial [369738.767999] ch341 1-1.1:1.0: ch341-uart converter detected [369738.770197] usb 1-1.1: ch341-uart converter now attached to ttyUSB0
In mijn geval dus ttyUSB0. Als je meerdere apparaten aangesloten hebt op je printserver dan is het handig om udev rules in te stellen die er voor zorgen dat je een vaste usb poortnaam toekend aan je apparaat. Als je dit niet doet dan krijgen apparaten in de volgorde waarop je ze aansluit of aanzet een ttyUSB* naam toegewezen door Raspbian, en zul je die instelling in Octoprint steeds moeten aanpassen. Ga als volgt te werk om vaste USB poortnamen toe te kennen.
Sluit het eerste apparaat aan (in mijn geval de Creality Ender 5 Pro 3D printer zoals hierboven staat beschreven). De automatisch toegewezen USB-poort is dus ttyUSB0, noteer dit en tevens de cijfers achter usb, in mijn geval: 1-1.1
Creality Ender 5 Pro | CNC Laser engraver |
ttyUSB0 | |
1-1.1 |
Sluit het tweede apparaat aan, en herhaal bovenstaande stap
[369991.924043] usb 1-1.3: new full-speed USB device number 19 using dwc_otg [369992.168057] usb 1-1.3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.54 [369992.168084] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0 [369992.168095] usb 1-1.3: Product: USB2.0-Ser! [369992.169237] ch341 1-1.3:1.0: ch341-uart converter detected [369992.171358] ch341-uart ttyUSB1: break control not supported, using simulated break [369992.171717] usb 1-1.3: ch341-uart converter now attached to ttyUSB1
Vul ook hiervan de gegevens in in de tabel
Creality Ender 5 Pro | CNC Laser engraver |
ttyUSB0 | ttyUSB1 |
1-1.1 | 1-1.3 |
We hebben nog wat meer gegevens nodig om de udev regels in te stellen. Namelijk het leverancier-ID en Product-ID van de aangesloten apparaten. Voer hiervoor het volgende commando uit
pi@printserver:~ $ udevadm info --name=/dev/ttyUSB0 --attribute-walk Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0/tty/ttyUSB0': KERNEL=="ttyUSB0" SUBSYSTEM=="tty" DRIVER=="" ATTR{power/control}=="auto" ATTR{power/runtime_active_time}=="0" ATTR{power/runtime_status}=="unsupported" ATTR{power/runtime_suspended_time}=="0" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1:1.0/ttyUSB0': KERNELS=="ttyUSB0" SUBSYSTEMS=="usb-serial" DRIVERS=="ch341-uart" ATTRS{port_number}=="0" ATTRS{power/control}=="auto" ATTRS{power/runtime_active_time}=="0" ATTRS{power/runtime_status}=="unsupported" ATTRS{power/runtime_suspended_time}=="0" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1:1.0': KERNELS=="1-1.1:1.0" SUBSYSTEMS=="usb" DRIVERS=="ch341" ATTRS{authorized}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceClass}=="ff" ATTRS{bInterfaceNumber}=="00" ATTRS{bInterfaceProtocol}=="02" ATTRS{bInterfaceSubClass}=="01" ATTRS{bNumEndpoints}=="03" ATTRS{supports_autosuspend}=="1" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1': KERNELS=="1-1.1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="ff" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="8" ATTRS{bMaxPower}=="98mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0264" ATTRS{bmAttributes}=="80" ATTRS{busnum}=="1" ATTRS{configuration}=="" ATTRS{devnum}=="21" ATTRS{devpath}=="1.1" ATTRS{devspec}=="(null)" ATTRS{idProduct}=="7523" ATTRS{idVendor}=="1a86" ATTRS{ltm_capable}=="no" ATTRS{maxchild}=="0" ATTRS{power/active_duration}=="42410" ATTRS{power/autosuspend}=="2" ATTRS{power/autosuspend_delay_ms}=="2000" ATTRS{power/connected_duration}=="42410" ATTRS{power/control}=="on" ATTRS{power/level}=="on" ATTRS{power/persist}=="1" ATTRS{power/runtime_active_time}=="41981" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{product}=="USB Serial" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{rx_lanes}=="1" ATTRS{speed}=="12" ATTRS{tx_lanes}=="1" ATTRS{urbnum}=="132" ATTRS{version}==" 1.10"
en doe dit ook voor ttyUSB1
pi@printserver:~ $ udevadm info --name=/dev/ttyUSB1 --attribute-walk Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB1/tty/ttyUSB1': KERNEL=="ttyUSB1" SUBSYSTEM=="tty" DRIVER=="" ATTR{power/control}=="auto" ATTR{power/runtime_active_time}=="0" ATTR{power/runtime_status}=="unsupported" ATTR{power/runtime_suspended_time}=="0" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/ttyUSB1': KERNELS=="ttyUSB1" SUBSYSTEMS=="usb-serial" DRIVERS=="ch341-uart" ATTRS{port_number}=="0" ATTRS{power/control}=="auto" ATTRS{power/runtime_active_time}=="0" ATTRS{power/runtime_status}=="unsupported" ATTRS{power/runtime_suspended_time}=="0" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0': KERNELS=="1-1.3:1.0" SUBSYSTEMS=="usb" DRIVERS=="ch341" ATTRS{authorized}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceClass}=="ff" ATTRS{bInterfaceNumber}=="00" ATTRS{bInterfaceProtocol}=="02" ATTRS{bInterfaceSubClass}=="01" ATTRS{bNumEndpoints}=="03" ATTRS{supports_autosuspend}=="1" looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3': KERNELS=="1-1.3" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{authorized}=="1" ATTRS{avoid_reset_quirk}=="0" ATTRS{bConfigurationValue}=="1" ATTRS{bDeviceClass}=="ff" ATTRS{bDeviceProtocol}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bMaxPacketSize0}=="8" ATTRS{bMaxPower}=="96mA" ATTRS{bNumConfigurations}=="1" ATTRS{bNumInterfaces}==" 1" ATTRS{bcdDevice}=="0254" ATTRS{bmAttributes}=="80" ATTRS{busnum}=="1" ATTRS{configuration}=="" ATTRS{devnum}=="22" ATTRS{devpath}=="1.3" ATTRS{devspec}=="(null)" ATTRS{idProduct}=="7523" ATTRS{idVendor}=="1a86" ATTRS{ltm_capable}=="no" ATTRS{maxchild}=="0" ATTRS{power/active_duration}=="491960" ATTRS{power/autosuspend}=="2" ATTRS{power/autosuspend_delay_ms}=="2000" ATTRS{power/connected_duration}=="491960" ATTRS{power/control}=="on" ATTRS{power/level}=="on" ATTRS{power/persist}=="1" ATTRS{power/runtime_active_time}=="491532" ATTRS{power/runtime_status}=="active" ATTRS{power/runtime_suspended_time}=="0" ATTRS{product}=="USB2.0-Ser!" ATTRS{quirks}=="0x0" ATTRS{removable}=="unknown" ATTRS{rx_lanes}=="1" ATTRS{speed}=="12" ATTRS{tx_lanes}=="1" ATTRS{urbnum}=="16" ATTRS{version}==" 1.10"
Zoek in de output naar de genoteerde cijfers achter USB, en mijn geval dus 1-1.1 en respectievelijk 1-3.1. Neem de waarden van ATTRS{idProduct} en ATTRS(idVendor) over in de tabel.
Creality Ender 5 Pro | CNC Laser engraver |
ttyUSB0 | ttyUSB1 |
1-1.1 | 1-1.3 |
ATTRS{idProduct}==”7523″ | ATTRS{idProduct}==”7523″ |
ATTRS{idVendor}==”1a86″ | ATTRS{idVendor}==”1a86″ |
In mijn geval zijn allebei de apparaten voorzien van dezelfde UART chipset, namelijk ch341 chipset. Vandaar dat de Leveranciers-ID en Product-ID gelijk zijn. Voor het instellen van de regels heb je een unieke combinatie van attributen nodig. Dus ik heb de selectie attributen uitgebreid met het attribuut “product”, die was voor mijn twee apparaten afwijkend. Hiermee kom je op de volgende tabel
Creality Ender 5 Pro | CNC Laser engraver |
ttyUSB0 | ttyUSB1 |
1-1.1 | 1-1.3 |
ATTRS{idProduct}==”7523″ | ATTRS{idProduct}==”7523″ |
ATTRS{idVendor}==”1a86″ | ATTRS{idVendor}==”1a86″ |
ATTRS{product}==”USB Serial” | ATTRS{product}==”USB2.0-Ser!” |
Met behulp van bovenstaande tabel gaan we de regels instellen, open het bestand met regels met vi
$ sudo vi /etc/udev/rules.d/10-usb-serial.rules
En kopieer hierin onderstaande regels, en pas deze aan conform de waarden in jou tabel
SUBSYSTEM=="tty", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", ATTRS{product}=="USB Serial", SYMLINK+="ttyUSB_CREALITY" SUBSYSTEM=="tty", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", ATTRS{product}=="USB2.0-Ser!", SYMLINK+="ttyUSB_CNC"
Kies voor de waarde achter SYMLINK+ een zinvolle naam voor jou apparaat. Op basis van die naam wordt namelijk een symbolic link aangemaakt in /dev, dus bijv. als een apparaat wordt aangemeld op /dev/ttyUSB0, dan wordt met behulp van bovenstaande regels een symbolic link aangemaakt /dev/ttyUSB_CREALITY -> ttyUSB0. In je software kun je vervolgens verwijzen naar deze symbolic link /dev/ttyUSB_CREALITY.
Laad nu de nieuwe regels met
$ sudo udevadm trigger
En controleer de werking met
pi@printserver:~ $ ls -l /dev/ttyUSB* crw-rw---- 1 root dialout 188, 0 14 feb 16:13 /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 1 14 feb 16:13 /dev/ttyUSB1 lrwxrwxrwx 1 root root 7 14 feb 16:13 /dev/ttyUSB_CNC -> ttyUSB1 lrwxrwxrwx 1 root root 7 14 feb 16:13 /dev/ttyUSB_CREALITY -> ttyUSB0
De regels zijn nu ingesteld en in het vervolg krijgen je apparaten een vaste USB-poortnaam toegewezen, in mijn geval dus /dev/ttyUSB_CNC en /dev/ttyUSB_CREALITY
Klik eventueel in Octoprint op het refresh knopje naar Connection als je USB poort er (nog) niet tussen staat. Configureer de volgende instellen
Serial Port: /dev/ttyUSB_CREALITY
Baudrate: 115200
Printer Profile: Creality ender
Save connection settings: Yes (checked)
Auto-connect on server startup: Yes (checked)
En klik op “Connect”
Stap 3. CNC Laser graveerder configureren
Voor de ondersteuning van GRBL is een plugin voor Octoprint beschikbaar op Github. Deze kun je via de Plugin manager van Octoprint installeren. Kies hiervoor het “wrench” icoontje rechts boven in Octoprint
Scroll in de linker scrollbox naar beneden tot “Plugin Manager”, en klik deze aan
Klik daarna op de “+ Get More” knop
en zoek op “grbl”, en installeer de plugin “Better Grbl Support” door op “Install” te klikken
Klik op 2x op “Close”. Zoek daarna in de rechter scrollbox de “Better Grbl Support” plugin op, en enable deze
Klik op “Save”
Open een terminal window en voer het volgende commando uit op Octoprint te herstarten
$ sudo service octoprint restart
Maak een Printer profile aan voor de CNC Laser graveerder, klik wederom op het “Wrench” icoontje en open nu “Printer Profiles” en kies voor “+ Add Profile …”
Geef de CNC Laser graveerder een zinvolle naam en kies voor model “gbrl”, configureer op de volgende tab’s de volgende waarden
Form factor: Rectangular Origin: Lower Left Heated Bed: No (unchecked) Heated Chamber: No (unchecked) Width: 40mm Depth: 40mm Height: 0mm Axes: Default** Custom Bounding Box: No (unchecked) Nozzle Diameter: 0mm Number of Extruders: 1
Klik op “Confirm” en daarna op “Save”
Kies daarna op het startscherm van OctoPrint onder “Connection” voor de juiste USB poort, baudrate en Printer Profile
Serial Port: /dev/ttyUSB_CNC Baudrate: 115200 Printer Profile: CNC Laser Graveerder Save connection settings: Yes (checked) Auto-connect on server startup: Yes (checked)
OctoPrint maakt verbinding met de CNC Laser graveerder
Optioneel is het mogelijk om Octoprint gewoon op poort 80 te benaderen, je kunt dan volstaan met het intoetsen van de URL http://printserver.<domeinnaam>, in mijn geval http://printserver.sydspost.nl. Hiervoor gaan we de reversed proxy functionaliteit van Apache gebruiken. Installeer eerst Apache:
$ sudo apt-get install apache2
en creëer met het volgende commando het configuratie bestand hiervoor
$ sudo vi /etc/apache2/sites-available/Apache2Proxy.conf
en kopieer hierin de volgende configuratie (verander het domeinnaam sydspost.nl in je eigen domeinnaam, en de het emailadres is je eigen emailadres)
<VirtualHost *:80> ServerName printserver.sydspost.nl ServerAlias www.sydspost.nl ServerAdmin joumailadres@gmail.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ <Location /> Order allow,deny Allow from all </Location> </VirtualHost>
Voer vervolgens achtereenvolgens de volgende commando’s uit
$ sudo a2enmod proxy $ sudo a2enmod proxy_http $ sudo a2enmod proxy_balancer $ sudo a2enmod lbmethod_byrequests $ sudo a2ensite Apache2Proxy.conf $ sudo systemctl reload apache2 $ sudo systemctl restart apache2.service
Je kunt nu Octoprint benaderen op http://printserver.<domeinnaam>, ververs eventueel je browser cache met F5 als het niet werkt.
Stap 3. Laserweb server installeren op Raspberry Zero
Uiteraard kun je nu met de web-interface van Octoprint Gcode vanaf je desktop bestanden openen en printen, maar daarvoor moet je altijd een tussenstap maken door in Laserweb het bestand te exporteren naar Gcode, en in Octoprint inlezen. Het is ook mogelijk om direct vanuit Laserweb te printen. Laserweb bestaat uit een client en server deel. Hieronder beschrijven we hoe het server-deel installeren op de Raspberry Zero, en vanuit de windows client hiernaar connecten.
Installeer eerst, voor zover je dat nog niet gedaan hebt, de Node Version Manager “NVM”
$ cd $ mkdir .nvm $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
Sluit je terminal sessie af en log opnieuw in, voer dan het volgende commando in
$ export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
Check of je over de juiste versies van NPM en NodeJS beschikt met
$ npm -v 6.12.1 $ node -v v8.10.0
Banana Pi M2Z: De geïnstalleerde Raspbian 11 Bullseye distributie bevatte geen voor geïnstalleerde npm en nodejs, dus de commando’s npm en node werden niet gevonden. Ga gewoon verder met de volgende stap, het installeren van v12.22.5
NPM zou hoger moeten zijn dan versie 6.14.15, en Node hoger dan 12.22.5, dus beide moeten geüpgraded of geïnstalleerd worden met
$ nvm install v12.22.5
Recheck
$ npm -v 6.14.14 $ node -v v12.22.5
Upgrade npm naar versie 6.14.15 met
$ npm install npm@6.14.15 -g
Download en installeer LaserWeb server
$ cd $ git clone https://github.com/LaserWeb/lw.comm-server.git $ cd lw.comm-server $ npm install
Start nu de LaserWeb server op. Dit gaf bij mij een foutmelding, namelijk:
$ node server.js /home/pi/lw.comm-server/server.js:149 var io = websockets.listen(app); ^ TypeError: websockets.listen is not a function at Object.exports.LWCommServer (/home/pi/lw.comm-server/server.js:149:21) at Object.<anonymous> (/home/pi/lw.comm-server/server.js:3406:13) at Module._compile (internal/modules/cjs/loader.js:999:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) at Function.Module._load (internal/modules/cjs/loader.js:708:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) at internal/main/run_main_module.js:17:47
Banana Pi M2Z: Bij de installatie op de Banana Pi trad deze foutmelding niet op, je kunt de volgende stap overslaan.
Dit vrij eenvoudig aan te passen door in de file server.js de programmacode ” var io = websockets.listen(app);” aan te passen naar “var io = websockets(app); “. Dus open de file met vi, zoek naar “websockets”, en haal “.listen” weg en sla de file op
$ vi server.js
Start nu Laserweb server op met
$ node server.js *************************************************************** ---- LaserWeb Comm Server 4.1.000 ---- *************************************************************** Use http://127.0.1.1:8000 to connect this server. * Updates: Remember to check the commit log on https://github.com/LaserWeb/lw.comm-server/commits/master regularly, to know about updates and fixes, and then when ready update accordingly by running git pull * Support: If you need help / support, come over to https://forum.makerforums.info/c/laserweb-cncweb/78 ***************************************************************
Sluit de server met <Ctrl-c> af en zorg ervoor dat de server automatisch opstart bij het opstarten van het systeem
$ sudo ln -s`pwd`/lw.comm-server.service /etc/systemd/system $ sudo systemctl daemon-reload $ sudo systemctl enable lw.comm-server.service $ cd $ sudo ln -s
`pwd
`/.nvm/versions/node/v12.22.5/bin/node /usr/bin/node
Banana Pi M2Z: Om de een of andere reden stond nu de node file op een andere plek, namelijk in /home/pi/.config/versions/node/v12.22.5/bin. Vervang daarom het laatste commando door: sudo ln -s
`pwd
`/.config/versions/node/v12.22.5/bin/node /usr/bin/node
Omdat ik niet de user “pi” gebruik, moest ik tevens in de file lw.comm-server.service alle verwijzingen naar “pi” vervangen door “syds”, mijn lw.comm-server.service ziet er dan ook als volgt uit. :
$ cat lw.comm-server.service [Unit] Description=LaserWeb4 server [Service] ExecStart=/usr/bin/node /home/syds/lw.comm-server/server.js Restart=always RestartSec=10 # Restart service after 10 seconds if node service crashes StandardOutput=syslog # Output to syslog StandardError=syslog # Output to syslog SyslogIdentifier=lw.comm-server WorkingDirectory=/home/syds/lw.comm-server User=syds #Group=<alternate group> Environment=NODE_ENV=production PORT=8000 [Install] WantedBy=multi-user.target
Als jij gewoon de user pi gebruikt hoef je hier uiteraard niets in aan te passen. Start de server op en controleer of de server goed loopt met
$ sudo systemctl start lw.comm-server $ sudo systemctl status lw.comm-server ● lw.comm-server.service - LaserWeb4 server Loaded: loaded (/etc/systemd/system/lw.comm-server.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-12-20 18:06:15 CET; 5s ago Main PID: 5812 (node) Tasks: 11 (limit: 9345) Memory: 28.0M CGroup: /system.slice/lw.comm-server.service └─5812 /usr/bin/node /home/syds/lw.comm-server/server.js dec 20 18:06:16 test lw.comm-server[5812]: Remember to check the commit log on dec 20 18:06:16 test lw.comm-server[5812]: https://github.com/LaserWeb/lw.comm-server/commits/master dec 20 18:06:16 test lw.comm-server[5812]: regularly, to know about updates and fixes, and then when ready dec 20 18:06:16 test lw.comm-server[5812]: update accordingly by running git pull dec 20 18:06:16 test lw.comm-server[5812]: dec 20 18:06:16 test lw.comm-server[5812]: * Support: dec 20 18:06:16 test lw.comm-server[5812]: If you need help / support, come over to dec 20 18:06:16 test lw.comm-server[5812]: https://forum.makerforums.info/c/laserweb-cncweb/78 dec 20 18:06:16 test lw.comm-server[5812]: *************************************************************** dec 20 18:06:16 test lw.comm-server[5812]:
Start nu op je Laptop/Desktop de LaserWeb applicatie op om de connectiegegevens van de LaserWeb server aan te passen. Kies voor “Comms” -> “Server Connection”. Verander het “Server IP” in <ip-address van je Raspberry Zero>:8000, in mijn geval dus 192.168.2.115:8000. En klik op “Connect”
Rechtsonder in in Laserweb zie je dat de connectie gelukt is
Noot: Helaas kan Laserweb niet uit de voeten met symbolic link USB-poortnamen, dus connecteer deze rechtstreeks op /dev/ttyUSB*
Stap 4. Casing Raspberry Zero uitprinten
Op internet een mooie compacte casing gevonden voor de Raspberry Zero 2W, zie ook https://cults3d.com/en/3d-model/tool/raspberry-pi-zero-2-w-camera-case-heatsink-and-octopi-ready Mijn Raspberry Zero heeft geen heatsink, dus voor de versie gekozen die uitsparing voor de heatsink biedt.
Voor het afdrukken van de casing gebruik ik Cura, Cura beschikt over een plugin voor Octoprint integratie. Cura kun je downloaden van https://ultimaker.com/software/ultimaker-cura
Nadat je Cura gedownload hebt, installeer je deze met de default installatie instellingen.
Start daarna Cura op en stel deze in, klik op “Get started” en accepteer de User Agreement en klik op “Next” bij de mededeling dat Cura machine data ed. verzameld.
Maak een Ultimaker Account aan en Login of sla deze stap over met “Skip”
Voeg een printer toe door op “Add a non-networked printer” te klikken en kies in de lijst voor jou merk en type printer, in mijn geval een Creality Ender 5. Accepteer de default Machine Settings door op “Next” te klikken.
Lees de “What’s New” en release notes, of sla deze over met “Skip” en “Next”
Cura is nu klaar voor gebruik
Maar eerst nog de Octoprint-plugin installeren. Klik hiervoor rechtboven binnen Cura op “Marketplace”, de beschikbare plugins worden geladen
Scroll naar beneden onder “Community Plugins” en zoek naar “OctoPrint Connection”
En installeer deze door op “Install” te klikken, de GNU voorwaarden te accepteren en Cura af te sluiten met “Quit Ultimaker Cura”
Start Cura opnieuw op en koppel de printer aan Octoprint door in het menu te kiezen voor “Settings”-> “Printer” -> “Manage Printers …”
Selecteer je printer en kies voor “Connect OctoPrint”
Je OctoPrint printserver “printserver._octoprint._tcp.local wordt automatisch gevonden, klik deze aan
Klik vervolgens op “Request…” of een API Key van je OctoPrint printserver te verkrijgen. Automatisch wordt Octoprint in een webbrowser geopend en verschijnt onderstaande melding. Klik op “Allow”
De gegenereerde API key en User name wordt automatisch overgenomen, klik op “Connect” en daarna 2x op “Close”
De setup van Cura is nu afgerond, tijd om de casing te printen. Laad hiervoor de eerder gedownloade file “pi_zero_2_w_cover_without_heatsink.stl” met “File” -> “Open File(s)…”
Klik nu op “Slice” en daarna op “Print with OctoPrint”
Als alles goed is gegaan wordt nu de casing uitgeprint. Je kunt dit volgen in Cura onder “Monitor” of via de OctoPrint website
Stap 5. Raspberry Zero in casing plaatsen, alles aansluiten en testen
Plaats de Raspberry Zero 2W tussen de twee onderdelen van de casing. Sluit de voeding en de 4-poorts USB-A hub op de Micro-B aansluitingen. Ik heb die twee met een klein stukje dubbelzijdig tape op elkaar bevestigd. Sluit de 3D printer, CNC Laser Graveerder en eventueel Webcam (zie Stap 6.) aan op de USB-A hub.
Test nu de werking door de CNC Laser graveerder via LaserWeb een ontwerpje te laten printen, en print een 3D-ontwerp via OctoPrint evt in combinatie met Cura op je 3D printer.
<foto’s nog t
Stap 6. Webcam installeren en instellen (optioneel)
Om je print werk op afstand te kunnen monitoren is het handig een webcam te plaatsen die live beelden van je CNC Laser graveerder en/of 3D printer aan je doorgeeft. Octoprint biedt hiervoor standaard ondersteuning.
Eerst zorgen we ervoor dat de Raspberry Zero als webcam server gaat fungeren, open hiervoor een ssh sessie en installeer het “motion” pakket
sudo apt-get install motion
Configureer nu het motion pakket door de file /etc/motion/motion.conf te editen
sudo vi /etc/motion/motion.conf
Pas de volgende parameters aan:
- daemon on
- framerate 1000
- stream_port 8081
- movie_quality 100
- stream_localhost off
- webcontrol_localhost off
- width 1280
- height 720
- post_capture 5
- movie_output off
Heb je meerdere webcams aan je Raspberry Zero hangen, pas dan eventueel ook de parameter videodevice aan naar /dev/video[0123]
Sla de file op en en pas de file /etc/default/motion aan
sudo vi /etc/default/motion
Zet start_motion_daemon op yes
$ cat /etc/default/motion # set to 'yes' to enable the motion daemon start_motion_daemon=yes
Herstart de motion server nu met
sudo service motion restart sudo motion
En zorg ervoor dat motion wordt gestart na reboot
$ sudo crontab -e
Voeg onderaan de crontab de volgende regel toe, en sla de file op
@reboot /usr/bin/motion -b
Nu gaan we OctoPrint configureren, hiervoor open je de settings door op het “wrench” icoontje te klikken, het volgende scherm opent:
Klik daarna links in het menu op “Webcam & Timelapse”
Vul bij “Stream URL” de url van je webcam in: http:\\<ip-address/hostname>:8081, in mijn geval http://test.sydspost.nl:8081/, en klik op “Save”
Om de camera verder te configureren, bijv. de brightness of het contrast aan te passen, is er een handige plugin beschikbaar. Ga naar de “Plugin Manager” en klik op “+ Get More”
Zoek op “Camera”, en installeer de “Camera Settings” plugin door hierachter op “Install” te drukken. Klik daarna 2x op “Close”
Zoek opnieuw op “Camera” in “Installed plugins” en klik op het “Enable” knopje achter “Camera Settings” om de plugin te activeren
OctoPrint heeft de v4l utilities nodig voor het managen van de camera settings, dus installeer deze tools met
$ sudo apt install v4l-utils
Herstart OctoPrint met
$ sudo systemctl restart octoprint
En in de OctoPrint Settings verschijnt onder “Plugins” een nieuwe optie “Camera Settings”, klik hierop
Speel wat met de Camera settings tot het beeld aansluit bij je wensen, en klik op “Save”. Als je nu een 3D model print kun je via de Webcam de vorderingen volgen
Stap 7. Printer verlichten
Om ’s avonds ook goed licht te hebben voor de Webcam opnames, maar ook voor het monitoren van je printer, is het handig om een lamp boven je printer automatisch aan- en uit te schakelen tijdens het printen. Hiervoor kun je de plugin Octoprint – Domoticz gebruiken. Deze installeer je als volgt. Open de settings door op het “wrench” icoontje te klikken, het volgende scherm opent:
Ga naar de “Plugin Manager” en klik op “+ Get More”
Zoek op “domoticz”, en installeer de “Octoprint-Domoticz” plugin door hierachter op “Install” te drukken. Klik daarna 2x op “Close”
Zoek opnieuw op “Octoprint-Domoticz” in “Installed plugins” en klik op het “Enable” knopje achter ” Octoprint-Domoticz ” om de plugin te activeren
Octoprint vraagt nu om het systeem te herstarten, klik op “Restart now”. Zodra Octorprint opnieuw is opgestart kies opnieuw voor het “wrench” icoontje om de Domoticz plugin te configureren. Kies voor “Domoticz” onder plugins.
Het volgende scherm opent, klik op het “Pennetje” om de instellingen aan te passen
Het volgende scherm verschijnt
Toelichting op non-default waarden
Label | Waarde | Toelichting |
IP:PORT | IP-address of hostname van je Domoticz server en poortnummer | In mijn geval 192.168.2.29:8080 |
Index | 104 | IDX van Printerverlichting in Domoticz, in mijn geval 104 |
Label | Printerverlichting | Zinvolle naam |
Warning prompt | Uitgevinkt | Vond het een irritante melding of je wel of niet de verlichting uit wilt zetten. |
GCODE Trigger | Aangevinkt | Maakt het mogelijk om met een GCODE commando de verlichting aan- en uit te schakelen. Wordt hieronder verder uitgelegd. |
Je ziet nu dat er naast het “wrench” icoontje een “bliksem” icoontje is verschenen. Hiermee kun je het licht boven je printer handmatig aan- en uitzetten. Maar dat voegt natuurlijk niet zoveel toe aan de functionaliteit die Domoticz je al biedt. Met de GCODE Trigger is het mogelijk om vanuit je Slicer applicatie het licht automatisch aan- en uit te schakelen als het printen start. Ik gebruik Cura als Slicer applicatie en hieronder leg ik uit hoe dit precies binnen Cura configureert.
Start Cura op en kies voor Settings -> Printer -> Manage printers, het volgende scherm verschijnt
Selecteer je printer, en kies voor “Machine Settings” het volgende scherm verschijnt
Voeg bij “Start G-code” onder M221 de volgende regel toe (vervang 104 door het IDX van jou lamp):
@DOMOTICZON 104
en voeg bij “End G-code” onder M140 de volgende regel toe, en klik 2x op “Close”
@DOMOTICZOFF 104
Print een 3D ontwerp om het te testen
Stap 8. OctoRemote app
Voor het volgen van je printwerk vanaf je mobiel zijn een aantal app’s beschikbaar in de Playstore. Ik heb gekozen voor OctoRemote omdat de opzet en look-and-feel overeenkomst met die van OctoPrint. Eerst de app geïnstalleerd op mijn (Android) telefoon, zoek op “OctoRemote” in de google Playstore en installeer deze.
Zodra de app geïnstalleerd is, open deze en swipe naar links om bij de instellingen te komen
Vul onderstaande gegevens in
Label | Waarde | Toelichting |
Display Name | Printserver | Zinvolle naam |
IP Address | 192.168.2.119:5000 | IP address of Hostname van de printserver + poortnummer Octoprint |
API Key | <API key> | In OctoPrint gegenereerde API key, zie hieronder voor een toelichting |
Enable webcam | Aan | Afhankelijk van een gekoppelde webcam aan je printserver aan of uit |
Webcam URL | 192.168.2.119:5000/webcam/?action=stream | Wordt automatisch gevuld op basis van je ingegeven IP Address |
Om de API key te genereren open je via een webbrowser OctoPrint
Klik rechtsboven het menu onder het poppetje “pi” open, en kies voor “User Settings”
Neem de API Key over, of scan met je telefoon de QR code. Klik op “ADD PRINTER”. De app opent nu het status tab
Vul onderstaande gegevens in, en klik op “Connect”
Label | Waarde | Toelichting |
Serial Port | AUTO | Kies voor AUTO om de seriële poorten automatisch te laten detecteren, of kies een specifieke seriële poort. |
Baudrate | 115200 | Default voor Arduino met GBRL |
Printer profile | Creality Ender | Of jou profile aangemaakt in stap 2. |
Save connection settings | Aangevinkt | Sla de connectie settings op |
Auto connect on server startup | Aangevinkt | Maak automatisch connectie als de Octoprint server opstart |
Je maakt nu connectie met de printserver en printer. Onder het tabje “CONTROL” vindt je de webcam beelden. Door op de drie onder elkaar staande puntjes te klikken kun je de settings van de webcam aanpassen.
Vink daar de optie “Auto-start webcam stream” aan en keer terug naar het hoofdscherm.