跟着思兼学习Klipper(23) 玩一玩必趣 BTT Pi 上位机
## 跟着思兼学习Klipper(23) 玩一玩必趣 BTT Pi 上位机## 前言
本文感谢必趣 (BigtreeTech) 赞助的 BTT Pi 上位机。此款设备很早之前就开始接触了,目前淘宝上是最新的v1.2版。
<img src="https://www.klipper3d.org/img/sponsors/BTT_BTT.png" style="zoom: 25%;" />
原创文章,转载引用请务必注明链接,水平有限,如有疏漏,欢迎指正交流。
文章如有更新请访问 (https://mc.dfrobot.com.cn/thread-316165-1-1.html?fromuid=725344) 或者 (https://www.cnblogs.com/sjqlwy/p/bttpi_review.html)。
欢迎对 Klipper 固件,以及对改版 CNC 加工的 Voron 三叉戟、v0、v2.4 感兴趣的朋友加群交流(QQ Group:490111638)。
我们约定:`上位机`——运行Klipper系统的设备,`主板`——3D打印机主板,`工具板`——热端工具板。
BTT Pi 相当于原来的 `CB1 + Pi4B底板 + 散热片`,价格更便宜(178 Vs 236元)。当然 CB1 模块也是非常有意义的产品,相比于 (https://wiki.banana-pi.org/%E9%A6%99%E8%95%89%E6%B4%BE_BPI-CM4) 和 (https://wiki.radxa.com/Rock3/CM3) 价格要便宜不少,同样支持各种 树莓派 CM4 计算模块的底板。以前觉得香橙派是价格屠夫,现在传统 3D 打印机主板厂商也能出来搅一搅。同时 BTT Pi 拥有后发优势。
本文介绍如下内容:
1. BTT Pi 硬件介绍与横向对比
2. RatOS 介绍
3. 另一种方式将手机作为 KlipperScreen 屏幕使用的方法(NoMachine)
4. 使用网盘拓展上位机存储空间(Alist + Rclone)
5. 使用红外遥控器控制打印机(灯光、通断电、关闭系统等)
## 0、文档资料
* https://github.com/bigtreetech/BTT-Pi | 主要参考,包括使用手册、引脚图、3D模型等
BTT Pi 软件系统上沿用 CB1 的资源。所以部分资料互通,可供参考。注意两者部分引脚顺序不同:
* https://github.com/bigtreetech/CB1 | 操作系统下载
* https://bigtreetech.github.io/docs/CB1.html | 必趣的新资料站,可惜目前没有中文
---
* (https://www.cnx-software.com/2023/05/01/bigtreetech-pi-v1-2-a-raspberry-pi-sized-allwinner-h616-sbc-for-3d-printers/)
* 还有一些 UP 主的开箱,这里呼吁不要云评测,你又不是没有实物,实测后再说结论,尊重自己尊重别人。
* 除了必趣官方提供的系统,(https://os.ratrig.com/) 目前也支持 CB1 了,这位作者是个大牛,RatOS 非常值得学习。
* 当然 BTT Pi 并不是开发板,所以给的资料也不多,将将堪用。
## 1、外观规格对比
目前 3 大主板厂商都有了自己的上位机,我们大概对比一下:
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305280044003.png)
| | Fly Pi | MKS Pi | BTT Pi |
| ------------------------- | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
| **<u>CPU</u>** | Allwinner H5 | Rockchip RK3328 | Allwinner H616 |
| **<u>RAM</u>** | 1G | 1G | 1G |
| **<u>存储</u>** | microSD 插槽,选配 eMMC 模块 | 有 microSD 插槽,选配 eMMC 模块 | 有 microSD 插槽 |
| **<u>WiFi</u>** | 无,选配 WiFi 模块或者 USB 无线网卡 | 无,选配 USB 无线网卡 | 有,Realtek rtl8189 |
| 有线网口 | 有 | 有 | 有 |
| 蓝牙 | 无 | 无 | 无 |
| 12/24v 供电 | 有 | 有 | 有 |
| **<u>USB 接口数量</u>** | 4(一般场景 3 可用) | 3(一般场景 2 可用) | 4 |
| 板载可控风扇 | 有,5v | 无 | 有,5v |
| GPIO | 40Pin 兼容树莓派 | 8Pin GPIO | 40Pin 兼容树莓派 |
| **<u>TypeC 支持调试</u>** | 是 | 是 | 是 |
| 其他接口 | UARTx2、SPIx2(加速度计、屏幕)、CANbus、HDMI | ADXL345、SPI屏幕、HDMI | ADXL345、SPI 屏幕、IR、HDMI、CANBus、3.5 音频 |
| 操作系统主观感受 | 好 | 一般 | 好 |
| **<u>价格</u>** | 199(主板+WiFi) | 199(主板+散热片+WiFi) | 178(主板+散热片,内置WiFi) |
| 产品链接 | https://item.taobao.com/item.htm?id=676114118467 | https://item.taobao.com/item.htm?id=677753631669 | https://item.taobao.com/item.htm?id=715080359615 |
* 加黑的为我认为 Klipper 上位机比较看重的部分
以前觉得 MKS Pi 带屏幕套餐性价比高,但是对比以及使用过 MKS Skipr 后发现其软硬件提升空间很大。BTT Pi 板载 WiFi 好评,少占用一个 USB 接口,另外178的价格真不是故意的吗 xD。
## 2、硬件规格、部分芯片及备注
- SoC – CPU: (https://www.cnx-software.com/2020/02/27/allwinner-h616-tv-box-processor-comes-with-mali-g31-gpu-supports-android-10/) 四核 A53 @ 1.5GHz 处理器,GPU: Mali G31 MP2 支持 OpenGL ES 3.2
- 系统内存 – 1GB DDR3L
- 存储 – MicroSD 卡槽,未来支持 eMMC 板载存储模块(有相关 dtb 文件)
- 视频输出
- Micro HDMI 2.0a 接口,支持 4K@60fps 输出
- 支持专有 SPI 屏幕( FPC 接口)
- 音频输出 – 3.5mm 音频接口
- 网络 – 10/100 Mbps 有线网口 和 2.4 GHz 无线模块,注意必须要连接外置天线使用
- USB – 4个 USB 2.0 接口, 1个 USB Type-C (用于供电和串口调试)
- CANbus – 用于 CANBus 通讯(G/H/L),需要搭配 U2C 模块使用
- 拓展接口
- 40-pin GPIO(兼容树莓派)
- ADXL345 加速度计接口 (SPI)
- 板载 红外接收器(IR)
- 5v 2线可控风扇接口
- 供电接口
- 5V TypeC 接口(注意电流不够时可能会不稳定)
- 端子座供电(支持12-24v)
- 外观尺寸 – 85 x 56 mm,安装孔与树莓派一致
## 2.1 硬件杂谈
* **CPU:**这三家的CPU性能相近,都是足够Klipper使用了。如果 RK3399 未来降价也是个不错的选择,RK3588 价格太贵就算了,0.05s 和 0.01s 感受不出来的。
* **GPU:**H616 发布时间比较晚,搭载的 G31 图形性能相比 Mali-450 高些,支持高分辨率输出(2k、4k等),不过我对街机系统无感,所以不做对比测试了,当然还有一点就是主线内核一般对 GPU 的硬件加速支持不够好,很多需要用到 Legacy Kernel,搭配厂商提供的驱动。
![](https://img-blog.csdnimg.cn/20210623175551261.png)
【Arm Mali 图像处理器性能天梯】可见 H616 使用的 G31 性能强于 其他两者使用的 Mali-450,来源:ARM (https://blog.csdn.net/u011956078/article/details/118158516)。G31 支持HDMI 2.0a up to 4K @ 60Hz,Mali450-MP4 支持到 HDMI 1.4。
* 虽然三者都支持 SPI 屏,其优势是便宜,但是现在想开了,要不用 12864 状态屏,要不就用个分辨率高色彩显示更好的 HDMI 屏,然后显示点花里胡哨的东西,默认的 KlipperScreen 打印中界面没啥用。
* 3.5mm 音频接口,可以接扬声器做语音播报,但是用耳机测试时输出有问题,可能我的耳机线序不对,有空测试下。
* 有线网络接口:BTT Pi 后期使用 H616 内置有线网控制器,所以板子上省了一个芯片。
* 无线网卡:采用量大便宜的 rtl8189,新版驱动稳定性还不错。至于天线,“理论上不用天线也可以的” ,这种说法不可能成立的,因为其没有板载 PCB 天线,以下为信号对比图。
!(https://gcore.jsdelivr.net/gh/sjqlwy/blog_imgs@default/images/202305142113384.png)
* USB 接口:总计 4 个好评,这点比 MKS Pi 强多了。和 Fly Pi 一样支持 TypeC 调试串口,我觉得这点非常重要,保证设备不失联。
* CANBus:需要插入 U2C 模块使用,占用一个 USB 接口,和 Fly3D 的 CAN-HAT 相比,好处是 U2C 一个模块两种用法,只需要出一份钱。
* 板子尺寸以及开孔位置和 RPi3、RPi4 相同的,所以有些结论我也不知道如何得出的:[树莓派机械图纸](https://shumeipai.nxez.com/raspberry-pi-mechanical-drawings)、(https://github.com/bigtreetech/PI4B-Adapter/tree/master/Hardware)
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305272346253.png)
## 3、软件系统
目前可以使用官方系统,也可以使用 RatOS for CB1(底层也是官方系统,版本略有滞后)。由于做了裁剪与优化,系统启动与关机速度很快。
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305272349128.png)
这里主要介绍 RatOS,主要特性包括:
- 现代化的配置文件形式,目前支持 RatRig V-core3 和 V-Minion,以及实验性支持 Voron 0.1 和 2.4
- 支持多种主控板、挤出机和热端
- 自动编译主板固件并更新(如果支持)
- 基于 Klipper, Moonraker 以及 Mainsail
- 使用 `RatOS Configurator` 网页界面方便配置无线网络和进行打印机、主板初始化设置
- 除此之外,还有很多高级宏命令,RatOS 这个操作系统技术细节值得学习的地方很多
---
* RatOS for CB1 仍然基于必趣的 Armbian 系统,部署了其软件项目
* 设置网络信息同样可以修改 boot 分区的 `system.cfg` 文件,目前 AP 模式直接设置无法使用,听说需要手动编译安装 create_ap
* 默认 Klipper 全家桶部署在 pi 目录,但同时保留了 biqu 用户
## 3.1 RatOS Configurator 介绍
首次启动后如果没有连接网络,则会创建名为 “RatOS” 的热点,连接后访问 http://ratos.local/configure 即可打开 RatOS 配置器。
目前还在持续开发中,支持 1. 无线网络设置 2. 主板固件烧录 3. 工具板固件烧录与连接 4. 打印机设置与初始化
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305280033265.png)
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305280034989.png)
RatOS 既往仅支持 树莓派,近来更新实验性支持必趣 CB1,所以也支持 BTT Pi。更是支持了大量必趣的 3D 打印机主板,从而对于组装上述打印机的用户来说,BTT Pi/CB1 + Manta 成为一个非常值得选择的高性价比组合。
BTT Pi 和之前版本的对比,可以看到整体布局差异还是很大的,相当于重新设计,不知道出自哪位大佬之手。
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305280005427.png)
## 3.2 BTT Pi 系统自带设备树
```shell
/boot/BoardEnv.txt
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
monitor=hdmi
hpd=0
disp_mode=1920x1080
overlays=ir ws2812 spidev1_0
## 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
## uncomment for TFT35_SPI screen
#overlays=tft35_spi
## uncomment MCP2515 spi to canbus module
#overlays=mcp2515
## 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
## 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
```
* 可以看到有 eMMC 版本
* 目前支持 ws2812 炫彩灯、灯光控制、spi屏、mcp2515 spi can模块、ir 红外接收等
* dtb 文件位置位于 `/boot/dtb-5.16.17-sun50iw9/allwinner/`,必要时
## 3.3 BTT Pi 系统简析
这里就不深入谈了。
1. APT 软件源默认配置为国内。/etc/apt/sources.list
2. system.cfg
* timedatectl 看到实际配置为 UTC 0 时间,所以 system.cfg 里说的不对,没有默认东 8 区
```shell
###########################################
# System time zone setting, default Beijing time (East 8)
# More settable time zones can be viewed by running the command: timedatectl list-timezones
#TimeZone="Asia/Shanghai"
```
3. 脚本功能解释,风格像是老师傅
* /etc/scripts/init.sh | 由 rc.local 每次开机调用。以下脚本位于 `/etc/scripts`
* pwr_status.sh | 开机后控制 gpio229 上的 led 闪烁,间隔 0.5s,引脚变了?没反应
* system_cfg.sh | 读取配置文件配置值并进行设置,fly pi 则是配置文件也是 shell 脚本。
* 移动 sd 卡 `boot` 分区 `gcode` 文件夹内的文件到 Klipper Gcodes 目录,但是此分区只有 256MB。
* ex_rootfs.sh | 首次开机扩展分区并删除此脚本
* reconnect_wifi.sh | 创建热点确实需要编译安装 create_ap,不过目前看此服务暂不开放
## 4、手机无线 KlipperScreen 屏(Yet Another)
本方案借助 NoMachine 软件实现桌面共享,最早在 树莓派400 上进行测试,树莓派强制开启 HDMI 输出(不需要 HDMI 诱骗器),启用 GPU 从而支持硬件解码,支持硬件加速,显示效果良好。
> Tips:如果您的 server computer 的 HDMI 接口没有接显示屏,这会禁止 GPU 加速,让远程桌面运行非常慢。
后来看到网上有另一个方案,就是与在手机上安装 X-Server 如 XSDL ,此方案比想象中的简单多了。详情见《[跟着思兼学习Klipper(14) 卷起来了,手机与Klipper的四次结缘](https://mc.dfrobot.com.cn/thread-312807-1-1.html?fromuid=725344) 》 一文。
## 4.1 X-Server:XSDL 的缺点
![](http://x11.gweb.info/X_Client_Server.gif)
此方案相当于图像转发到手机上的 X-Server 软件上,本身图像没有进行压缩,且受到无线内网通讯质量的影响,当分辨率设置较高时,传输图像数据量较大,导致响应卡顿,实际使用效果差强人意。
## 4.2 远程桌面
KlipperScreen 有一个特点,为了节省资源,没有完整桌面环境。这里想到三种方案:VNC、NoMachine、AnyDesk/TeamViewer/向日葵/RustDesk,虽然都属于远程桌面,但是还是有不同的。此外桌面共享和远程桌面的概念也不同。我们首先以所有设备在同一无线局域网内为例,后面拓展。我们想要找一种 <u>**跨平台,高性能,低延迟,多功能的方案**</u>,这里对多种连接方式、多种显示方案进行比较。
1. VNC 协议类似于抓取图片,支持 jpeg 硬解。RealVNC 也支持声音传输,但是属于付费功能
2. NoMachine 的 NX协议传输视频,使用VP8/H264,H264 的 CPU 占用比较低
3. AnyDesk/TeamViewer 则支持广域网连接。
分述如下:
### 4.2.1 VNC
使用配置可以参考官方文档 (https://www.raspberrypi.org/documentation/remote-access/vnc/)。主观评价:免费版不支持音频,功能较少。相当于截图传输,图像质量及流畅性上差一些。支持 Headless 无显示器使用
### 4.2.2 Anydesk
类似 Teamviewer,下载的deb安装包会提示缺少依赖,需要在 Client 设置启用一些选项
* **Server:启用自动发现** | 局域网无需知悉 RPi 的 IP 地址
* **Server:允许自主访问并设置密码** | 无需在 RPi 确认接入访问
* **Client:** 启用显示远程电脑的光标 & 跟随远程电脑的光标
* **Client(Android):**会话设置 > 输入 > 直接鼠标模式 | 隐藏 Client 光标
主观评价:操作流畅,无需安装,支持 MineCraft 显示。支持远程连接。但是由于我们没有安装完整桌面环境,所以初步测试使用不了,登不进去。
### 4.2.3 Nomachine
注意 arm7hf 是针对 32 位系统,arm8 是针对 64 位系统。其采用 NX 协议。传输视频流编码可选择付费的 H.264 和免费的 VP8,H.264 需要授权,但是 Nomachine 支付了这笔费用。
> - 可用于硬件加速并且本机支持的最优视频编解码器是 (https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC)
>
> - 当优先考虑跨平台支持时,(https://en.wikipedia.org/wiki/VP8) 是一个不错的选择。VP8 得到广泛支持并具有全面的功能集,但与硬件加速的编解码器(例如 H.264)相比,需要消耗更多的资源。
>
> Via (https://docs.unity.cn/cn/2019.4/Manual/VideoSources-FileCompatibility.html)
主观评价:之前讲 LattePanda 用法的时候介绍过,对于默认无法启用硬件加速的设备比较友好。由于树莓派硬件加速支持比较好,所以这点上优势不是那么明显。支持功能更丰富。免费版服务端每次仅允许创建一个会话。文档异常丰富。
### 4.2.4 常见问题
1. 什么是自动发现,有什么好处
树莓派连接到网络之后,需要知道它的 IP 地址例如 `192.168.0.110` 才能访问,而启用自动发现之后,所有运行 Nomachine/Anydesk 的设备都可以在局域网中自动显示出来,无需知晓互相的 IP 地址,这无疑十分方便。
2. RealVNC 有类似自动发现的功能吗?
我猜想自动发现是借助 `Zero-configuration networking` 零配置网络实现的,如果 Windows 以及苹果设备,则可以通过安装 Bonjour 服务(法语:你好,又叫 zeroconf ,由苹果公司开发),Linux 安装 Avahi 服务( Bonjour 的开源实现),则局域网中 BTT Pi 的地址总是 `BTT-CB1.local`,如果改过 `hostname`,则为 `.local`。当然,这需要服务端和客户端都开启了 Bonjour 协议服务。由于 Andorid 设备不支持 Bonjour,所以麻烦一些,无法直接通过 `BTT-CB1.local` 访问设备。后文介绍一个解决方法。
3. 没有连接显示器时,使用 VNC 访问树莓派,显示为黑屏?
之前介绍 LattePanda 时提到一个东西叫做 HDMI假负载/显卡欺骗器,为的是使设备启用 GPU 并输出视频信号,否则就会看到黑屏。
<img src="https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281351680.png" alt="image-20230528135042795" style="zoom:25%;" />
**解决方法1:**
针对 VNC,在树莓派上运行以下命令:
```shell
vncserver -randr=1366x768 # 创建一个分辨率为 1366x768 的虚拟显示
# vncserver -kill :<display-number> # 关闭某个显示
```
而运行 AnyDesk 和 Nomachine Client 时会提示你是否自动创建一个虚拟显示。此方法的缺点是,没有实际启用 GPU,创建的虚拟显示无法启用硬件加速,视频解码、图像绘制都是通过 CPU 软件渲染,导致极大降低性能。不过 Nomachine 借助 VirtualGL 实现类似硬件加速的性能一定程度上缓解此问题。
## 4.3 使用 NoMachine
综合下来我们选择 NoMachine。
### 4.3.1 安装 NoMachine
```shell
## 下载 64 位版本 NoMachine,并在手机上搜索安装对应版本
wget https://download.nomachine.com/download/8.5/Arm/nomachine_8.5.3_1_arm64.deb
sudo apt install ./nomachine_8.5.3_1_arm64.deb
```
没接 HDMI 显示器的话插电启动,发现默认分辨率非常低,原因是:
> in some cases users can get only a small screen resolution without the possibility to change it ('stuck resolution'). This depends on the GPU which makes available only one resolution when the monitor is not present.
>
> —— (https://kb.nomachine.com/AR05S01127)
### 4.3.2 解决分辨率低的问题
有两种方案,一是强制 HDMI 输出,一是使用 xorg-video-dummy 驱动。
#### ~~强制开启 HDMI 输出~~ 实测未生效,等待研究
```shell
# 修改 /boot/BoardEnv.txt (armbianEnv.txt),也可以指定刷新率
monitor=hdmi
hpd=0
disp_mode=1920x1080p30
# 以下也不生效
extraargs=video=HDMI-A-1:1920x1080-24@30
```
参考:
* https://docs.armbian.com/Hardware_Allwinner/#how-to-reconfigure-video-output
* https://docs.armbian.com/User-Guide_Fine-Tuning/#screen-resolution-on-other-boards
* https://docs.armbian.com/board_details/pine64/
* (https://forum.armbian.com/topic/3749-how-to-change-resolution-hdmi-display-armbian527/)
#### 使用 dummy 驱动
```shell
# 安装 dummy 驱动
sudo apt install xserver-xorg-video-dummy
# 生成指定分辨率刷新率的 Modeline
cvt 1024 600 60
# 创建 xorg 配置文件
sudo nano /etc/X11/xorg.conf.d/80-dummy-1024x600.conf
Section "Monitor"
Identifier "Monitor0"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
# https://arachnoid.com/modelines/
# 1920x1080 @ 60.00 Hz (GTF) hsync: 67.08 kHz; pclk: 172.80 MHz
#Modeline "1920x1080_60.00" 172.80 1920 2040 2248 2576 1080 1081 1084 1118 -HSync +Vsync
# 1024x600 59.85 Hz (CVT) hsync: 37.35 kHz; pclk: 49.00 MHz
Modeline "1024x600_60.00" 49.001024 1072 1168 1312600 603 613 624 -hsync +vsync
EndSection
Section "Device"
Identifier "Card0"
Driver "dummy"
VideoRam 256000
EndSection
Section "Screen"
DefaultDepth 24
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Depth 24
Modes "1024x600_60.00"
EndSubSection
EndSection
# 重启 KlipperScreen (xorg) 生效
sudo systemctl restart KlipperScreen
```
参考:
* [配置 NoMachine 无显示器使用](https://kb.nomachine.com/AR03P00973)
* (https://knowledgebase.nomachine.com/AR05S01124)
* (https://knowledgebase.nomachine.com/AR05S01125)
* (https://knowledgebase.nomachine.com/AR05S01126)
* (https://knowledgebase.nomachine.com/AR05S01127)
* [使用 xorg-dummy 驱动配置显示输出默认分辨率](https://techoverflow.net/2019/02/23/how-to-run-x-server-using-xserver-xorg-video-dummy-driver-on-ubuntu/)
* ArchWiki:(https://wiki.archlinux.org/title/VirtualGL)、(https://wiki.archlinux.org/title/Xrandr)、(https://wiki.archlinux.org/title/Hardware_video_acceleration)、(https://wiki.archlinux.org/title/Touchscreen)、(https://wiki.archlinux.org/title/Xorg)
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281412543.png)
| 软件名称 | 安装依赖大小 |
| -------- | ------------ |
| 向日葵 | 39.9M |
| Todesk | 88.2M |
| Rustdesk | 18.4G |
| Anydesk| 192MB |
结论:除了 Windows 用户和 Rust 开发者,不建议用 RustDesk。
## 5、利用网盘给上位机扩容
了解 WiFi 棒子的过程中,由于其默认只有 4G 存储,多数情况下不够用,除了物理更换存储进行扩容,还可以利用网盘,这种方案的要求就是稳定且选择速度快的网盘服务,同时网络质量要好,也支持使用内网 NAS。最初想到 rclone,但对国内网盘支持少且配置略嫌麻烦。后来想到另一个流行的软件:Alist,看了一下配置简单且对国内网盘支持好,用起来非常棒。
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281419594.png)
挂载网盘扩容:
1. 访问网盘文件
2. 挂载为本地目录
3. 测试通过
## 5.1 安装 Alist
这里以 `天翼云盘` 进行演示。
```shell
## 安装 Alist,自动下载对应平台的版本,支持自动启动。https://alist.nn.ci/zh/guide/install/script.html
sudo bash -c "curl -fsSL "https://alist.nn.ci/v3.sh" | bash -s install"
Alist 安装成功!
访问地址:http://YOUR_IP:5244/
配置文件路径:/opt/alist/data/config.json
---------管理员信息--------
INFO reading config file: data/config.json
INFO config file not exists, creating default config file
INFO load config from env with prefix: ALIST_
INFO init logrus...
INFO Successfully created the admin user and the initial password is: rqmswxGn
INFO admin user's info:
username: admin
password: rqmswxGn
--------------------------
启动服务中
查看状态:systemctl status alist
启动服务:systemctl start alist
重启服务:systemctl restart alist
停止服务:systemctl stop alist
温馨提示:如果端口无法正常访问,请检查 服务器安全组、本机防火墙、Alist状态
```
安装完毕后会自动生成访问密码:
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281430806.png)
## 5.2 Alist 初始化配置
控制面板并修改访问密码,添加天翼网盘。
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281434982.png)
* 支持的网盘列表:https://alist.nn.ci/zh/guide/#support-storage
* 管理面板:http://172.168.1.102:5244/@manage |添加网盘,更改管理密码等
* 网盘面板:http://172.168.1.102:5244/
* 添加天翼网盘:https://alist.nn.ci/zh/guide/drivers/189.html
## 5.3 挂载 webdav 到本地文件系统
目前我们已经可以访问网盘内容了,但是需要挂载到本地才能被 Klipper 访问。好在 Alist 支持 (https://alist.nn.ci/zh/guide/webdav.html),参考文档配置即可。目前有两款软件:davfs2 比较小巧,rclone 配置复杂些,都来试试。
### 5.2.1 davfs2
参考 (https://wiki.archlinux.org/title/Davfs2)、(https://blog.csdn.net/u013401853/article/details/113094734)
```shell
sudo apt install davfs2
# mount -t davfs http://address:<port>/path /mount/point
# 挂载 alist webdav
sudo mount -t davfs http://localhost:5244/dav /home/pi/printer_data/gcodes/alist -o uid=1000,gid=1000
# 读取并预处理 gcode 文件测试,需要已连接打印机
time ~/klippy-env/bin/python ~/klipper/klippy/klippy.py ~/printer_data/config/printer.cfg -i ~/printer_data/gcodes/alist/kklipper/stls/STH-36_sherpa_mini_mounting_plate_strain_relief.gcode -o /dev/null -d out/klipper.dict
# 测试失败,报错读写错误
OSError: Input/output error: '/home/pi/printer_data/gcodes/alist/189/kklipper/stls/STH-36_sherpa_mini_mounting_plate_strain_relief.gcode'
```
### 5.2.2 rclone
换 rclone 上场,参考文档 (https://rclone.org/webdav/) 和 (https://rclone.org/commands/rclone_mount/)。
其中 (https://rclone.org/commands/rclone_mount/#vfs-file-buffering) 很关键,将网盘文件下载并放入内存中缓存。
> * Each open file will try to keep the specified amount of data in memory at all times.
>
> * If the buffer is empty, only a small amount of memory will be used.
>
> * vfs-cache-mode 很重要
>
> 至于有没有缓存到本地磁盘,有待进一步验证
```shell
## 下载并配置 rclone
wget https://downloads.rclone.org/v1.62.2/rclone-v1.62.2-linux-arm64.zip
unzip rclone-v1.62.2-linux-arm64.zip && cd rclone-v1.62.2-linux-arm64
sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone
## 添加 alist webdav 存储
rclone config
# http://localhost:5244/dav # 密码手动输入不能黏贴
- type: webdav
- url: http://localhost:5244/dav
- vendor: other
- user: admin
- pass: *** ENCRYPTED ***
# 列举网盘文件,请将 "189"更改为你设置的名字
rclone ls 189:
## 挂载 webdav 到本地存储
sudo apt install fuse3
# rclone mount 189:189 /home/biqu/189 --vfs-cache-mode full
# 以下为手动后台挂载,可以设置开机等待联网后自动挂载,参考 nm dispatch
rclone mount 189:189 /home/biqu/printer_data/gcodes/alist/ --vfs-cache-mode full --daemon
## 卸载挂载点
fusermount -u /home/biqu/printer_data/gcodes/alist/
```
具体选项根据实际选择,如 46 webdav,不清楚的留空即可,不需要进入高级模式。
### 5.2.3 打印测试
如下图所示,我们在网页 Gcode 标签可以看到网盘中的文件,实际打印也没问题。
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281506989.png)
成品展示:
!(https://raw.iqiq.io/sjqlwy/blog_imgs/default/images/202305281509727.png)
### 5.2.4 多打印机使用
Klipper 支持配置文件 `内置开始/结束 Gcode`,以及 `固件回抽(Firmware Retract)` ,一定程度上对于相近的打印机,可以实现一个 Gcode 文件被多台打印机使用。
## 6、小试 红外接收器
BTT Pi 板载一个红外接收器(Infrared Remote,IR),比如可以实现红外遥控器控制灯光、播放 Music、开始打印、关闭打印机(需要二次确认)等操作。
## 红外遥控器坏了,待续
页:
[1]