
Witajcie moi drodzy
Opiszę tutaj szczegółowo jak skonfigurować Raspberry PI wraz z OctoPi do obsługi drukarki 3D przez sieć WiFi. Jest to bardzo wygodne rozwiązanie gdyż normalnie gdy chcemy coś wydrukować to musimy nasz plik modelu (a dokładniej: kod GCode dla drukarki) ręcznie wrzucać na kartę microSD i przekładać do drukarki. A dzięki pokazanemu tu rozwiązaniu można to robić w pełni przez sieć (przez przeglądarkę internetową i lokalnie postawioną stronę WWW) za pomocą kilku kliknięć.
Pokazany tu sposób również pozwala na podłączenie kamerki sieciowej do podglądu wydruku, ale ja podłączanie jej pominę i skupię się na samym wydruku przez sieć.
Opisany tu sposób zadziała na różnych Raspberry i drukarkach 3D, ale ja to zrobię na przykładzie Raspberry Pi Zero W i drukarki Ender 3 Pro.
Czym jest OctoPi i OctoPrint?
Na początek przydałoby się określić dokładnie co jest czym. Co prawda obie te nazwy mogą często występować wręcz naprzemiennie, ale tak naprawdę każda oznacza nieco co innego.
OctoPrint (bieżąca wersja to 1.4.0) to serwer/interfejs WWW dla drukarek 3D. Pozwala sterować drukarką przez przeglądarkę internetową, wysyłać jej pliki gcode przez formularz, itp.
OctoPi (bieżąca wersja to 0.17.0) to gotowy obraz systemu skonfigurowanego z OctoPrint dla Raspberry PI.
Krótki spis treści co tutaj opiszę
Tutaj opiszę:
- jak przygotować kartę microSD z systemem OctoPI dla Raspberry (wraz z wgraną konfiguracją naszej sieci by Raspberry się samo z nią połączyło)
- jak podłączyć Raspberry do drukarki 3D
- jak zdobyć adres IP naszego Raspberry (jeśli normalny sposób połączenia się z nim poprzez http://octopi.local nie działa)
- jak skonfigurować OctoPrint do współpracy z drukarką (ustawienia Serial Port)
- jak używać OctoPi by dokonać wydruku przez sieć
Nie opiszę tutaj jak udostępnić naszą drukarkę w całej sieci Internet, gdyż ja nie miałem po prostu takiej potrzeby (starczyło mi udostępnienie na domowym WiFi). To jest możliwe, ale będziecie musieli to zrobić we własnym zakresie.
Jakie Raspberry użyć?
OctoPi jest kompatybilne z wieloma wersjami Raspberry PI, ale ostateczny wybór 'Malinki' zależy od tego czy chcemy tylko wysyłać .gcode (pliki wydruków) przez sieć czy też obserwować postępy wydruku przez kamerkę.
Jeśli chcemy używać kamerki, to powinniśmy zdecydowanie wybrać mocniejszy mikrokomputer, Raspberry 3 lub 4. Wysyłanie obrazu kamerki wymaga przepustowości i przy słabszej 'Malince' mogłoby negatywnie wpłynąć na jakość wydruku.
Jeśli chcemy tylko wysyłać samo GCode przez sieć i nie potrzebujemy kamerki, to Raspberry PI Zero W powinno też dać radę (w moim przypadku dało radę).
Ja wybrałem Raspberry PI Zero W i na jego przykładzie opiszę tutaj wszystkie kroki, lecz dla innych Raspberry będą one pewnie bardzo podobne.
Co będzie nam potrzebne?
Przede wszystkim - drukarka Ender 3 PRO lub podobna. Pełna lista drukarek kompatybilnych z OctoPi jest tutaj:
https://github.com/OctoPrint/OctoPrint/wiki/Supported-Printers
Jak widać bardzo dużo drukarek jest wspieranych więc są duże szanse, że nasza też będzie.
Raspberry Pi Zero W (to dla wersji bez kamerki, dla wersji z kamerką niezbędna będzie mocniejsza wersja Raspberry):


Zasilacz 5V dla Raspberry (wymagana wydajność prądowa zależy od tego jakie Raspberry użyjemy, polecam to sprawdzić w sieci):


Karta microSD (minimum 8GB) dla Raspberry (ale jakby się uprzeć to można nawet użyć tej co jest z Enderem 3 w zestawie):

Przewód do zasilania Raspberry, czyli micro-USB:


Pierwsza część podłączenia Raspberry do drukarki, czyli przejściówka micro-USB do USB żeńskiego złącza (przewód USB OTG):


Druga część podłączenia Raspberry do drukarki, czyli zwykły przewód mini-USB:



Opcjonalnie - przejściówka miniHDMI na HDMI. Przyda się tylko jeśli chcemy podłączyć monitor/telewizor do Raspberry by podejrzeć co się na nim dzieje. Nie będzie to dla nas konieczne gdyż konfiguracje zrealizujemy najpierw na samej karcie microSD a potem już przez sieć:



Przygotowujemy kartę microSD dla Raspberry
OctoPi pobieramy stąd:
https://octoprint.org/download/
Na stronie znajduje się ostrzeżenie, że OctoPi może działać wolno na Raspberry PI Zero W w połączeniu np. z streamem video z wydruku, ale ja streamu video dodawać nie zamierzam więc nie ma problemu.

Wersja którą użyłem (i aktualna na czas pisania artykułu) to 0.17.0. Zajmuje ona 600MB i ściągnęła mi się w kilka minut:

Pobieramy też narzędzie Etcher, które będzie nam służyć do nagrania systemu operacyjnego OctoPi na kartę microSD:
https://www.balena.io/etcher/
Ja wybrałem wersję Portable, by nie musieć nic instalować:

Szykujemy naszą kartę microSD i podłączamy ją do komputera poprzez odpowiedni adapter (no, chyba że mamy slot na mikro SD, wtedy bez). Ja użyłem adaptera który był w zestawie mojej drukarki Ender 3 Pro:



Nasz komputer powinien wykryć to, że podłączyliśmy kartę microSD. Teraz możemy uruchomić program Etcher. Jego interfejs jest naprawdę minimalistyczny i prosty:

Klikamy 'Select Image' by wybrać ściągnięty wcześniej obraz systemu operacyjnego:

Następnie klikamy 'Select drive' by wybrać naszą kartę microSD. Program Etcher pokazuje nam też wtedy dysku twarde podłączone na USB do komputera, więc musimy być ostrożni. Wybranie nie tego nośnika co trzeba może skutkować utratą danych!

I wreszcie - klikamy Flash.

Możliwe, że wtedy system Windows zapyta nas o uprawnienia lub pozwolenie na operacje. Oczywiście mu go udzielamy.
Czekamy na zakończenie operacji:

Całość trwała w moim przypadku jakieś 10 minut. Po wgraniu dostałem powiadomienie od Windows:

I sam Etcher pokazał, że skończył pracę:

Ale to nie wszystko - nie wyjmujemy jeszcze karty.
Po wgraniu systemu otwieramy 'Mój Komputer' a potem kartę microSD by zobaczyć dopiero co nagrane pliki systemu:

Znajdujemy tam plik tekstowy octopi-wpa-supplicant.txt. W nim znajduje się konfiguracja WiFi i tam musimy podać informacje o naszej sieci bezprzewodowej. Bez tego Raspberry nie będzie wiedziało z czym się połączyć.
Otwieramy go w jakimś normalnym edytorze tekstu (Notepad++, itp, nie w Wordpadzie czy tam w Wordzie):

I w nim musimy podać SSID (nazwę) i hasło naszej sieci. Poniżej cała treść pliku, odpowiednie pola uzupełniamy. Tak, WPA/WPA2 jest wspierane.
Quote:
# Use this file to configure your wifi connection(s).
#
# Just uncomment the lines prefixed with a single # of the configuration
# that matches your wifi setup and fill in SSID and passphrase.
#
# You can configure multiple wifi connections by adding more 'network'
# blocks.
#
# See https://linux.die.net/man/5/wpa_supplicant.conf
# (or 'man -s 5 wpa_supplicant.conf') for advanced options going beyond
# the examples provided below (e.g. various WPA Enterprise setups).
#
# !!!!! HEADS-UP WINDOWS USERS !!!!!
#
# Do not use Wordpad for editing this file, it will mangle it and your
# configuration won't work. Use a proper text editor instead.
# Recommended: Notepad++, VSCode, Atom, SublimeText.
#
# !!!!! HEADS-UP MACOSX USERS !!!!!
#
# If you use Textedit to edit this file make sure to use "plain text format"
# and "disable smart quotes" in "Textedit > Preferences", otherwise Textedit
# will use none-compatible characters and your network configuration won't
# work!
## WPA/WPA2 secured
network={
ssid="MOJE_SSID"
psk="MOJE_HASŁO"
scan_ssid=1
}
## Open/unsecured
#network={
# ssid="put SSID here"
# key_mgmt=NONE
#}
## WEP "secured"
##
## WEP can be cracked within minutes. If your network is still relying on this
## encryption scheme you should seriously consider to update your network ASAP.
#network={
# ssid="put SSID here"
# key_mgmt=NONE
# wep_key0="put password here"
# wep_tx_keyidx=0
#}
# Uncomment the country your Pi is in to activate Wifi in RaspberryPi 3 B+ and above
# For full list see: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
country=PL
#country=GB # United Kingdom
#country=CA # Canada
#country=DE # Germany
#country=FR # France
#country=US # United States
### You should not have to change the lines below #####################
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
Zapisujemy zmiany w pliku, zamykamy go i wyciągamy kartę microSD.
Teraz pora włożyć ją do Raspberry, ale o tym w następnym akapicie.
Podłączamy Raspberry do Endera i uruchamiamy
Teraz możemy już wszystko popodłączać. Kartę microSD wsadzamy delikatnie do slotu. Zasilacz 5V podłączamy do PWR-IN od Raspberry, natomiast przejściówkę USB OTG do złącza podpisanego USB.
Opcjonalnie możemy podłączyć przejściówkę mini-HDMI na zwykłe HDMI (jeśli chcemy podejrzeć na monitorze jak Raspberry się uruchamia).
Poniżej wszystkie połączenia na wyraźnym zdjęciu:

Pozostało podłączyć to do zasilania i drukarki 3D i hardware gotowe. Zapalić się powinna wtedy dioda LED znajdująca się na Raspberry. Musimy jeszcze poczekać trochę (do kilku minut) aż system się uruchomi i sam automatycznie połączy ze wskazanym przez nas WiFi.
Od tego momentu OctoPi powinien być dostępny w sieci lokalnej pod adresem:
http://octopi.local
Ale jeśli ten adres nie działa, to musimy się do niego dostać po samym adresie IP - poniżej opiszę jak ten IP uzyskać.
Sprawdzamy IP OctoPrint - sposób 1
Pierwszym sposobem na poznanie adresu IP naszego serwerka OctoPrint jest podłączenie monitora do Raspberry PI. Monitor podłączamy poprzez HDMI. Gdy uruchomimy 'Malinkę' z podłączonym monitorem to zobaczymy na ekranie informacje o bootowaniu systemu a potem też i adres IP przydzielony mu poprzez router.
Samo pierwsze uruchomienie Raspberry troszkę trwa, system tez wtedy dokonuje dodatkowych operacji, jakiegoś skanowania itp, szczegóły na zdjęciach poniżej:



Dopiero po jakimś czasie na ekranie pojawia się IP (tutaj: 192.168.0.103):

Ten adres po następnym uruchomieniu może być inny (jest przyznawany przez DHCP routera), więc nie musicie go zapamiętywać.
Sprawdzamy IP OctoPrint - sposób 2
Drugim sposobem na poznanie adresu IP naszego serwerka OctoPrint jest użycie skanera adresów IP sieci lokalnej. Adres IP OctoPI będzie się rzucać w oczy ze względu na jego nazwę hostu octopi.local.
Potrzebny nam będzie jakiś skaner IP - oczywiście do pobrania za darmo. Ja wybrałem Angry IP Scanner stąd:
https://angryip.org/download/
Samo użycie skanera IP jest bardzo proste. Po instalacji i uruchomieniu wpisujemy zakres IP jaki chcemy sprawdzić:

To jaki zakres wpiszemy zależy od tego jakie IP pokrywa nasza sieć lokalna, ja wpisałem od 192.168.0.0 do 192.168.0.255:

Klikamy 'Start' i po chwili widzimy już aktywne IP w sieci:

Gotowe. Tak znaleźliśmy IP naszego Raspberry - to te IP które ma nazwę hosta octopi.local. Dla wygodniejszego odczytu wyników z Angry IP Scanner możemy też kliknąć ikonkę trybiku (ustawienia) i w zakładce 'Display' wybrać tam opcję 'Alive hosts (responding to pings) only'
Finalizujemy instalację OctoPrint
Instalacje OctoPrint finalizujemy już przez przeglądarkę WWW z dowolnego urządzenia znajdującego się w tej sieci w której jest nasze Raspberry. Po prostu wpisujemy
http://octopi.local
w pasku adresu i po chwili powinna nam załadować się strona konfiguracyjna. Jeśli to nie działa, to musimy wpisać tam po prostu adres IP (dwa sposoby na poznanie adresu IP naszego Raspberry opisałem w poprzednich akapitach).

Postępujemy wedle instrukcji z ekranu i klikamy 'Next'. Możemy dalej skonfigurować hasło dla OctoPrint, ja je zostawiłem puste, gdyż nie zamierzam udostępniać Raspberry w Internecie a do mojej sieci WiFi mają dostęp tylko domownicy.

Potwierdzamy naszą decyzję:

Następnie instalator pyta o formalności co do zbierania danych - możemy im odmówić tej przyjemności.

Dalej instalator pozwala nam skonfigurować sposób sprawdzania czy nasz serwer jest podłączony do Internetu. Ustawienia ze zrzutu ekranu są domyślne i też moim zdaniem odpowiednie dla nas. Adres IP 8.8.8.8 ze zrzutu ekranu to jeden z adresów Google, często używany do takich zastosowań.

W kolejnym kroku możemy włączyć lub wyłączyć czarną listę pluginów, służy ona do tego by zablokować wtyczki które mogą mieć niepożądane działanie, zwłaszcza dla początkujących użytkowników. Ja tego nie włączyłem:

Teraz możemy skonfigurować naszą drukarkę. Najpierw ustawiamy jej nazwę.

Tutaj ustawiamy parametry o naszej drukarce 3D. Warto sprawdzić je w internecie. Dla mojego Ender 3 rozmiar pola roboczego wpisałem jako 220mm na 220mm na 220mm.

Dalej możemy ustawić również szybkość poruszania się każdej z osi, nie jest to jednak aż takie istotne ponieważ i tak te ustawienia końcowo OctoPi będzie brać nie stąd, lecz z plików GCode.

Na koniec otrzymujemy informacyjny ekran gdzie możemy kliknąć 'Finish' by sfinalizować konfigurację:

Ale to jeszcze nie wszystko - musimy jeszcze sprawdzić połączenie UART z naszą drukarką, o tym w następnym akapicie.
Łączymy się z drukarką poprzez OctoPrint
Już wszystko prawie gotowe. Odświeżamy stronę i naszym oczom powinien ukazać się standardowy ekran OctoPi:

Tutaj chciałoby się kliknąć wielki przycisk 'Connect', by automatycznie połączyć się z naszą drukarką. Niestety w moim przypadku to nie działa. Gdy kliknę 'Connect', to Raspberry przez chwilkę skanuje porty ale nic nie znajduje. Chociaż o dziwo wentylator Endera wtedy się odzywa, tak jakby coś odbierał.
Zrzut ekranu poniżej pokazuje co się dzieje gdy kliknę 'Connect':

Jak widać, trwa skan, ale po chwili następuje niepowodzenie wyszukania drukarki ("Error connecting to printer"):

Zgodnie z powyższym komunikatem więcej informacji jest w zakładce Terminal:

Rozwiązaniem tego problemu u mnie okazało się wybranie bezpośrednio odpowiedniego portu na którym mamy drukarkę:

U mnie, na Raspberry PI Zero W, ten port nazywa się /dev/ttyUSB0. Jeśli nie mamy tego portu, to trzeba przejść do ustawień (Settings), tutaj:

I dopisać tam w 'Additional serial ports' następujące nazwy portów:

Nazwy portów:
/dev/ttyUSB*
/dev/ttyACM0
/dev/ttyACM*
/dev/ttyAMA*
Oczywiście potem trzeba kliknąć 'Save' by zapisać i w razie czego restart Raspberry jest wskazany.
Zatem na głównej stronie wybieramy port '/dev/ttyUSB0' (ale w Waszym przypadku może być to inny - zależy od użytego Raspberry i podłączenia) i wtedy po kliknięciu 'Connect' powinniśmy otrzymać poprawne połączenie:

Jak widać, stan połączenia zmienił się na 'Operational', czyli wszystko gra.
Po poprawnym podłączeniu możemy sobie zdalnie posterować drukarką poprzez zakładkę 'Control'. Pozwoli to nam sprawdzić czy na pewno całość działa:

Naciskanie przycisków w tej zakładce na żywo przesuwa osie na drukarce 3D. Jeśli one nie działają (drukarka na nie nie reaguje) to znaczy, że coś źle skonfigurowaliśmy.
W sąsiedniej zakładce 'Temperature' możemy kontrolować grzanie bed i hot end drukarki. Jest to wygodne, bo możemy rozgrzać drukarkę jeszcze zanim wyeksportujemy GCode naszego obiektu który chcemy wydrukować:

Temperaturę możemy wpisać ręcznie lub wybrać z rozwijanej listy:

Tutaj dostępne są temperatury:
- dla filamentu PLA - bed 60, tool 180
- dla filamentu ABS - bed 100, tool 210
Co ciekawe te temperatury są inne niż te które ja mam domyślnie w programie slicer który używam (Cura). W nim dla PLA mam temperaturę bed 60 ale tool 200.
Ostateczny wybór temperatury jednak powinien być dokonany przez nas w zależności od tego jakiego konkretnego filamentu używamy i jak nam się lepiej drukuje - opinie są różne. Polecam dobrać eksperymentalnie.
Po wyborze temperatury na wykresie ładnie widać jak drukarka się nagrzewa:

Chwilkę potem jest już gotowa do drukowania.
Przygotowanie GCode do wydruku
Plik .gcode dla drukarki przygotowujemy w standardowy sposób, tak jak robiliśmy wcześniej kiedy trzeba było ręcznie przerzucać całość na kartę microSD. Ja do tego używam programu Ultimaker Cura.
Otwieram w nim .STL i generuje dla niego .gcode klikając przycisk Slice:

Po wygenerowaniu .gcode zapisuję go na dysk za pomocą przycisku 'Save to File':

Warto zapamiętać gdzie na dysku zapisaliśmy .gcode, bo zaraz będziemy je wysyłać przez przegladarkę do Raspberry.

Drukujemy przez WiFi
Mamy już wszystko poprawnie skonfigurowane oraz mamy już model wyeksportowany do formatu .gcode. Teraz możemy go przesłać do drukarki, dzięki WiFi całość można zrobić bez wstawania od komputera.
Na stronie OctoPrint mamy listę wrzuconych plików .gcode:

Możemy tam dodać kolejny za pomocą przycisku 'Upload' albo po prostu przeciągnąć go na stronę WWW z eksploratora Windows (metoda drag and drop - też działa):

Po dodaniu go tam klikamy przycisk 'Load', by załadować gcode do pamięci:

Wtedy powyżej powinny się pojawić informacje o naszym gcode, przewidywany czas wydruku, itp:

I w zasadzie można już rozpocząć wydruk - kliknąć 'Print'.
Po kliknięciu 'Print' jednak możliwe jest, że nawet już wcześniej nagrzana drukarka od razu nie ruszy. Obrazek poniżej wyjaśnia dlaczego:

Jak widać, drukarka dodatkowo się nagrzewa. Bierze się stąd, że ostatecznie użyte są temperatury ustawione w pliku gcode (ustawienia ze slicera), a nie te z OctoPrint. Należy o tym pamiętać.
W GCode Viewer możemy podejrzeć plan wydruku i zweryfikować czy wszystko jest okej i czy drukujemy to co chcemy:

Po nagrzaniu nasz obiekt powinien się już drukować. W zakładce Terminal można podejrzeć komunikację po UART między drukarką a Raspberry, ale ogólnie to odradzam zabawy w panelu WWW w trakcie wydruku gdyż każde opóźnienie Raspberry może skutkować lekkim zakłóceniem druku.

I to tyle - po odpowiednim czasie powinniśmy mieć gotowy wydruk:

(Tak, wiem, na powyższym zdjęciu moja magnetyczna podkładka od Endera 3 jest w bardzo złym stanie, ale wciąż czekam na nową i paczka się opóźnia jeszcze przez tego koronawirusa...)
Końcowe uwagi, wskazówki
Tutaj dam luzem kilka ważnych uwag co do Raspberry PI i OctoPi. Niektóre wystąpiły w tekście, ale warto je powtórzyć.
- OctoPI da się używać nawet z Raspberry PI Zero W ale najlepiej bez kamerki WWW, w przeciwnym razie te słabe Raspberry nie daje rady i komunikacja szeregowa z drukarką jest za wolna co tworzy artefakty wydruku
- OctoPI może uruchamiać się dość wolno, nawet w czasie wstawania może dawać komunikaty że jest coś nie tak (strona WWW z informacją o błędzie), ale u mnie zawsze poczekanie minutę dłużej wszystko rozwiązywało
- OctoPI bierze ustawienia temperatury z pliku .gcode, ustawianie temperatury przez panel WWW nam dużo nie da, bo potem te wartości i tak zostaną nadpisane przez te z .gcode
- OctoPI samo nie chciało wykryć mojej drukarki na ustawieniu Auto, trzeba było wybrać ręcznie port szeregowy
- w bieżącej konfiguracji możliwe jest że ekran LCD od Endera 3 będzie zasilany przez 5V od USB od Raspberry PI (będzie lekko się świecić mimo wyłączenia drukarki); jest to raczej niepożądane ale można to łatwo naprawić po prostu odcinając linię 5V od połączenia, np. zaklejając pin odpowiedzialny za 5V taśmą we wtyczce od USB
Podsumowanie
Pokazałem tutaj jak skonfigurować OctoPi na Raspberry Pi Zero W do użycia z drukarką 3D Ender Pro, ale w zasadzie podobne kroki można zastosować dla innych Raspberry i drukarek.
Z tak skonfigurowanej drukarki 3D korzystam już od jakiegoś czasu i nie odczułem żadnych problemów, artefaktów lub pogorszenia jakości wydruku, ale mimo to podkreślam, że jeśli chcecie dodatkowo podpiąć kamerę WWW to powinniście użyć mocniejszego Raspberry niż ja.
A samo podłączenie drukarki 3D do WiFi w ten sposób jak najbardziej polecam, bardzo usprawnia pracę i wygodę przerzucania plików. Aż szkoda, że nie zrobiłem tego wcześniej.
Cool? Ranking DIY