Banana PI M2 Zero – OctoPrint

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.

Banana Pi M2 Zero

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: https://github.com/mgx0/Banana-Pi-M2Z-Octoprint

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ó:

Banana Pi M2 Zero frame

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ó:

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: 

  1. “dmesg | tail” – itt a rendszer log-ok utolsó soraiból ki szokott derülni
  2. “sudo fdisk -l”
  3. “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!


Mirrored Einsy Case

Források

Python 3.7 fordítás:
https://websiteforstudents.com/installing-the-latest-python-3-7-on-ubuntu-16-04-18-04/

Kernel UART3 engedélyezés:
https://github.com/avafinger/bananapi-zero-ubuntu-base-minimal/issues/9

OctoPrint telepítése Raspbian-on (Ubuntu-n is használható):
https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspbian/2337

Hozzászólás küldése

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük