usb_lcd

陆伍
昨天发布 /正在检测是否收录...
广告 广告 广告 广告 广告 广告 广告 广告 广告 广告

项目介绍

usb的lcd模块显示内网ip

项目详情

USB 小屏状态显示

这套程序会把当前机器的内网 IP、CPU、内存和磁盘使用率显示到 MSU2_MINI_MG USB 小屏上。

当前效果

  • 上方显示内网 IP
  • 下方显示:

    • CPU 使用率
    • 内存使用率
    • 磁盘使用率
  • 四周保留 1 像素空白
  • 默认每 20 秒刷新一次
  • USB 小屏后插也能自动识别
  • 握手成功后保持串口长连接,断线后自动重新连接
  • 两次画面刷新之间使用厂商 ADC 只读命令维持设备会话

文件说明

运行方式

直接运行源码

sudo python3 display_ip.py

持续刷新

sudo python3 display_ip.py --watch 20

详细日志

sudo python3 display_ip.py -v --watch 20

只测试屏幕

sudo python3 display_ip.py --test

自动识别

程序不会依赖固定 USB 口。

它会自动扫描:

  • VID:PID = 1A86:FE0C
  • 备用 /dev/ttyACM*

所以 USB 插在不同接口上,设备号变化后也能找到。

热插拔行为

在 --watch 模式下:

  • 没插 USB 小屏时,不报错
  • 程序继续等待
  • 你后面再插入,小屏会在下一轮自动显示
  • 设备拔出或通信中断后关闭旧连接,下一轮重新扫描和握手

这适合开机后过一段时间才插小屏的场景。

打包成二进制

生成

./build_binary.sh

输出文件:

dist/usb-lcd-dashboard

打包说明

这个二进制已经把 Python 代码和 Python 侧依赖打进去了,使用时不需要再安装:

  • Pillow
  • psutil
  • numpy

但它仍然依赖系统基础动态库,所以不是完全静态二进制。

兼容性说明

当前这份二进制适合在相近的 Linux 环境上运行。

如果你要覆盖到更老的系统,比如 CentOS 7,建议在目标系统或同级别老环境里重新构建,而不是直接拿当前构建物跨大版本使用。

安装自启动

直接从源码目录安装

./install.sh

它会:

  • 把程序安装到 /usr/local/bin/usb-lcd-dashboard
  • 安装只匹配 1A86:FE0C 的 udev 规则,阻止 ModemManager 把 LCD 当成调制解调器探测
  • 创建并启用 usb-lcd-dashboard.service
  • 每 20 秒刷新一次数据
  • 安装完成后立即启动,之后每次开机自动启动

服务行为

默认启动命令是:

/usr/local/bin/usb-lcd-dashboard --watch 20

也就是每 20 秒刷新一次。

画面刷新间隔内,程序每秒读取一次设备 ADC 通道 9 作为轻量心跳。这与厂商程序的连接维护方式一致,可避免固件因串口长期无命令而停止响应;心跳无确认时会关闭旧连接并重新握手。

生成可迁移 ZIP

发布脚本不会重新编译,而是校验并打包现有的 dist/usb-lcd-dashboard。这样可以避免在较新的 Linux 上重建后,意外提高 glibc 要求,导致 Ubuntu 20.04 无法运行。

在当前机器执行:

./make_release.sh

输出文件:

release/usb-lcd-dashboard-linux-x86_64.zip

ZIP 内只有三个运行所需文件:

  • usb-lcd-dashboard
  • install.sh
  • restart.sh

打包时会自动检查:

  • 二进制是 x86-64 ELF 文件
  • 二进制 glibc 要求不高于 Ubuntu 20.04 的 2.31
  • ZIP 文件结构完整

如果源码有改动,必须先在 Ubuntu 20.04 或更老的兼容构建环境中重新生成 dist/usb-lcd-dashboard,再运行 make_release.sh。

转移到新的 Ubuntu

可以用 U 盘、局域网共享或 scp。例如从构建机器发送到新机器:

scp release/usb-lcd-dashboard-linux-x86_64.zip user@新机器IP:~/

然后在新机器执行:

sudo apt install -y unzip
unzip usb-lcd-dashboard-linux-x86_64.zip -d usb-lcd-dashboard
cd usb-lcd-dashboard
./install.sh

install.sh 会自动请求 sudo 权限,无需单独安装 Python 或 Python 包。

重新启动

解压目录中执行:

./restart.sh

脚本会让 systemd 停止当前进程并重新启动服务。

查看状态

systemctl status usb-lcd-dashboard

查看日志

journalctl -u usb-lcd-dashboard -f

卸载

sudo systemctl disable --now usb-lcd-dashboard.service
sudo rm -f /etc/systemd/system/usb-lcd-dashboard.service
sudo rm -f /etc/udev/rules.d/99-usb-lcd-dashboard.rules
sudo udevadm control --reload-rules
sudo systemctl daemon-reload
sudo rm -f /usr/local/bin/usb-lcd-dashboard

常见问题

1. 没有显示

先看服务状态:

systemctl status usb-lcd-dashboard

再看日志:

journalctl -u usb-lcd-dashboard -n 50 --no-pager

日志出现 LCD 已连接 说明串口握手和方向命令已经确认;出现 已发送到 说明地址命令确认后,完整图像帧已经写入串口。仅有 systemd 的 active (running) 不能说明 LCD 通信成功。

2. 手动运行报权限错误

说明当前用户没有串口权限,直接用 root 运行即可:

sudo ./dist/usb-lcd-dashboard

或者把用户加入 dialout 组后重新登录。

3. USB 设备没插时提示报错

现在的实现里,--watch 模式不会把“没插设备”当异常。

如果你看到错误,一般是:

  • 指定了错误的 --port
  • 串口被别的程序占用
  • 设备异常重枚举

4. CentOS 7 不能直接跑

根因是系统动态库版本差异,不是 Python 代码本身。

建议在 CentOS 7 上重新构建,或者走更老环境构建后再分发。

构建环境备注

当前仓库里已经有:

  • 本地构建产物
  • systemd 安装脚本
  • PyInstaller 打包脚本
  • 可迁移 ZIP 打包脚本

如果源码有改动并且需要重新生成兼容二进制,按下面顺序:

  1. 在 Ubuntu 20.04 或 glibc 不高于 2.31 的 x86-64 环境中构建
  2. 确认 python3、PyInstaller 和项目依赖可用
  3. 执行 ./build_binary.sh
  4. 执行 ./make_release.sh,通过兼容性校验后生成发布 ZIP

⬇️ 下载地址

喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
OωO
取消
广告