跟着思兼学习Klipper(29):行空板遇上Klipper之一: 安装Klipper全家桶

前言

原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。

文章如有更新请访问 DFRobot 社区cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。

先有三后有一,你说奇怪不奇怪。

去年 Ash 老板问我行空板能否安装使用 Klipper 全家桶作为 3D 打印机上位机使用,答案那肯定可以,不过要对原有的系统做一些修改。

软硬件环境:

  • 行空板(Unihiker),Debian 10(Buster)

本文涉及的内容:

  • 在 Unihiker 上安装 Klipper 全家桶

1、硬件介绍

行空板是一款来自于 DFRobot ,拥有自主知识产权的国产教学用开源硬件,采用微型计算机架构,集成LCD彩屏、WiFi蓝牙、多种常用传感器和丰富的拓展接口。同时,其自带Linux操作系统和python环境,还预装了常用的python库,让广大师生只需两步就能开始python教学。

基本配置为:RK3308-四核 64 位 Cortex-A35 处理器,512MB 内存,16GB 内存,RTL8723DS 无线蓝牙模块,GD32VF103C8T6 RISC-V 协处理器,搭载一块 2.8 寸 240x320 可触控彩色屏幕。

2、系统及软件

默认的操作系统采用 Debian 10,稍微有些老了,默认的 Python3 版本为 3.7,测试时发现 ESPHome 直接运行时有错误。默认采用 Rockchip 4.4.143 legacy 内核,由于没有专门的处理模块,应该也不支持 MPP 硬件加速。由于我们有 FDT 设备树文件,并且 RockpiS 已经支持 6.x 主线内核,所以我们有条件制作基于最新版 Armbian + 主线内核的系统,希望官方有空更新,或者我们自己丰衣足食。

同样采用此 SoC 的开发板有 Radxa RockpiS 和 Firefly ROC-RK3308-CC。前者有 Armbian 支持,相关资料可供参考。默认的启动配置文件如下:

image-20240225005512583

注意:

原理图显示 RK3308 UART0 连接到 T1、T2,猜测用于输出内核消息,但是板子上没找到具体的触点丝印,可以调试时会比较麻烦。

UART3 则用于与 MCU 协处理器通讯。

板载似乎没有电源管理芯片,使用 poweroff 命令关机后仍会耗费较多电力。

行空板开机后自动打开 PyboardWeb 界面,竖屏显示,可以进行触摸设置,界面如下图所示:

img

连接到 MCU 的外设使用 pinpong 库 进行操作。

3、基本设置与安装全家桶

# 根据个人习惯,添加名为 pi 的用户,设置密码及必要组
sudo adduser --gecos GECOS --add_extra_groups pi --disabled-password
sudo usermod -a -G sudo,render,dialout,tty,video,audio,netdev,docker pi
echo "pi:52mxpi" | chpasswd

# 安装基本必要组件
sudo apt install -y avahi-daemon iw

# 禁用 PyboardWeb 服务自启动,解除屏幕占用,方便显示 KlipperScreen
# 比较特殊,使用 systemctl --user list-units --type=service --state=active 找到相关服务
sudo systemctl --user disable PyboardWeb
sudo systemctl disable lightdm

# 以下使用 pi 用户重新登陆
# 设置国内镜像地址
sudo sed -i 's|security.debian.org|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
sudo sed -i 's/httpredir.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/http:/https:/g' /etc/apt/sources.list
sudo sed -i 's/http:/https:/g' /etc/apt/sources.list.d/*
echo "Acquire::http::Pipeline-Depth \"0\";" > /tmp/99nopipelining
sudo mv /tmp/99nopipelining /etc/apt/apt.conf.d/99nopipelining

sudo rm /etc/pip.conf > /dev/null 2>&1
mkdir -p $HOME/.config/pip
cat << _EOF_ > $HOME/.config/pip/pip.conf
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
# extra-index-url=https://www.piwheels.org/simple
timeout = 600
_EOF_

cat << _EOF_ > $HOME/.gitconfig
[url "https://github.moeyy.xyz/https://github.com/"]
#[url "https://hub.0z.gs/"]
        insteadOf = https://github.com/
_EOF_

# 设置时区
sudo timedatectl set-timezone Asia/Shanghai

## 安装 Klipper 全家桶 ##
# 安装 kiauh 助手
git clone https://gitee.com/miroky/kiauh

# 设置快捷指令
echo 'alias lid="ls /dev/serial/by-id/*"' >> ~/.bashrc
echo 'alias k="~/kiauh/kiauh.sh"' >> ~/.bashrc && source ~/.bashrc

# 使用 kiauh 助手安装必要组件
# 选择 1) [Install] 如下图所示安装1/2/4/5

image-20240225013049263

至此我们已经安装完毕 Klipper 全家桶,crowsnest 需要安装 Legacy 版,具体看之前便携式延时摄影机器的文章。但是想要打开触摸屏幕功能,还需要额外的设置。

4、设置屏幕旋转和触摸功能

默认屏幕为竖屏显示,我们需要改成横屏显示,使用 lsmod 命令查看相关驱动。

pi@unihiker:~$ lsmod
Module                  Size  Used by
hci_uart               36864  1
mousedev               20480  0
rtl8723ds            1708032  0
keyboard_ab            16384  0
ns2009                 16384  0
fb_ili9341             16384  2
usb_f_ecm              16384  2
usb_f_rndis            20480  2
u_ether                20480  2 usb_f_ecm,usb_f_rndis
libcomposite           40960  16 usb_f_ecm,usb_f_rndis
fbtft_device           49152  0
fbtft                  28672  2 fb_ili9341,fbtft_device

这里看到了老熟人:ns2009 触摸驱动,以及 fbtft_device/fbtft/fb_ili9341 SPI 显示驱动。

4.1 彩色屏幕功能测试

# 查看本机 framebuffer 设备
pi@unihiker:~$ ls /dev/fb*
/dev/fb0

# 测试 fb0 设备显示
sudo fbi -d /dev/fb0 -T 1 -noverbose -a DFRobotLogo.png
# Bonus: 使用 mplayer 播放视频
sudo apt-get install -y mplayer
wget https://raw.githubusercontent.com/devdotnetorg/Site/master/Uploads/minions-320x180.mpg
# 使用格式工厂等软件转换为 240x320 mkv
mplayer -nolirc -vo fbdev2:/dev/fb0 -vf rotate=1 minions-320x180.mkv -cache-min 80 -fps 10

# 查看 SPI 屏幕信息,最大帧率 20 FPS
pi@unihiker:~$ dmesg |grep spi
[    4.342541] spidev spi2.0: spidev spi2.0 48000kHz 8 bits mode=0x00
[    4.342660] spidev spi2.0: Deleting spi2.0
[    4.343369] spi spi2.0: fb_ili9341 spi2.0 32000kHz 8 bits mode=0x00
[    5.148260] graphics fb0: fb_ili9341 frame buffer, 240x320, 150 KiB video memory, 16 KiB buffer memory, fps=20, spi2.0 at 32 MHz

# 设置横向显示,具体可以查看我手机 Klipper 那篇文章,其中 CW UD CCW 多测试几次就好了。
# 创建 /etc/X11/xorg.conf.d/00-fbdev-rotate.conf
sudo su
cat << _EOF_ > /etc/X11/xorg.conf.d/00-fbdev-rotate.conf
Section "Device"
  Identifier "LCD"
  Driver "fbdev"
  Option "Rotate" "CW"
EndSection
_EOF_

image-20240225015637668

4.2 触摸校准

查看连接到系统的输入设备 ns2009,使用 半导小芯 查询可知为 I2C 接口 4 线电阻触摸屏控制器

# 查看连接到系统的输入设备,测试可知 generic ft5x06 (51) 为触摸屏
DISPLAY=:0 xinput --list
# 或者使用如下命令:
# less /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="rockchip,rk3308-acodec Headphones"
P: Phys=ALSA
S: Sysfs=/devices/platform/acodec-sound/sound/card1/input0
U: Uniq=
H: Handlers=event0
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ns2009_ts"
P: Phys=input/ts
S: Sysfs=/devices/platform/ff060000.i2c/i2c-2/2-0048/input/input1
U: Uniq=
H: Handlers=event1 cpufreq mouse0
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=3

I: Bus=0016 Vendor=0000 Product=0000 Version=0000
N: Name="keyboard_ab"
P: Phys=input/kbd
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=kbd event2 cpufreq
B: PROP=0
B: EV=100003
B: KEY=1000050000000

# 查看 i2c 设备
sudo i2cdetect -l
# i2c-2   i2c             rk3x-i2c                                I2C adapter
sudo i2cdetect -r -y 2
# 48: ns2009电阻式触摸传感器

image-20240225014507264

image-20240225014828077

4.2.1 使用 xinput-calibrator(弃用)

## 校准屏幕显示和触摸
sudo apt install xinput-calibrator
DISPLAY=:0 xinput_calibrator
# 根据上述结果创建 /etc/X11/xorg.conf.d/99-calibration.conf
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ns2009_ts"
        Option  "MinX"  "138"
        Option  "MaxX"  "139"
        Option  "MinY"  "123"
        Option  "MaxY"  "125"
        Option  "SwapXY"        "1" # unless it was already set to 1
        Option  "InvertX"       "0"  # unless it was already set
        Option  "InvertY"       "0"  # unless it was already set
EndSection

image-20240225015538635

4.2.2 直接修改触摸矩阵

# 创建输入设备校准文件
# 实测 [屏幕 CW] 对应 [触摸 -270°]
cat << _EOF_ > /etc/udev/rules.d/98-touchscreen-cal.rules
ATTRS{name}=="ns2009_ts", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"
_EOF_

5、最终效果

至此,我们禁用了原来屏幕显示的 PyboardWeb 界面,安装了 Klipper 全家桶,修改了屏幕和触摸方向,获得了一个小巧的 Klipper上位机设备。

image-20240225020601883

其实由于带宽限制,SPI 屏幕分辨率不高,我们可以使用点阵字体如文泉驿-sharp,具体会在将来介绍如何移植 SPI 屏幕中详述。

6、预告

  • Klipper 测试神器:皇帝的新打印机
  • 调用行空板协处理器传感器模块资源
  • 玩转 ESP32 + MQTT + Moonraker
  • 如何修改 KlipperScreen 图标,系统启动图标,Fluidd 图标
posted @ 2024-02-25 09:16  思兼  阅读(477)  评论(0编辑  收藏  举报