跟思兼学Klipper(29):行空板遇上Klipper之一: 安装Klipper全家桶
# 前言
原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎交流指正。
文章如有更新请访问 (https://mc.dfrobot.com.cn/thread-318010-1-1.html?fromuid=725344)及 (https://www.cnblogs.com/sjqlwy/p/unihiker_klipper.html),前者内容较全,后者排版及阅读体验更佳。
先有三后有一,你说奇怪不奇怪。
去年 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 支持,相关资料可供参考。默认的启动配置文件如下:
!(https://s2.loli.net/2024/02/25/CDfXQKBPc5b9eg6.png)
注意:
> 原理图显示 RK3308 UART0 连接到 T1、T2,猜测用于输出内核消息,但是板子上没找到具体的触点丝印,可以调试时会比较麻烦。
>
> UART3 则用于与 MCU 协处理器通讯。
>
> 板载似乎没有电源管理芯片,使用 poweroff 命令关机后仍会耗费较多电力。
行空板开机后自动打开 PyboardWeb 界面,竖屏显示,可以进行触摸设置,界面如下图所示:
!(https://img.dfrobot.com.cn/wikicn/599a45d540a65c6bb27c3b2a/2556dde0e8fffb59ea5f57b0e4c4cefc.png)
连接到 MCU 的外设使用 (https://pinpong.readthedocs.io/zh-cn/latest/) 进行操作。
## 3、基本设置与安装全家桶
```shell
# 根据个人习惯,添加名为 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
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
# extra-index-url=https://www.piwheels.org/simple
timeout = 600
_EOF_
cat << _EOF_ > $HOME/.gitconfig
#
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) 如下图所示安装1/2/4/5
```
!(https://s2.loli.net/2024/02/25/lz6VedFPGiIXtx7.png)
至此我们已经安装完毕 Klipper 全家桶,crowsnest 需要安装 Legacy 版,具体看之前便携式延时摄影机器的文章。但是想要打开触摸屏幕功能,还需要额外的设置。
## 4、设置屏幕旋转和触摸功能
默认屏幕为竖屏显示,我们需要改成横屏显示,使用 `lsmod` 命令查看相关驱动。
```shell
pi@unihiker:~$ lsmod
Module SizeUsed by
hci_uart 368641
mousedev 204800
rtl8723ds 17080320
keyboard_ab 163840
ns2009 163840
fb_ili9341 163842
usb_f_ecm 163842
usb_f_rndis 204802
u_ether 204802 usb_f_ecm,usb_f_rndis
libcomposite 4096016 usb_f_ecm,usb_f_rndis
fbtft_device 491520
fbtft 286722 fb_ili9341,fbtft_device
```
这里看到了老熟人:`ns2009` 触摸驱动,以及 `fbtft_device/fbtft/fb_ili9341` SPI 显示驱动。
### 4.1 彩色屏幕功能测试
```shell
# 查看本机 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_
```
!(https://s2.loli.net/2024/02/25/jmdGIRBTYL6F4cE.png)
### 4.2 触摸校准
查看连接到系统的输入设备 `ns2009`,使用 [半导小芯](https://www.semiee.com/49dfd0b6-05c6-46ce-bde5-d5b2b84caf5a.html) 查询可知为 `I2C 接口 4 线电阻触摸屏控制器`。
```shell
# 查看连接到系统的输入设备,测试可知 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电阻式触摸传感器
```
!(https://s2.loli.net/2024/02/25/iuULVAvjqQ6rzKI.png)
!(https://s2.loli.net/2024/02/25/BZcGUiht5RnbNx6.png)
#### ~~4.2.1 使用 xinput-calibrator(弃用)~~
```shell
## 校准屏幕显示和触摸
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
```
!(https://s2.loli.net/2024/02/25/AWMoOrG1LCTZDd8.png)
#### 4.2.2 直接修改触摸矩阵
```shell
# 创建输入设备校准文件
# 实测 [屏幕 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上位机设备。
!(https://s2.loli.net/2024/02/25/DQsrEftLu3qGhco.png)
其实由于带宽限制,SPI 屏幕分辨率不高,我们可以使用点阵字体如文泉驿-sharp,具体会在将来介绍如何移植 SPI 屏幕中详述。
## 6、预告
* Klipper 测试神器:皇帝的新打印机
* 调用行空板协处理器传感器模块资源
* 玩转 ESP32 + MQTT + Moonraker
* 如何修改 KlipperScreen 图标,系统启动图标,Fluidd 图标 楼主有没有主板3D打印文件嘞,看照片怪好看的嘞 KarryJ 发表于 2024-2-26 18:41
楼主有没有主板3D打印文件嘞,看照片怪好看的嘞
这是官方的硅胶套,https://www.dfrobot.com.cn/goods-3725.html 大大您好,按照您的操作做完之后触摸的方向还是不对,请问可能是什么原因呢? 2031683205 发表于 2024-2-26 21:02
大大您好,按照您的操作做完之后触摸的方向还是不对,请问可能是什么原因呢? ...
这个文件【 /etc/udev/rules.d/98-touchscreen-cal.rules】的内容我看一下
cat/etc/udev/rules.d/98-touchscreen-cal.rules 2031683205 发表于 2024-2-26 21:02
大大您好,按照您的操作做完之后触摸的方向还是不对,请问可能是什么原因呢? ...
不过真的惊讶既有人有行空板,还玩 3D 打印 Klipper,哈哈 厉害{:5_125:} pATAq 发表于 2024-2-27 23:35
这个文件【 /etc/udev/rules.d/98-touchscreen-cal.rules】的内容我看一下
啊啊现在才发现大大回了,我翻一下能不能找得到那块板子 pATAq 发表于 2024-2-27 23:38
不过真的惊讶既有人有行空板,还玩 3D 打印 Klipper,哈哈
主要大大发文章那天刚买回来的板子上网搜了一下发现了这篇文于是跟着折腾了一下
页:
[1]