首页 > 其他分享 >跟着思兼学习Klipper(29):行空板遇上Klipper之一: 安装Klipper全家桶

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

时间:2024-02-25 09:22:05浏览次数:31  
标签:0000 Klipper sudo 29 apt etc https 行空

前言

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

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

标签:0000,Klipper,sudo,29,apt,etc,https,行空
From: https://www.cnblogs.com/sjqlwy/p/18031939/unihiker_klipper

相关文章

  • 1.29
    全局注册uni-app 支持配置全局组件,需在 main.js 里进行全局注册,注册后就可在所有页面里使用该组件。注意Vue.component的第一个参数必须是静态的字符串。nvue页面暂不支持全局组件。main.js 里进行全局导入和注册 importVuefrom'vue' importpageHeadfrom'......
  • pytest简易教程(29):pytest常用插件 - 控制函数执行顺序(pytest-ordering)
     pytest简易教程汇总,详见:https://www.cnblogs.com/uncleyong/p/17982846 应用场景用例执行顺序,默认是按照从上到下的顺序进行执行的,详见:https://www.cnblogs.com/uncleyong/p/17956862如果想自定义执行顺序,也就是改变执行优先级,那么可以使用pytest-ordering 插件安装pi......
  • 29.Jenkins Api 接口
    JenkinsApi简介Jenkins对外暴露的动作交付入口为外部程序提供入口,可以控制Jenkins支持协议-HttpApi接口支持用户名、密码认证JenkinsApi支持的典型功能:运行Job、查看任务状态、返回任务编号…等JenkinsApi环境准备使用curl调用获取所有Jobs接口创建一......
  • P8329 [ZJOI2022] 树
    直接求是困难的,所以考虑容斥将所求容斥为两部分:每个结点至少在一棵树上为叶子的方案数-至少有一个结点在两棵树上都为叶子的方案数。考虑DP,设\(f_i(x,y)\)表示\([1,i]\)中是第一棵树的非叶子的结点数为\(x\),\([i+1,n]\)中是第二棵树的非叶子的结点数为\(y\)时的......
  • 微控制器STM32L475RCT7[IC MCU 32BIT 256KB]、AZ5A25-01F.R7G瞬态抑制二极管(TVS),AONS
    1、微控制器STM32L475RCT7[ICMCU32BIT256KBFLASH64LQFP]STM32L475RC器件是基于高性能ARM®Cortex®-M432位RISC内核的超低功耗微控制器,工作频率高达80MHz。Cortex-M4内核具有浮点单元(FPU)单精度,支持所有ARM单精度数据处理指令和数据类型。它还实现了完整的DSP指令集和存储......
  • Programming Abstractions in C阅读笔记:p283-p292
    《ProgrammingAbstractionsinC》学习第72天,p283-p292总结,总计10页。一、技术总结1、anylasisofalgorithms算法分析——即判断程序的效率(efficiency)。2、mathematicalinduction(数学归纳法)3、Big-Onotation(大O标记法)4、constanttime(常量时间)5、lineartime(......
  • Go语言精进之路读书笔记第29条——使用接口作为程序水平组合的连接点
    如果说C++和Java是关于类型层次结构和类型分类的语言,那么Go则是关于组合的语言。——RobPike,Go语言之父“偏好组合,正交解耦”29.1一切皆组合在语言设计层面,Go提供了诸多正交的语法元素供后续组合使用,包括:Go语言无类型体系(typehierarchy),类型定义独立;方法和类型是正交......
  • day29 回溯算法part5 代码随想录算法训练营 47. 全排列 II
    题目:47.全排列II我的感悟:用了一层判断,感觉也挺好用的理解难点:老师的写法,主要是理解used【i】和used[i-1]的概念我说怎么参考答案看不懂呢,它把两个判断放在一起写了。我的代码:用了一层判断classSolution:defpermuteUnique(self,nums:List[int])->List[Lis......
  • day29 回溯算法part5 代码随想录算法训练营 46. 全排列
    题目:46.全排列我的感悟:看不下去视频,可以先看文字讲解。看答案。带着疑问去看视频,效果会更好。加油!理解难点:排列,不用start_index了借助used=1来过滤掉[1,1,1]这种情况。如果不加ifused[i]==1,continue就会出现重复的。如下图: 代码示例:classSolution:d......
  • CF1295F - Good Contest
    题意:\(a_i\)​是在\([l_i​,r_i]\)上均匀随机分布的整数,求\(a_{1\dotsn}\)​单调不增的概率。对\(998244353\)取模。\(2\len\le50,0\lel_i\ler_i\le998244351\)。首先可以把概率转化为总方案数在除以\(\prodr_i-l_i+1\),考虑出朴素的dp,设\(f_{i,j}\)为$选......