Vielen Dank an folgende Sponsoren für dieses Video:
ACHTUNG
Das BTT Pi 1.2 (wie auch der BTT CB1) laufen nicht mit dem Raspberry Pi Image!
Es muss ein Image von BTT genutzt werden das an den SBC angepasst ist.
CB1_Debian11_minimal_kernel5.16_20230712.img.xz
). In dem größeren Image ( CB1_Debian11_Klipper_kernel5.16_202300712.img.xz
) ist u.A. noch ein Grafiktreiber für den SBC integriert. Klipper läuft mit beiden Images problemlos. system.cfg
mit einem Texteditor öffnen# wifi name WIFI_SSID="WLAN_SSID" # wifi password WIFI_PASSWD="WLAN_PASSWORT"
system.cfg
eingetragen: hostname=“BTT-PI12”
sudo apt update && sudo apt upgrade -y && sudo apt install -y git silversearcher-ag wavemon hexedit sudoku tcpdump iptraf mc htop dcfldd nano usbutils ranger tldr ncdu can-utils multitail fd-find && mkdir -p ~/.local/share && tldr -u
sudo apt autoremove alsa* modem* cups* pulse* avahi*
ip a
Wer den BTT Pi mit einem ADXL345 Sensor für Input Shaper ausstatten möchte, sollte den Linux Prozess noch einrichten. Der Sorgt dafür, das die GPIO Pins vom BTT Pi aus Klipper Sicht genutzt werden können und ermöglicht eben den Betrieb von extra Sensoren wie dem ADXL345.
cd ~/klipper/
sudo cp ./scripts/klipper-mcu.service /etc/systemd/system/
sudo systemctl enable klipper-mcu.service
make menuconfig
sudo service klipper stop
make flash -j4
sudo service klipper start
Um Klipper vorübergehend in Betrieb zu nehmen, kann man folgende Mini Konfiguration verwenden:
[include mainsail.cfg] [mcu] serial : /tmp/klipper_host_mcu #[mcu Board] #serial : /dev/serial/by-id/usb-Klipper_stm32f407xx_2B0035001147393437303337-if00 [printer] kinematics: none max_velocity: 1000 max_accel: 1000
Mit dieser Konfig kann der Drucker natürlich rein gar nichts. Aber man wird erstmal alle Fehlermeldungen in MainSail los.
Controller : STM32G0B1
Die folgenden Schritte sind nur notwendig, wenn man das CAN Modul besitzt und einsetzen möchte.
Bei mir war die aufgespielte Firmware komplett nutzlos. Weder das Gerät ließ sich in Linux finden, noch konnte ich den CAN Bus aktivieren. Das Problem haben wohl auch andere → https://github.com/bigtreetech/BTT-Pi/issues/11 Ich würde also als erstes die Firmware aktualisieren
sudo apt install cmake gcc-arm-none-eabi -y
cd ~
git clone --depth=1 -b stm32g0_support https://github.com/bigtreetech/candleLight_fw
cd ~/candleLight_fw
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/gcc-arm-none-eabi-8-2019-q3-update.cmake
make budgetcan_fw
sudo dmesg -Wtd
eingeben und sollte in etwa so eine Ausgabe bekommen: [< 0.000000>] usb 6-1: new full-speed USB device number 2 using ohci-platform [< 0.235034>] usb 6-1: New USB device found, idVendor=0483, idProduct=df11, bcdDevice= 2.00 [< 0.000047>] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [< 0.000021>] usb 6-1: Product: DFU in FS Mode [< 0.000015>] usb 6-1: Manufacturer: STMicroelectronics [< 0.000015>] usb 6-1: SerialNumber: 2056384F464D
dfu-util -l
. Wenn das Found DFU: [0483:df11] …
meldet passt auch alles.
Damit der Adapter im Betriebsystem auch erkannt wird muss eine Netzwerk Interface Konfiguration (/etc/network/interfaces.d/can0
) angelegt werden. Es ist möglich das die Datei schon im BTT Image eingepflegt ist …
sudo nano /etc/network/interfaces.d/can0
auto can0 iface can0 can static bitrate 1000000 up ifconfig $IFACE txqueuelen 1024
sudo reboot
ip a
ein CAN Interface listen : can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 1024 link/can
sudo systemctl stop klipper.service
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
sudo systemctl start klipper.service
Am HDMI Anschluss sollte nach dem Start sofort eine Ausgabe erfolgen. TBD: Prüfen was wenn mit SPI Monitor! Anpassungen kann man an zwei Stellen vornehmen:
sudo nano /boot/BoardEnv.txt
## Specify HDMI output resolution (eg. extraargs=video=HDMI-A-1:800x480-24@60) #extraargs=video=HDMI-A-1:1024x600-24@60
Hier in der zweiten Zeile die # entfernen und die Auflösung anpassen
sudo nano /boot/system.cfg
########################################### # HDMI klipperScreen rotation # ks_angle: Rotation angle # normal: 0; inverted: 180; # left: 90 to left; right: 90 to right; #ks_angle="normal"
Hiermit kann die grafische Ausgabe auf dem HDMI Port gedreht werden.
Die Textkonsole bleibt davon leider unberührt
sudo nano /boot/BoardEnv.txt
tft35_spi
hinzufügen → Bsp: overlays=tft35_spi ir
ADXL345 pin | Function | Pi 1.2 Pin | Pi 1.2 GPIO |
---|---|---|---|
3V3 (or VCC) | Power | 3,3V | 3.3V DC power |
GND | GND | GND | GND |
CS | Chip Select | PC3 | (3-1)*32 + 3 = gpio67 |
SDO | MISO | PC4 | (3-1)*32 + 4 = gpio68 |
SDA | MOSI | PC2 | (3-1)*32 + 2 = gpio66 |
SCL | Clock | PC0 | (3-1)*32 + 0 = gpio64 |
Das Modul verwendet spidev0_0
als SPI Bus. Für die Konfig ist folgendes notwendig:
sudo nano /boot/BoardEnv.txt
spidev0_0
hinzufügen → Bsp: overlays=spidev0_0 ir
[adxl345] cs_pin: BTTPI:gpio67 spi_bus: spidev0.0 [resonance_tester] accel_chip: adxl345 probe_points: 60, 60, 20 # an example
Pi 1.2 Pin | Function | Pi 1.2 GPIO | Wird genutzt von … |
---|---|---|---|
PC3 | CS spidev0_0 | (3-1)*32 + 3 = gpio67 | spidev0_0 ADXL345 |
PC4 | SPI0 MISO | (3-1)*32 + 4 = gpio68 | |
PC2 | SPI0 MOSI | (3-1)*32 + 2 = gpio66 | |
PC0 | SPI0 Clock | (3-1)*32 + 0 = gpio64 | |
PH6 | SPI1 CLK | GPIO230 | |
PH7 | SPI1 MOSI | GPIO231 | |
PH8 | SPI1 MISO | GPIO232 | |
PC11 | CS of spidev1_0 | GPIO75 | spidev1.0 MCP2515 |
PC7 | CS of spidev1_1 | GPIO71 | spidev1.1 TFT |
PC13 | CS of spidev1_2 | GPIO77 | spidev1.2 frei |
Hinweis 1
Die Default CS Pins können nicht in Klipper genutzt werden. Da kommt ein Fehler “Unable to open out GPIO chip line”
Hinweis 2
Für Klipper einen freien GPIO verwenden und den als CS Pin nutzen (Beispiel gpio74)
sudo nano /boot/BoardEnv.txt
spidev1_1
hinzufügen → Bsp: overlays=spidev1_1 ir
[adxl345] cs_pin: BTTPI:gpio74 spi_bus: spidev1.1 [resonance_tester] accel_chip: adxl345 probe_points: 60, 60, 20 # an example
/dev
auftauchen ´nach einem Reboot/boot/BoardEnv.txt
eingetragen : overlays=spidev1_1 ir
/dev
vorhanden ist kann man in der MainSail Konsole den Input Shaper Sensor abfragen mit ACCELEROMETER_QUERY
Die GPIO Pins vom BTT Pi können von Klipper angesteuert werden. Man muss nur mit der Pin Bezeichnung aufpassen …
Um die GPIO Pins in Klipper nutzen zu können muss ggf. umgerechnet werden. Die Pins sind im Normalfall nach dem Schema PxNN benannt. x kann dabei von A..G gehen und NN ist eine Zahl. Das nutzt aber in Klipper nichts, weil dort die richtigen GPIO Nummern angegeben werden müssen. Dafür gibt es folgende Rechnung:
In der Klipper Konfig trägt man an der Stelle für den Pin dann gpio79 und nicht PC15 ein.
Auf dem BTT Pi 1.2 Board ist ein extra Lüfter Anschluss mit Mosfet. Um diesen Lüfter zu nutzen kann man folgende Konfig verwenden:
[fan_generic GenFan] pin : BTTPI:gpio211 # Hier ggf. den Host anpassen -> Name der Linux MCU max_power : 1.0 #shutdown_speed: cycle_time : 0.010 hardware_pwm : false kick_start_time: 1.100
Einen einfachen Ausgang zum Schalten von was auch immer kann man so realisieren:
[output_pin OutPin] pin : gpio79 pwm : false value : 0
ACHTUNG
Hier darf nicht einfach irgendeine Last angeschlossen werden. Die GPIO Pins können nämlich kaum Strom abgeben. Als im Zweifel mit einem Mosfet arbeiten oder jemanden fragen der sich damit auskennt
III. How can I enable ws2812 RGB lightning and which Pins are used for that?
Only PC14 can be used for ws2812 and if you can modify the dts, you can modify the dts to any io
Please check the attachment 4 for your reference.
Ab Kernel 4.x gibt es einen IR Treiber im Kernel. Sowas wie Lirc ist also nicht mehr wirklich vonnöten.
sudo su -
und dann das Protokoll hinzufügt echo nec > /sys/class/rc/rc0/protocols
. Danach sollte es auch mit eckigen Klammern versehen sein sudo crontab -e
@reboot echo nec > /sys/class/rc/rc0/protocols
cat /dev/input/event0
sudo pip3 install evdev –target /usr/lib/python3/dist-packages
sudo apt install thonny
from evdev import InputDevice dev = InputDevice('/dev/input/event0') for event in dev.read_loop(): print(event)
Root FS umhängen
setenv bootargs “root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} consoleblank=0 loglevel=7 ubootpart=${partuuid} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}”
boot.cmd anpassen …
bootlogo=true overlay_prefix=sun50i-h616 ## 'sun50i-h616-biqu-sd' for CB1, 'sun50i-h616-biqu-emmc' for CB1 eMMC version fdtfile=sun50i-h616-biqu-sd ## default 'display' for debug, 'serial' for /dev/ttyS0 console=display ## Specify HDMI output resolution (eg. extraargs=video=HDMI-A-1:800x480-24@60) #extraargs=video=HDMI-A-1:1024x600-24@60 ## uncomment for ws2812 #overlays=ws2812 ## uncomment for i2c-gpio, pwm3, disable uart0 for pwm3 #overlays=light overlays=spi-spidev param_spidev_spi_bus=1 param_spidev_spi_cs=1 param_spidev_max_freq=1000000 ## uncomment for TFT35_SPI screen #overlays=tft35_spi ## uncomment MCP2515 spi to canbus module #overlays=mcp2515 ## Chipselect Lines ! ## uncomment overlays=spidev1_2 to release 'spidev1.2' to user space (For example: adxl345), ## spidev1.0 is used by MCP2515, ## spidev1.1 is used by tft35_spi. ## uncomment to release 'spidev0.0' to user space #overlays=spidev0_0 ## uncomment to release 'spidev1.0' to user space #overlays=spidev1_0 ## uncomment to release 'spidev1.1' to user space #overlays=spidev1_1 ## ADXL345 ## uncomment to release 'spidev1.2' to user space #overlays=spidev1_2 ## uncomment to set 'PH10' for IR #overlays=ir ## write the config after the 'overlays' and separate it with a space when multiple functions are enabled #overlays=disable_uart0 pwm ws2812 light tft35_spi mcp2515 spidev0_0 spidev1_0 spidev1_1 spidev1_2 ir #------------------------------------------------# rootdev=UUID=e345f9fc-00c8-4132-8e8e-8afa1304e8ed rootfstype=ext4
[include mainsail.cfg] [virtual_sdcard] path : /home/biqu/printer_data/gcodes on_error_gcode : CANCEL_PRINT [mcu] serial : /tmp/klipper_host_mcu [printer] kinematics: none max_velocity : 1000 max_accel : 1000 # PIN CALC # PG19 is definitely a GPIO pin. It may not be on the 40 pin GPIO header but any input / output pin on the BTT Pi and CB1 is GPIO. #The formula to convert from PG19 to GPIO is: #[(PG - PA)*32] + {Pin Number} #Where PA = 1, PB =2….so PG = 7 #So [(7-1)*32] + 19 = 211 # Test PC15 # (3-1)*32 + 15 = 79 -> GPIO79 [fan_generic GenFan] #host: pin : gpio211 max_power : 1.0 #shutdown_speed: cycle_time : 0.010 hardware_pwm : false kick_start_time: 1.100 [output_pin OutPin] pin: gpio79 pwm: false # Set if the output pin should be capable of pulse-width-modulation. # If this is true, the value fields should be between 0 and 1; if it # is false the value fields should be either 0 or 1. The default is # False. value: 0 # The value to initially set the pin to during MCU configuration. # The default is 0 (for low voltage). ##cycle_time: 0.0100 # The amount of time (in seconds) per PWM cycle. It is recommended # this be 10 milliseconds or greater when using software based PWM. # The default is 0.100 seconds for pwm pins. ##hardware_pwm: False [adxl345] cs_pin : gpio74 spi_bus : spidev1.1 [resonance_tester] accel_chip: adxl345 probe_points: 150,150,20 # Bettmitte