惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
雷峰网
雷峰网
GbyAI
GbyAI
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
V
V2EX
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Engineering at Meta
Engineering at Meta
T
Tenable Blog
P
Privacy & Cybersecurity Law Blog
Project Zero
Project Zero
Cloudbric
Cloudbric
Help Net Security
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LINUX DO - 热门话题
J
Java Code Geeks
WordPress大学
WordPress大学
S
Securelist
F
Full Disclosure
N
News and Events Feed by Topic
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
P
Proofpoint News Feed
Hugging Face - Blog
Hugging Face - Blog
U
Unit 42
Google Online Security Blog
Google Online Security Blog
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
Google DeepMind News
Google DeepMind News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
月光博客
月光博客
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
小众软件
小众软件
V2EX - 技术
V2EX - 技术
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
The Last Watchdog
The Last Watchdog
D
DataBreaches.Net

博客园 - 思兼

跟思兼学Klipper(41):优化 KAMP 的自适应划线清除喷嘴残料 跟思兼学Klipper(40) 免费高速简单的3D打印机远程控制服务 跟思兼学Klipper(39.1)解决 QIDI Q2 主板散热风扇开机即转、待机不停的风扇噪音问题 跟思兼学Klipper(38) 成品3D打印机使用外挂上位机提升性能简明指南 跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南 跟思兼学用Klipper(36)低成本升级自动Z偏移校准实现完美首层 MKS Pi/SKIPR 自制新版系统简明使用指南 火力全开!Intel NUC6iKYK 骷髅峡谷提速降温简明指南 跟思兼学用Klipper(35) mergerfs 助力 Klipper 上位机热插拔自动扩容与脱机打印 跟思兼学用Klipper(34) 3D打印机如何进行双 Z 等高校准之我见 跟思兼学Klipper(32):修复 CrealityOS IP 地址经常改变的问题 跟思兼学Klipper(30):使用辅助宏调整3D打印机无感归位堵转检测阈值 玩转创想三维 K1 系列主板之二:编译 MCU 固件,恢复裁剪组件 玩转创想三维 K1 系列主板之一:在线更新 MCU 固件 基于 ESPHome 的 3D 打印机舱内控制系统(2): FireBeetle 2 ESP32-C6 + Moonraker Sensor + Fluidd 基于 ESPHome 的 3D 打印机舱内控制系统(1): 荆棘满途之 FireBeetle 2 ESP32-C6 初始配置 跟着思兼学习Klipper(28):无接触线刷Klipper固件:千秋万载,一统江湖之Katapult 跟着思兼学习3D打印 Klipper 固件系列文章合集 27-行空板遇上Klipper之三: 做一个基于Klipper的通用延时摄影机
跟着思兼学习Klipper(29):行空板遇上Klipper之一: 安装Klipper全家桶
思兼 · 2024-02-25 · via 博客园 - 思兼

前言

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

文章如有更新请访问 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 图标