<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rust on 诺亚的小站</title><link>https://www.noahland.cn/tags/rust/</link><description>Recent content in Rust on 诺亚的小站</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 20 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.noahland.cn/tags/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>给树莓派 3.5 寸屏写了个 Rust 系统仪表盘</title><link>https://www.noahland.cn/p/pi-dashboard-rust/</link><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><guid>https://www.noahland.cn/p/pi-dashboard-rust/</guid><description>&lt;p&gt;之前给树莓派 4B 买外壳时，顺手给配了一块微雪 3.5 寸 TFT 屏。最初简简单单用 Python 写了个系统仪表盘,显示 CPU、温度、内存、磁盘、IP、Docker 容器和 Tailscale 状态，但监控的数据越来越多，很快摸到性能天花板，最后我不得不用 Rust 重写了整个东西（&lt;a class="link" href="https://github.com/RichLi4307/pi-dashboard" target="_blank" rel="noopener"&#10; &gt;pi-dashboard&lt;/a&gt;，v0.2.2）。&lt;/p&gt;&#10;&lt;h2 id="为什么-python-不够"&gt;为什么 Python 不够&#10;&lt;/h2&gt;&lt;p&gt;起初我只是计划做一个0.5FPS的监控屏幕程序，后面发现监控速度太慢，很多程序都是脉冲式的负载。为了更客观反应小派的实际硬件状态，我打起了rust的主意。&lt;/p&gt;&#10;&lt;h2 id="rust-版做额外做的几件事"&gt;Rust 版做额外做的几件事&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;脏区刷新&lt;/strong&gt;。核心思路是每次渲染都先保留上一帧画面，只把画面里变化的矩形区域写入帧缓冲。静止状态下 SPI 写入量远小于全屏，动态画面下的流畅度立刻不一样了。为此自己实现了 RGB565 帧缓冲层和一套几何原语。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;字体渲染&lt;/strong&gt;。因为要监测的数据很多，但屏幕太小，字体必须和像素足够对齐才能保证清晰度。为此我写了一个字体级 baseline 锚定的文本引擎，现在多行混排稳定得多。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;SPI 超频到 48MHz&lt;/strong&gt;。微雪屏官方建议频率偏保守，考虑到我的脏区刷新的平均带宽需求并不大，所以树莓派和这块屏的配合在 48MHz 下稳定，主循环跑到 15 FPS。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;裸解析触摸事件&lt;/strong&gt;。彻底重写触摸协议和校准方式。现在不依赖任何触摸框架，直接读 &lt;code&gt;input_event&lt;/code&gt;,在保持轻量的同时保持了可控性。现在支持点击容器列表翻页，但是重启按钮还是有点难按。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;双通道指标采集&lt;/strong&gt;。考虑不同监控指标的变化速度差异显著，我让CPU 这类变得快的指标走快通道，磁盘、IP 这类变得慢的走慢通道,同时保证帧率与低功耗。&lt;/p&gt;&#10;&lt;h2 id="最有意思的部分让聊天机器人也能看屏"&gt;最有意思的部分：让聊天机器人也能看屏&#10;&lt;/h2&gt;&lt;p&gt;仪表盘内置了一个 Unix Domain Socket 的 IPC server，配套写了 &lt;a class="link" href="https://github.com/RichLi4307/pi-dashboard-mcp" target="_blank" rel="noopener"&#10; &gt;pi-dashboard-mcp&lt;/a&gt;——一个 MCP server，让 AstrBot（我部署的聊天机器人）可以直接查询系统状态、截屏、切换显示模式。&lt;/p&gt;&#10;&lt;p&gt;也就是说，机器人不用问人「服务器现在什么状态」，它自己看一眼屏幕就知道了。&lt;/p&gt;&#10;&lt;h2 id="尾巴"&gt;尾巴&#10;&lt;/h2&gt;&lt;p&gt;这个仪表盘是树莓派时代的遗物——2026 年 9 月底我把整套服务迁到了一台小新笔记本上，树莓派正式退役。项目代码和这段折腾的记录都留在 GitHub 和本站里，权当纪念。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;树莓派退役之后这块屏我还留着。虽然有些硬件退役了，但它教会我的东西会一直跟着我。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>