Tavaly írtam a Raspberry Pi Zero-ról egy cikket, amiben fanyalogtam a vacak teljesítménye miatt. Különösen azért voltam csalódott, mert amúgy nagyon praktikusnak találom azt a módszert, hogy külön táp, usb csatlakozás és külön doboz nélkül lehet egy „számítógépet” rápattintani az EinsyRambo board-ra. Nagyon tuti lenne ez, ha a teljesítmény legalább elégséges lenne.
Ezért próbáltam továbbra is ezen a Zero vonalon tovább kutakodni, mert egyébként a teljesítmény könnyen orvosolható lenne, ha Zero helyett, egy RPI3-at üzemelnék be a Prusa Mk3 esetében is.
Szerencsére létezik egy jópofa klónja a Raspberry PI Zero-nak, a Banana Pi M2 Zero. A fizikai méretei és GIPO kiosztása megegyezik, de az egymagos processzorral szemben a Banana négy magossal rendelkezik.
Elsőre nagyon kézenfekvő megoldásnak tűnt az alkalmazása, így próbáltam rákeresni, hogy mi módon használják ezt mások Prusa Mk3 esetében. Sajnos nem sok hivatkozást találtam, nagyjából csak ezt: github.com/mgx0/Banana-Pi-M2Z-Octoprint (törött link)
A linken letölthető egy STL fájl a távtartóhoz és egy image fájl előre telepített OctoPrint-tel. A wifi jelszó beállításához szükséges instrukciók le vannak írva, tulajdonképpen könnyen be tudtam üzemelni az új szerkezetet. A hardverben annyi eltérés van, hogy nincs integrálva az antenna, így azt külön kell csatlakoztatni hozzá. A tüskéket ugyanoda kell beforrasztani, de ebben segítségünkre lesz a távtartó:
Az örömöm mégsem volt felhőtlen. Elég régi az image és meggyűlt a bajom az OctoPrint pluginok telepítésével emiatt. Végül sikerült elérnem, amit akartam, de sem fel nem írtam, hogy mit csináltam, sem abban nem voltam biztos, hogy a legjobb megoldásokat választottam a célom eléréséhez. Használni tehát tudtam a Banana PI-t, de cikket nem mertem írni róla világos instrukciók nélkül.
Az igazi megoldás az, ha nulláról telepítjük fel az OctoPrint-et egy friss operációs rendszerre. Ez viszont meghaladja a Linux tudományomat, ezért Pápai Attila segítségét kértem, aki volt olyan szíves, hogy miközben feltelepítette magának a rendszert, egy részletes leírást is készített a folyamatról. A következőkben az Ő írása olvasható:
update 2021. 08. 27.:
Értesültem egy kész és folyamatosan frissülő imageről, így megkímélheted magad az alábbiaktól: github.com/ludiazv/octocitrico
Telepítés
Mire lesz szükségünk?
- Egy Linux gépre (lehet virtuális is)
- Egy kis Linux hozzáértésre
- Egy microSD kártyára, lehetőleg legalább 8GB-osra
- Amennyiben nem tudjuk a microSD-t bedeugni a gépünkbe akkor egy annak megfelelő SD adapterre vagy USB-s adapterre (nekem utóbbi működött csak VirtualBox-al)
Ezen a GitHub repository-t megtalálható friss Ubuntu rendszerből kiindulva fogjuk megépíteni a saját rendszerünket: https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal
Lépjünk be a Linux környezetünkbe (Én Ubuntu-t használtam), majd kövessük a lenti lépéseket.
Ubuntu rendszer írása SD kártyára
Klónozzuk saját gépünkre a repo-t amely tartalmazza az alap Ubuntu rendszert Banana PI-hez:
git clone https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal.git
Ez a művelet sokáig is eltarthat, mert nagy mennyiségű fájlokat kell letölteni hozzá.
Lépjünk be a letöltött fájlokhoz:
cd bananapi-zero-ubuntu-base-minimal
Találjuk ki, hogy hol érhető el az SD kártyánk a /dev mappa alatt. Ehhez több megoldás is létezik, pl:
- “dmesg | tail” – itt a rendszer log-ok utolsó soraiból ki szokott derülni
- “sudo fdisk -l”
- “blkid”
Nálam a /dev/sdc alatt található, így a továbbiakban erre fogok hivatkozni.
Formázzuk meg az SD kártyát:
sudo ./format_sd_mainline.sh /dev/sdc
Rakjuk össze a darabolt kernel image-t egy fájlba. Nálam a letöltés után a 4.17 volt elérhető a repo-ban.
cat rootfs_kernel_4.17.y.tar.gz.* > rootfs_kernel_4.17.y.tar.gz
Írjuk ki az Ubuntu rendszert az SD kártyára:
sudo ./flash_sdcard_m2z_v2.sh /dev/sdc
Miután ez elkészült, válasszuk le a kártyát a gépről, húzzuk ki majd dugjuk vissza. Ekkor két új USB meghajtó fog megjelenni: boot és rootfs névvel.
Navigáljunk el a rootfs meghajtó mappájába. Az, hogy ez hová kerül pontosan, Linux rendszer függő. Továbbiakban erre az útvonalra <rootfs>-ként fogok hivatkozni.
Most állítsuk be előre a WiFi-t, hogy ha elindítjuk a Banana Pi-t akkor egyből legyen SSH hozzáférésünk:
sudo nano <rootfs>/etc/network/interfaces
Írjuk át a “wpa-ssid” meg “wpa-psk” értékeket majd mentsük el a fájlt.
Válasszuk le az SD-t a gépről, dugjuk be a Pi-be majd adjunk neki áramot.
Csatlakozás és rendszer frissítés
ssh-val csatlakozzunk a gépre ubuntu/ubuntu felhasználóval. Egy pár percen belül látnunk kell az eszközt a routerünk-ön, mellette az IP címével. Használjuk ezt az ssh csatlakozáskor:
ssh ubuntu@<ip-cim>
Ha nem látjuk az eszközt a hálózaton akkor valószínűleg rosszul adtuk meg a WiFi beállításokat.
Ha sikerült belépnünk, akkor frissítsünk pár rendszer csomagot egyből:
sudo apt update sudo apt install --reinstall coreutils sudo apt install --reinstall systemd
Majd indítsuk újra a gépet ha végzett:
sudo reboot
Frissítsünk minden csomagot a rendszerben (ez elég sokáig el fog tartani):
sudo apt update && sudo apt upgrade
Python 3.7 telepítés
A rendszeren alapból Python 3.5 van, OctoPrint-nek 3.6 vagy 3.7 kell, szóval telepítsük a legfrissebb 3.7 verziót. Ez a mai napon 3.7.7, itt lehet ellenőrizni: https://www.python.org/downloads/
Az új Python-t két féle módon is lehet telepíteni: forráskódból fordítva vagy egy harmadik fél által karbantartott PPA-n keresztül telepítve. Az első és nehezebb verziót választjuk mert így biztos azt kapjuk amit magunknak fordítunk.
Telepítsünk pár szükséges eszközt a fordításhoz:
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget nano
Töltsük le a forráskódokat majd tömörítsük ki:
cd /tmp wget https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz tar -xf Python-3.7.7.tar.xz cd Python-3.7.2
Konfigurálás majd fordítás (nagyon sokáig tart):
./configure --enable-optimizations make -j 1 sudo make altinstall
Ha sikeresen lefordítottuk és telepítettük a Python 3.7-et akkor ellenőrizzük az alábbi teszttel:
python3.7 --version
Ki kell írja, hogy “Python 3.7.7”
UART3 engedélyezése
Ha rádugjuk a Banana PI-t az Einsy lapra akkor azt a Banana PI UART3 portján keresztül csatlakoztatjuk. Ez alapból le van tiltva a Kernel-ben, tehát engedélyeznünk kell:
cd /boot sudo apt install device-tree-compiler ll bpi-m2-zero.dtb
// ez utóbbi parancs megmondja, hogy a bpi-m2-zero.dtb fájl valójában hova mutat, ugyanis a következő lépésben ezt a fájlt kell módosítani
sudo dtc -I dtb -O dts -o m2z.dts bpi-m2-zero-v1.dtb_4.17.4.m2z sudo nano m2z.dts
nano szerkesztőben keressük meg a serial@1c28c00 alatti beállításokat. Itt látnunk kell egy “status = disabled” sort. Ezt kell átírni “status = okay” -ra. Ha ez kész, mentsük el a fájlt.
Ezen leírás alján megtalálható az a GitHub link, ahol ez a módosítás konkrétabban is le van írva.
Most írjuk vissza a megfelelő rendszer fájlokat a gépre majd állítsuk le a gépet:
sudo dtc -I dts -O dtb -o bpi-m2-zero-v1.dtb_4.17.4.m2z m2z.dts sync && sudo shutdown -h now
Érdemes a tápot is kihúzni majd úgy újraindítani a gépet.
OctoPrint telepítése
Szükségünk lesz két extra csomagra:
sudo apt install python3-virtualenv libyaml-dev
Csináljunk az OctoPrint-nek egy mappát és hozzuk létre a Python virtuális környezetet neki:
mkdir OctoPrint && cd OctoPrint python3.7 -m venv venv source venv/bin/activate pip3.7 install pip --upgrade
Telepítsük fel az OctoPrint-et:
pip3.7 install --default-timeout=100 octoprint
Adjunk hozzáférést a soros és terminál eszközökhöz az ubuntu felhasználónak (ezzel fog elindulni az OctoPrint is):
sudo usermod -a -G tty ubuntu sudo usermod -a -G dialout ubuntu
Próbáljuk ki, hogy elindul-e az Octoprint:
~/OctoPrint/venv/bin/octoprint serve
Kell egy pár perc mire elindul… Ha elindult, állítsuk le (CTRL+C).
…
Automatikus indítás és leállítás (a rendszerrel együtt) szkriptek telepítése:
wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.init && sudo mv octoprint.init /etc/init.d/octoprint
Automatikus futtatáshoz pár dolgot még be kell állítanunk::
sudo nano /etc/default/octoprint
OCTOPRINT_USER=ubuntu BASEDIR=/home/ubuntu/OctoPrint CONFIGFILE=/home/ubuntu/OctoPrint/config.yaml DAEMON=/home/ubuntu/OctoPrint/venv/bin/octoprint
sudo update-rc.d octoprint defaults
Most már háttérben futó szolgáltatásként el kell tudjuk indítani az OctoPrint-et:
sudo service octoprint start
Ezzel a paranccsal pedig meg tudjuk nézni az OctoPrint kimeneteit:
tail -F ~/OctoPrint/logs/octoprint.log
Ezzel meg is volnánk! Próbáljuk ki, hogy ha újraindítjuk a rendszert akkor utána elindul-e az OctoPrint magától (pár perc kell neki).
OctoPrint plugin-ek telepítése
Pár pluginhez további rendszer csomagokat kell telepíteni. Ezek olykor nagyon sokáig tartanak és rengeteg memóriára van szükség hozzá. Az 512 MB nagyon hamar el tud fogyni és ekkor összeomlik a rendszer.
Így tehát ha ezt tapasztaljuk, hogy kevés a memória az egyes csomagok telepítéséhez (vagy egyébként bármihez) akkor érdemes swap-et csinálni:
Ehhez könnyen követhető leírás itt található: https://github.com/jneilliii/OctoPrint-BedLevelVisualizer/issues/141#issuecomment-542227338
Ha ezt beállítottuk, próbálkozzunk újra a csomagok telepítésével!
Források
Python 3.7 fordítás:
websiteforstudents.com/installing-the-latest-python-3-7-on-ubuntu-16-04-18-04/
Kernel UART3 engedélyezés:
github.com/avafinger/bananapi-zero-ubuntu-base-minimal/issues/9
OctoPrint telepítése Raspbian-on (Ubuntu-n is használható):
community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspbian/2337
Azóta van már RASPBERRY PI ZERO 2 W
ami már 4 magos és állítólag elég jól megy rajta a klipper.
Az más kérdés, hogy csak itt-ott kapható. Hiánycikk mint a raspberry -k általában.
Valóban teljesen jól megy 2-es PI Zeron a Klipper. Valójában a Klipper a sima PI Zeron is működött, a fenti lapot végül a Voron Legacy-n használtam és a legbosszantóbb csak az volt, hogy elsőre nem mindig bootolt be, de ha elindult akkor teljesen jó volt.