Repository navigation
Releases: duma520/MSU2_MINI_V2
Release list
v5.40.0
最新版是 v5.40.0(MSU2_MINI_V2.py 的 PROGRAM_VERSION),相比 v5.38.0,中间经历了 v5.39.0 和 v5.40.0 两次更新。核心更新内容如下:
v5.39.0(2026-09-23)—— 新增「相邻单位大反差」色系
背景:用户反馈“现有色系相邻的颜色太近,看起来变化不明显”(例如默认马卡龙色系是粉→蜜桃→鹅黄→薄荷绿→天蓝这种渐变)。
改动:
- 色系表
SPEED_UNIT_SCHEMES从 7 套 → 10 套,新增 3 套专门拉大相邻档位视觉差异的色系:- 马卡龙(反差色):保留马卡龙柔和质感,但相邻档做成暖冷/互补交替(玫瑰粉 → 青绿 → 蛋黄 → 紫蓝 → 珊瑚橘)
- 高反差(红青黄蓝橙):互补色硬交替
- 明暗反差(亮暗交替):白 → 深蓝 → 亮黄 → 深红 → 亮青绿
- 新增自查/测试用函数(不在渲染路径上):
_speed_color_contrast(c1, c2):反差度 = 色相环最短距离 + 明度差_speed_scheme_min_contrast(name):一套色系里相邻档位的最小反差度- 常量
SPEED_UNIT_CONTRAST_SCHEMES
- 量化对比(最小相邻反差):默认马卡龙 0.130 → 马卡龙(反差色)0.670 / 高反差 0.702 / 明暗反差 0.801,均 ≥ 默认的 5 倍。
- 默认仍为「马卡龙(默认)」,老配置已存颜色不变;测试扩到 130 项。
v5.40.0(2026-09-23)—— 色系再扩到 18 套
背景:用户要求“增加彩虹七色、红绿交替(色盲友好),还有更多的色系”。
改动:
- 色系表从 10 套 → 18 套,新增 8 套:
- 彩虹七色:上行/读 红→橙→黄→绿→青,下行/写 黄→绿→青→蓝→紫,两行合起来正好红橙黄绿青蓝紫七色
- 彩虹(高饱和等距):跳一档取样,比逐色相邻更“跳”(0.301)
- 红绿交替(色盲友好):奇档红系、偶档绿系交替,相邻档明暗差也大,红绿色盲分不出红/绿时还能靠明暗分辨(0.909)
- 蓝橙交替(色盲友好):蓝橙是公认最稳的色盲安全对(0.817)
- 冰火(冷暖交替)(0.634)
- 霓虹赛博
- 莫兰迪(低饱和)
- 大地色
- 新增常量
SPEED_UNIT_COLORBLIND_SCHEMES(名称含「色盲友好」的色系,供测试核对)。 - 默认仍为「马卡龙(默认)」,其余色系与老配置颜色不变;设置页「色系」下拉框自动多出这 8 项。
- 测试扩到 150 项全过,新增断言包括:
- 色系 ≥18 套且 8 个新名字都在
- 色盲友好恰好 2 套
- 彩虹七色两行并集正好 7 色
- 色盲友好色系相邻档「色相差 ≥0.35 或 明暗差 ≥0.20」
- 红绿交替主通道 = 红/绿/红/绿/红
- 蓝橙交替主通道 = 蓝/红/蓝/红/蓝
- 默认第 1 套仍是「马卡龙(默认)」
总结:v5.38 → v5.40 的变化
| 项目 | v5.38.0 | v5.40.0 |
|---|---|---|
| 色系套数 | 7 套 | 18 套 |
| 默认色系 | 马卡龙(默认) | 马卡龙(默认)(不变) |
| 新增色系 | — | 反差色 3 套 + 彩虹/色盲友好/风格化 8 套 |
| 色盲友好色系 | 无 | 2 套(红绿交替、蓝橙交替) |
| 反差度自查函数 | 无 | _speed_color_contrast / _speed_scheme_min_contrast |
| 色盲友好常量 | 无 | SPEED_UNIT_COLORBLIND_SCHEMES |
| 测试项数 | 116 项 | 150 项 |
核心一句话:v5.39 和 v5.40 两版都是在扩充「速度单位换色」的色系表——v5.39 加了 3 套“相邻档位大反差”色系解决“变化不明显”,v5.40 再加 8 套(含彩虹七色和 2 套色盲友好色系)到共 18 套,其余功能与 v5.38 一致。

v5.38.0
最新版从 5.10.0 到 5.38.0 经历了 28 个版本的迭代,主要更新可归纳为以下几大块:
一、显示与渲染相关
1. 画面倾斜/斜切问题(贯穿多个版本的重点)
- v5.29.0:整帧发送改为「LCD 地址窗口 + 帧数据」拼成同一条字节流,一次
SER_rw发出,消除窗口与数据之间的空档(空档期内按键 ADC、心跳、API 命令插入会导致解析错位)。 - v5.30.0:引入串口事务模型(
_serial_begin/_serial_end/_serial_transaction_busy),帧发送期间 + 发送后静默期(默认 150ms)内其他线程避让;帧写失败自动整帧重发;SER_Write短写续写;方向看门狗清屏后只对静态页强制重绘。 - v5.35.0:行级地址重锚(
_lcd_row_anchor_bytes),每行开头重新下发地址窗口,提交按行对齐切分。任何一次错位后果被锁死在 1 行以内,整幅斜切在结构上不再可能(量化:丢包时旧版错 4389 像素/40 行 → 新版 143 像素/1 行)。
2. 速度单位换色(柱状图)
- v5.27.0:新增「速度单位换色」——网络流量/磁盘读写柱状图按 MB/s 换色。
- v5.36.0:改为逐根柱子判断(同一行可同时出现原色与兆色)。
- v5.37.0:升级为「单位色 + 换色门槛」——支持自定义条件(大于/小于/等于等,可随意增删多条),单位色分
<1K(B)/KB/MB/GB/TB五档。 - v5.38.0:单位色默认就是五种不同的马卡龙色(新增色系表
SPEED_UNIT_SCHEMES,7 套色系可选),设置页新增「色系」下拉框。
3. 画面刷新健康度与每屏健康检查(v5.26.0)
- daemon 渲染循环改为逐屏 try/except(单屏异常不再拖死其他屏)。
- 新增画面刷新状态(正常/停滞/串口写入失败)显示在状态栏与设备信息页。
- 每屏独立通信心跳、线程看护(截屏/处理线程死了自动重启)。
- 方向看门狗重置后补
state_change强制整帧重绘(静态页不再黑)。
二、通信与设备稳定性
1. 设备复位自恢复(v5.28.0)
- 设备复位后会持续回上电横幅
\x00MSNxx,旧逻辑会把失败计数反复清零 → 永不判掉线 → 屏幕黑着却显示「已连接」。 - 现在识别到横幅立即判掉线并自动重连重初始化,信息框明确提示。
- 通信错误日志统一限频(每 5~10 秒一条),不再刷爆控制台。
2. 多屏断开问题修复(v5.22.0)
- 端口归属与主设备槽位分离:daemon 按 COM 端口复用已登记该端口的设备对象,UI/API 切屏不再改写
_primary_device。 - 通信失败容错:连续失败 3 次才判掉线(
COMM_FAIL_LIMIT),单次成功通信清零计数。 manage_task启动时显式绑定设备,避免「检查 A 屏、读写 B 屏串口」。
3. 单实例保护(v5.25.0)
- 命名互斥体
MSU2_MINI_V2_single_instance,第二个实例启动时把已运行窗口切到前台或弹提示后退出。 - 可通过
--allow-multiple跳过。
三、硬件监控数据源
- v5.11.0:新增 AIDA64 数据源(读取共享内存
AIDA64_SensorValues,需 AIDA64 后台运行并开启共享内存)。 - v5.12.0:新增 系统原生数据源(psutil/WMI/nvidia 程序内直读,零后台进程)。
四、DeepSeek 余额显示页(v5.13.0 ~ v5.21.0)
- 新增第 28 个页面「DeepSeek余额」。
- v5.14.0:仅显示官方返回字段(总余额/赠送/充值/币种/可用),去掉估算。
- v5.15.0:字体自适应屏幕(默认)+ 手动字号。
- v5.16.0:设置持久化全面修复(显示信息框、设为自动连接、屏幕分辨率、API/MQTT 即时保存、DeepSeek Key 失焦保存)。
- v5.17.0:主控页控件按设备配置恢复。
- v5.18.0:对齐方式(垂直居中/向上对齐)。
- v5.19.0:显示项自定义模板(
%1=值、%2=币种)。 - v5.20.0 / v5.21.0:字号自适应优化(基于内容宽高,单行上限 50)。
五、Webhook 对接(v5.8.0)
- 接收(发出的 Webhook):独立接收服务器(默认端口 8633),外部聊天服务 POST 消息到
/webhook/incoming,消息显示到屏幕(叠加显示,超时自动恢复)与信息框。 - 发送(传入的 Webhook):
webhook_send把文本 POST 到配置的 URL(Synology Chat / Discord / 钉钉等)。 - 设置全部实时自动保存。
六、gRPC / MQTT 接入
- v5.9.0:新增 gRPC 接入(端口 = api_port+4,服务
msu2.Msu2Api,提供Execute投屏命令与WatchFrame流式帧)。 - v5.10.0:新增 MQTT 接入(连接外部 Broker,命令/响应/帧主题)。
注意:5.10.0 的 MQTT 接入在最新版中继续保留并完善。
七、其他重要更新
| 版本 | 内容 |
|---|---|
| v5.7.0 | 能效模式(1~5级)、静态页不重复刷新、API 附加协议开关、UI 显隐控制、硬件监控惰性加载 |
| v5.16.0 | 设置持久化遗漏全面修复(信息框/自动连接/分辨率/API-MQTT 即时保存/DeepSeek Key 失焦保存) |
| v5.17.0 | 主控页控件按设备配置恢复(_apply_main_ui_to_config) |
| v5.22.0 | 显示信息框不持久、两块小屏总有一块自动断开 |
| v5.23.0 | 编译脚本完善 + 修正「仅编译后才出现」的 3 处问题(子进程黑框、开机自启注册命令、编译脚本) |
| v5.24.0 | 无控制台运行日志 + 串口连不上原因提示 |
| v5.25.0 | 单实例保护 |
| v5.26.0 | 一块屏不显示却显示已连接、预览也正常 |
| v5.27.0 ~ v5.38.0 | 速度单位换色系列、画面倾斜根治系列 |
八、总结:最新版(v5.38.0)相对 5.10.0 的核心增强
- 稳定性:单实例保护、设备复位自恢复、多屏断开修复、画面刷新健康度、串口事务模型、行级地址重锚。
- 显示:速度单位换色(逐柱、单位色、换色门槛、色系)、DeepSeek 余额页、静态页不重复刷新。
- 数据源:硬件监控三数据源(LibreHardwareMonitor / AIDA64 / 系统原生)。
- 接入协议:在 5.10.0 已有的 MQTT 基础上,新增 gRPC(5.9.0 已引入,5.10.0 之后继续保留)。
- 设置持久化:全面加固,新增多项设置保存/恢复。
- 编译发布:Nuitka 编译脚本完善,解决「仅编译后才出现」的黑框、自启动、日志等问题。
v5.10.0
5.10.0 版本在 5.8.0 的基础上,主要进行了功能扩展,新增了两个重量级的接入协议:gRPC 和 MQTT。这使得该工具的外部接入能力从 HTTP/WebSocket/TCP/UDP 等常见协议,进一步扩展到高性能 RPC 和物联网消息协议领域。
下面是具体的新增内容汇总:
🚀 主要新增功能
-
新增 gRPC 接入协议 (v5.9.0)
- 核心功能:在“设置 → API接入 → 附加接入协议”中新增了 gRPC 选项(默认关闭)。启动后,会在
api_port + 4(默认 8636)端口上提供msu2.Msu2Api服务。 - 服务方法:
Execute:执行投屏命令,支持text/screen/clear/page/mirror/quit等全部命令,JSON 格式与 HTTP 接口完全一致。WatchFrame:服务器端流式推送指定屏幕的最新外部投屏帧(RGB888 格式),有变化才推送,适合实时画面传输。
- 易用性:仅需
grpcio库,无需grpcio-tools。程序启动时会自动在程序目录生成msu2_api.proto文件,方便外部程序生成客户端代码。如果未安装grpcio,程序会自动跳过并提示。
- 核心功能:在“设置 → API接入 → 附加接入协议”中新增了 gRPC 选项(默认关闭)。启动后,会在
-
新增 MQTT 接入协议 (v5.10.0)
- 核心功能:在“设置 → API接入 → 附加接入协议”中新增了 MQTT 客户端选项(默认关闭)。程序可以作为一个 MQTT 客户端,连接到配置的外部 Broker(如 Mosquitto、EMQX)。
- 工作流程:
- 接收命令:订阅配置的“命令主题”(默认
msu2/command),接收并执行 JSON 格式的投屏命令(与 HTTP 命令一致)。 - 发送响应:将命令执行结果发布到“响应主题”(默认
msu2/response)。 - 推送屏幕帧:低频(有变化才发,≥0.5s 节流)将屏幕帧(RGB888 原始字节)发布到“帧主题”(默认
msu2/frame)。
- 接收命令:订阅配置的“命令主题”(默认
- 配置项:在设置中新增了“MQTT 接入”分组,可配置 Broker 地址、端口、用户名、密码以及上述三个主题。
- 依赖:需要
paho-mqtt库,未安装会自动跳过并提示。
📝 文档与元数据同步
- API 文档更新:
- 在
/api/protocols接口的返回列表中,新增了gRPC和MQTT协议条目,显示地址和依赖状态。 - 更新了网页控制台(
/api)的“文档”标签页,在“其他接入协议”一节中加入了 gRPC 和 MQTT 的说明和 Python 示例代码。 - OpenAPI JSON 文档(
/api/openapi.json)的info.description字段中,也增加了对这两个新协议的描述。
- 在
- 程序变更记录:
PROGRAM_CHANGELOG中新增了 v5.9.0 和 v5.10.0 的详细更新日志。
🔄 与 5.8.0 版本的对比总结
| 功能模块 | v5.8.0 | v5.10.0 |
|---|---|---|
| 核心接入协议 | HTTP, WebSocket, TCP, UDP, ZeroMQ, 命名管道, Unix Socket, 热文件夹 | 新增 gRPC, MQTT |
| gRPC 支持 | ❌ 不支持 | ✅ 支持 (msu2.Msu2Api 服务) |
| MQTT 支持 | ❌ 不支持 | ✅ 支持 (连接外部 Broker) |
| API 文档 | 包含 Webhook 说明 | 在文档中新增了 gRPC 和 MQTT 的说明和示例 |
| 自动发现 | /api/protocols 列出已有协议 |
/api/protocols 新增 gRPC 和 MQTT 条目 |
| 依赖处理 | 对 pyzmq 进行了可选依赖处理 |
对 grpcio 和 paho-mqtt 采用了相同的“自动跳过并提示”策略 |
总而言之,5.10.0 版本在保持原有功能稳定和优化的基础上,极大地丰富了程序的“可编程性”和“可集成性”,使其能更好地融入现代微服务和物联网架构中。
v5.8.0
对比 5.7.0 和 5.8.0 两个版本的代码文件,5.8.0 版本的核心更新是新增了完整的 Webhook 对接功能,用于与 Synology Chat、Discord、钉钉等聊天机器人进行双向集成。
除了这个主要功能,5.8.0 还包含了一系列微小的 UI 改进和修复。以下是主要更新内容的总结:
一、核心新功能:Webhook 对接 (★ 2026-08-27)
这是 5.8.0 版本最重大的更新,它让 USB 副屏工具具备了与外部聊天服务交互的能力。
-
接收消息(“发出的 Webhook”):
- 程序内置了一个独立的 Webhook 接收服务器(默认端口
8633)。 - 外部服务(如 Synology Chat 的“发出的 Webhook”)可以将消息
POST到http://127.0.0.1:<端口>/webhook/incoming。 - 程序接收到消息后,会自动在副屏上叠加显示(显示一段时间后自动恢复原页面),同时消息也会记录在程序底部的信息框中。
- 兼容性:支持 Synology Chat、Discord、钉钉等多种服务的 JSON 格式,能自动从
text、content、message等字段中提取文本,并解析attachments和embeds。 - 安全:支持通过请求头
X-Webhook-Token或 URL 参数?token=设置接收令牌。
- 程序内置了一个独立的 Webhook 接收服务器(默认端口
-
发送消息(“传入的 Webhook”):
- 用户可以在设置中配置一个或多个发送目标 URL(每行一个)。
- 程序可以通过四种方式触发向这些 URL 发送消息:
- 设置界面中的“测试发送”按钮。
- API 接口
POST /api/webhook/send。 - 通过统一命令协议(TCP/UDP/WebSocket 等)发送
type=webhook_send命令。 - 向 Webhook 服务器自身的
/webhook/send端点发送请求。
- 所有发送操作均在后台线程执行,不会阻塞主界面,并有收发日志可供查询(
GET /api/webhook/status)。
-
持久化与自动化:
- 所有 Webhook 相关设置(
webhook_enable,port,urls,auto_display,display_seconds,receive_token)都会自动保存,程序下次启动时会自动恢复并启动服务器。 - 在设置 → Webhook 页面中,可以独立配置启用/禁用、端口、令牌、显示时长等所有参数。
- 所有 Webhook 相关设置(
-
文档与测试:
- API 文档(OpenAPI 规范)中新增了 Webhook 相关接口的说明(第 12 节)。
- 代码中新增了
_scaffold/smoke_test_webhook.py冒烟测试脚本。
二、其他改进与修复
虽然没有明确指出,但从代码结构和版本号来看,5.8.0 也包含了一些在 5.7.0 基础上的小幅优化:
- 版本号更新:程序版本号从
5.7.0更新为5.8.0,构建日期为2026-08-27。 - API 文档更新:
_build_openapi_doc()和_API_DOC_HTML中都增加了关于 Webhook 的说明章节。 - UI 微调:在程序的“设置”页面中,新增了名为 “Webhook” 的选项卡,用于集中管理所有相关设置。
总结
简单来说,5.8.0 版本是一个以“Webhook 集成”为主题的发布。它让 USB 副屏从一个纯粹的本地显示工具,升级为一个可以与外部聊天系统(如 Synology Chat 机器人)进行双向信息传递的小型 IoT 终端。您既可以将聊天中的消息推送到副屏,也可以将副屏上的事件(例如,某个监控值触发告警)推送到聊天频道。
v5.7.0
相对于 5.4.0 版本,5.7.0 版本的更新内容非常丰富且重要。可以将其概括为一次 “深度节能与长期稳定挂机” 的重大优化。
简单来说,5.7.0 版本 不再是一个简单的升级,而是一个专为“长期7x24小时挂机”深度优化的新版本。它通过引入“能效模式”和大量“降频/惰性加载”策略,在保证核心功能完整的前提下,显著降低了 CPU、内存和串口带宽的占用,让程序在后台运行时几乎感知不到它的存在,同时解决了从静态页空转、API 协议占用到程序启动配置丢失等一系列长期痛点。
以下是核心更新的几个方面:
-
新增“能效模式”(最核心更新)
- 这是一个全新的功能,在“设置 → 通用”里可以找到。
- 作用:这是一个全局性的“省电/省资源”开关,可以设置 1~5 级(1级最省资源)。
- 效果:开启后,程序会自动降低屏幕镜像帧率、延长数据刷新间隔、降低后台轮询频率,从而显著减少 CPU 占用。非常适合将副屏工具作为“挂机”应用长期运行,而对前台程序和电脑性能影响降到最低。
-
“静态页不重复刷新”——大幅降低空载资源占用
- 以前,像“关于”、“照片”、“纪念日”、“待办”这种内容长期不变的页面,程序也会每秒钟重复刷新屏幕,浪费资源。
- 现在:程序变得“聪明”了。它会记住这些页面的“内容指纹”,只要内容没变(比如待办列表没改、日期没变),就完全跳过渲染和串口发送,只在后台低频等待。这个改动对长期在静态页面挂机非常友好。
-
“API 附加接入协议开关”——按需关闭后台服务
- API 服务器提供了很多强大的接入方式(TCP、UDP、ZeroMQ、命名管道等),但其中一些后台服务会持续占用少量内存和 CPU。
- 现在:在“设置 → API接入”中,你可以单独关闭不需要的协议(比如 UDP、ZeroMQ),只保留最常用的 HTTP/WebSocket 和热文件夹。这为不需要完整 API 功能的用户节省了系统资源。
-
“UI 显隐控制”——让界面更清爽
- 现在你可以自由控制界面元素的显示:
- 在“设置 → 通用”中可以隐藏底部的“信息框”,让主界面更简洁。
- 关闭“实时预览”后,主控页的整个预览区域会整块隐藏,而不是只停止刷新但仍留白。
- 在“电视墙”设置中,可以关闭“在显示器标签内显示实时内容”,让显示墙只显示设备名占位,节省渲染开销。
- 现在你可以自由控制界面元素的显示:
-
1 级能效深度优化——全方位降频
- 当能效模式设置为 1 级时,程序的“降频”策略达到了极致:
- 进程空闲优先级:程序会主动降低自己进程的优先级(
BELOW_NORMAL),把计算资源优先让给前台应用。 - 硬件监控惰性加载:LibreHardwareMonitor 这个功能(用于显示硬件温度、风扇等)不再在程序启动时加载,而是仅在你第一次进入“仪表盘”、“硬件详情”或“自定义显示”页面时,才在后台加载。对于不使用这些页面的用户,这能显著减少内存占用和启动时间。
- 网络请求间隔放大:天气、热搜等网络刷新 TTL 会按 4 倍放大,减少后台网络请求。
- 修复息屏空转BUG:修复了以前屏幕进入息屏状态后,后台线程还会空转消耗 CPU 的问题,现在息屏后会进入有效等待。
- 进程空闲优先级:程序会主动降低自己进程的优先级(
- 当能效模式设置为 1 级时,程序的“降频”策略达到了极致:
总的来说,如果你只是偶尔用用,5.7.0 和 5.4.0 用起来可能感觉差别不大;但如果你打算把 USB 副屏工具作为“长期后台挂机”服务运行,那么 5.7.0 版本的优化会让电脑的 CPU 占用和响应速度有明显改善。
v5.4.0
从 v4.6.4 到 v5.4.0 的主要更新内容。由于这两个版本跨度较大(包含从 Tkinter 到 PySide6 的完整迁移),我将按功能模块分类说明:
🎯 核心架构变化
1. UI 框架迁移(v5.0.0)
- Tkinter → PySide6 (Qt 6.11):界面更现代、布局更规范
- 业务逻辑层(串口/渲染/配置/API)全部复用,确保功能一致性
- 保留旧版
MSU2_MINI_V2.py作为回退
2. 多屏管理重构(v4.7.0 - v5.0.0)
- 每屏独立标签页:主控页按屏幕分标签(屏幕1/屏幕2…),彻底隔离各屏状态
- 每屏三层结构:主控 | 设置 | 设备信息(每屏一套独立控件)
- 联动机制:主控标签 ↔ 设置标签 ↔ 顶部设备下拉框 四处双向联动
- 配置隔离:各屏控件值绑定本屏配置,从结构上杜绝多屏「串台」
🖥️ 新增功能
3. 显示墙 / 电视墙(v5.1.0 - v5.3.0)
- 第一层新增「电视墙」标签页:中控 | 电视墙 | 关于
- 显示墙预览:按设置的行×列网格实时显示所有小屏预览
- 快速布局:根据已连接屏幕数量提供横向/纵向排布
- 两种渲染方式:控件方式(每格QLabel)/ 画布方式(QPainter统一绘制,更省资源)
- 性能优化:numpy降采样 → 单屏处理约19ms→1~2ms;刷新间隔1秒
4. 界面持久化(v5.3.0)
- 窗口大小/位置/最大化状态自动保存(
MSU2_MINI_ui.json) - 上次停留的第一层标签自动恢复
- 退出时强制保存显示墙设置
5. 配色方案编辑友好化(v5.4.0)
- 已选颜色以色块列表展示(点击移除)
- 调色盘选色 + 常用色板点选 + 从其他配色方案添加颜色
- 新增配色方案在管理页立即生效,不再空白
🔧 重要修复
6. 多屏/配置相关修复
| 问题 | 修复 |
|---|---|
| 切换设备后设置显示为默认值 | 控件自动同步设备已保存配置 |
| 退出时设置未写入文件 | 等待配置写盘完成再结束 |
| 切换设备时API服务器反复重启 | 仅同步配置,不重启服务器 |
| 切换设备卡顿 | 批量刷新控件抑制落盘,统一保存 |
| 显示墙布局下次启动无法恢复 | 将保存值作为期望布局缓存,待连接屏数足够时自动应用 |
7. 摄像头/窗口下拉框
- 改为后台枚举(启动不再卡顿)
- 点击下拉框时后台刷新
- 切换设备后不再残留上一屏的值
8. 屏幕序号检测(v4.6.4→v5.x)
- 触发后所有副屏同时显示各自屏号(屏幕1/屏幕2…)
- 显示时长后自动恢复原画面(如热搜)
- 触发方式:设置 → API接入 的「检测屏幕」按钮 / API
/api/screen/id
9. 强制投屏(v4.6.3→v5.x)
- 设置 → API接入 可勾选「强制投屏」
- 未选择「API投屏」页也可投屏(任何页面都会被投屏覆盖)
- 停止投屏后自动返回投屏前的页面(如热搜)
- 按设备保存,多屏各自独立
📡 API 扩展(v4.6.2→v5.x)
新增信息/查询接口
GET /api/health 健康检查
GET /api/version 版本信息
GET /api/protocols 列出全部接入协议与地址(自动发现)
GET /api/status 综合运行状态
GET /api/config 读取配置
GET /api/screenshot 获取当前屏画面(PNG+RGB888)
新增控制/配置接口
POST /api/page/next 翻下一页
POST /api/page/prev 翻上一页
POST /api/key 模拟按键
POST /api/orientation 设置LCD方向
POST /api/marquee 跑马灯投屏
POST /api/config/set 白名单改配置(40+字段)
POST /api/device/select 切换活跃屏
POST /api/device/refresh 刷新设备
POST /api/notify 状态栏通知
POST /api/quit 退出程序(需force)
POST /api/screen/id 屏幕序号检测
新增接入协议
- TCP Socket(JSON行,端口+1)
- UDP(JSON报,端口+2)
- ZeroMQ(端口+3,需pyzmq)
- Windows命名管道(
\\.\pipe\MSU2_MINI_V2_api) - Unix Domain Socket(
api_unix.sock) - 热文件夹(
hotfolder/,放入图片/文本即投屏) - stdin/stdout管道
- SSE事件流(
/api/events)
统一命令执行器
所有协议命令格式与 HTTP/WebSocket 完全一致(type 为 screen/text/clear/slideshow/stop/page/mirror,支持 device 指定目标屏)
🎨 页面内容增强
10. 各页面新增背景/字体颜色配置(可配色方案)
- 跑马灯、天气、行情、热搜、番茄钟、世界时钟、纪念日、待办
- 进程、硬件详情、仪表盘、磁盘读写、网络流量
11. 配色方案系统(v4.5.9→v5.x)
- 内置 260+ 个色系
- 支持新增/编辑/删除自定义方案(按设备保存)
- 混合配色:不同位置可从不同方案选色,一键存为新方案
📊 版本演进时间线
| 版本 | 日期 | 核心变化 |
|---|---|---|
| v5.4.0 | 2026-08-18 | 配色方案编辑友好化;修复管理页空白 |
| v5.3.0 | 2026-08-18 | UI状态持久化(窗口几何+标签) |
| v5.2.0 | 2026-08-17 | 显示墙性能优化(numpy降采样) |
| v5.1.2 | 2026-08-17 | 显示墙布局恢复修复 |
| v5.1.1 | 2026-08-17 | 显示墙设置独立配置文件 |
| v5.1.0 | 2026-08-17 | 新增电视墙标签页 |
| v5.0.0 | 2026-08-16 | Tkinter → PySide6 迁移 |
| v4.8.0 | 2026-08-16 | 每屏独立主控标签 |
| v4.7.1 | 2026-08-16 | 多屏联动/API服务器重启修复 |
| v4.7.0 | 2026-08-16 | 设置/主控自动同步 |
| v4.6.4 | 2026-08-16 | 屏幕序号检测 |
🔄 旧版兼容
- 原 Tkinter 版保留为
MSU2_MINI_V2.py可回退 - 配置文件向后兼容(自动迁移)
- 所有业务逻辑层(串口/渲染/配置/API)与旧版一致
总结:从 v4.6.4 到 v5.4.0,程序完成了完整的 UI 现代化(Tkinter→Qt)、多屏管理彻底重构、显示墙/电视墙功能、界面持久化、配色方案优化、API 大幅扩展(协议+接口),同时修复了大量多屏串扰问题。功能更丰富、界面更现代、操作更流畅。
v5.3.0
从 4.6.4 版本 到 5.3.0 版本,这个程序都经历了哪些重要的更新。
这次更新非常巨大,可以看作是程序的一次重大重构和功能扩展,主要围绕 UI 界面的现代化迁移 和 多屏管理的智能化 展开。
以下是核心更新内容,按照重要性和功能领域分类:
🏗️ 一、核心架构与UI革命 (最大变化)
这是5.3.0版本最根本的改变,所有其他新功能都建立在这个基础之上。
-
GUI 框架迁移:
- 4.6.4:使用
Tkinter(Python自带的标准GUI库)。 - 5.3.0:完全迁移到
PySide6(Qt for Python)。这是一个重大的架构升级,带来了更现代、响应更快的界面,更好的布局管理,以及原生支持高分屏。这使得程序界面从“实用但稍显老旧”一跃变得“现代且专业”。
- 4.6.4:使用
-
UI布局全面重组 (三层结构):
- 4.6.4:界面主要是单层结构,所有设置和控件都在一个长窗口中。
- 5.3.0:引入了清晰的三层导航结构,极大地提升了多屏管理和操作效率。
- 第一层 (顶部标签):
中控|电视墙|关于 - 第二层 (中控标签内):
屏幕1|屏幕2|屏幕3... (每个已连接的屏幕都有一个独立标签) - 第三层 (每个屏幕标签内):
主控|设置|设备信息(每个屏幕都有自己独立的这三页设置)
- 第一层 (顶部标签):
✨ 二、全新的「电视墙」功能 (5.1.0+)
这是5.3.0版本中一个非常亮眼的新增功能,专为拥有多个副屏的用户设计。
- 功能描述:在第一层的“电视墙”标签页中,可以按照自定义的行列网格,实时预览所有已连接副屏的显示内容。
- 设置灵活:提供了“快速布局”(横向/纵向排布),也可以手动调整行数和列数。
- 性能优化:为了应对多屏时可能出现的卡顿,采用了两种渲染方式:
- 控件方式:每格一个QLabel,直观但耗资源。
- 画布方式:用一个统一的画布绘制所有预览,极大地节省了资源,在多屏时更加流畅。
- 状态持久化:电视墙的布局设置(行/列/显示方式)会被自动保存,下次启动程序时恢复,解决了之前布局无法保存的问题。
🎛️ 三、多屏管理全面独立化 (5.0.0)
这个更新从架构上解决了多屏使用时“配置串台”、“操作互相影响”的根本问题。
- 每屏独立配置:每个屏幕不仅在逻辑上独立,在UI上也是完全分离的。切换“屏幕1”和“屏幕2”的标签,所有的控件(颜色、页面、方向、FPS等)都会切换到对应屏幕的独立配置。
- 解决“串台”问题:无论是切换页面、调整方向还是修改任何设置,都只影响当前选中的屏幕,彻底杜绝了“屏幕2显示成屏幕1页面”这类问题。
- API服务器独立:切换屏幕时,API服务器不再被反复重启,操作更流畅。
🖥️ 四、UI/UX 体验优化
- 界面语言切换:页面名称和方向名称现在支持中文/英文切换。
- 崩溃日志:程序崩溃时会自动生成
crash_log.txt文件,方便排查问题。 - 关于页面:现在可以查看详细的版本更新说明 (
PROGRAM_CHANGELOG)。 - 开机自启动:可以在设置中直接开启/关闭开机自启动。
- 配置导入/导出:方便备份和迁移设置。
🐛 五、关键Bug修复
- 修复UI卡顿:摄像头列表和窗口列表改为后台线程枚举,避免了启动和点击下拉框时的界面卡顿。
- 修复串口误报:修正了
SER_rw函数在瞬时异常时误判设备掉线、导致屏幕反复重连闪烁的问题。 - 修复配置丢失:退出程序时,会等待配置真正写入磁盘后再退出,确保所有设置都被保存。
📊 总结:进化路径一览
| 功能领域 | 4.6.4 版本 | 5.3.0 版本 | 主要变化 |
|---|---|---|---|
| 核心GUI | Tkinter | PySide6 (Qt) | 革命性升级,界面更现代、性能更好 |
| UI布局 | 单层长窗口 | 三层结构 (中控/电视墙/关于 -> 屏幕标签 -> 主控/设置/设备信息) | 彻底重构,多屏管理更清晰 |
| 多屏管理 | 逻辑独立,但UI混杂 | UI与逻辑完全独立 (每屏一套控件) | 解决“配置串台”问题 |
| 电视墙 | ❌ 无 | ✅ 全新功能 | 新增功能,可实时预览所有屏幕 |
| 性能 | 多屏时可能卡顿 | 针对多屏优化 (画布渲染、后台加载) | 提升多屏场景下的流畅度 |
| 设置保存 | 可能因程序退出过快而丢失 | 确保退出前写入完成 | 提高稳定性 |
| API服务器 | 切换设备时可能重启 | 切换设备时不重启 | 操作更流畅 |
简而言之,5.3.0 版本是一次全面进化,将程序从一个功能丰富的“工具”升级为一个现代化、稳定、且用户友好的“平台”,特别是为多屏用户带来了质的飞跃。
v4.6.4
这是 MSU2_MINI_V2 - 4.6.4 API+3.py 相对于 MSU2_MINI_V2 - 4.5.10.py 的新增和更新内容:
总体概述
4.6.4 版 是一个重大功能更新,在保持原有核心功能稳定的基础上,重点引入了 “API投屏” 功能,允许其他程序通过多种本地协议(HTTP/WebSocket/TCP/UDP等)与副屏工具交互,实现自定义投屏。同时,它极大地扩展了软件的可编程性和接入方式。
1. 核心新功能:API 投屏服务器
这是 4.6.4 版最核心的更新。
- 新增
API_PAGE_ID(26) 页面:在页面列表中添加了“API投屏”页。 - 内嵌多协议服务器:启动了一个本地服务器(默认
127.0.0.1:8632),支持多种接入协议:- HTTP REST API:提供标准的 JSON 接口。
- WebSocket:支持二进制帧(原始 RGB888)和 JSON 命令,适合高频推流。
- TCP Socket:JSON 行协议(端口 +1)。
- UDP:JSON 数据报(端口 +2)。
- ZeroMQ:REP/REQ 模式(端口 +3,需安装
pyzmq)。 - Windows 命名管道:
\\.\pipe\MSU2_MINI_V2_api。 - Unix Domain Socket:
api_unix.sock。 - 热文件夹:监听程序目录下的
hotfolder/目录,放入图片或文本文件即可自动投屏。 - stdin/stdout 管道:支持通过管道输入 JSON 命令。
- 统一命令执行器 (
api_execute_command):所有协议(HTTP/WS/TCP/UDP等)共享同一套命令处理逻辑,保证了行为一致性。 - OpenAPI 3.0 规范:自动生成
api_openapi.json文件,并提供了/api/openapi.json端点,方便其他程序自动解析和对接。 - 网页投屏控制台:在浏览器中打开
http://127.0.0.1:8632即可看到一个功能完整的控制台页面,用于:- 投屏文本、图片。
- 多图轮播。
- 选择本机窗口进行投屏。
- 查看 API 文档。
2. API 功能详解
新版本提供了丰富的 API 端点,主要分为以下几类:
- 投屏类接口:
/api/screen(POST):投屏整帧图像,支持image(base64图片)、rgb888(base64原始RGB数据)、pixels(扁平RGB列表) 三种格式。/api/screen/raw(POST):直接发送原始 RGB888 字节流,开销最低。/api/text(POST):投屏文本,可设置字体、颜色、位置等。/api/marquee(POST):将文本以跑马灯形式投屏并切换到跑马灯页面。/api/mirror(POST):将指定窗口(通过 hwnd)投屏到副屏。/api/slideshow(POST) &/api/slideshow/stop:多图轮播投屏。
- 控制类接口:
/api/page(POST)、/api/page/next(POST)、/api/page/prev(POST):切换页面。/api/clear(POST):清空投屏帧。/api/stop(POST):停止所有投屏(停止轮播、清屏、回到API投屏页)。/api/key(POST):模拟按键(下翻页/上翻页/切换方向)。/api/orientation(POST):设置 LCD 显示方向。/api/device/select(POST):切换当前活跃的副屏设备(多屏场景)。/api/config/set(POST):按白名单修改配置(如跑马灯文本、页面等),并立即保存生效。/api/quit(POST):退出程序(需force: true)。
- 信息查询类接口:
/api/health(GET):健康检查。/api/version(GET):获取程序版本和元数据。/api/protocols(GET):列出所有可用的接入协议及其地址。/api/status(GET):获取综合运行状态(设备、页面、投屏中内容等)。/api/config(GET):读取指定屏的完整配置。/api/screenshot(GET):获取当前屏的画面截图(PNG 和 RGB888 格式)。/api/devices(GET):列出所有已连接的副屏设备。
3. 关键功能增强与新增
- 强制投屏 (
api_overlay):在设置 → API接入中新增“强制投屏”选项。开启后,在任何页面(如时间、热搜)都可以直接显示来自 API 的投屏内容,停止投屏后自动返回之前的页面,无需手动切换到“API投屏”页。 - 屏幕序号检测 (
screen_id):新增/api/screen/id命令和设置界面的“检测屏幕”按钮。触发后,所有已连接的副屏会同时显示各自的屏号(如“屏幕1”、“屏幕2”),持续一段时间后自动恢复原画面,方便在多屏环境下进行物理识别。显示时长可在设置中配置(1~300秒)。 - 多屏设备管理强化:所有 API 接口都支持
device参数,可以指定目标副屏,实现了多屏的独立控制。 - 配置同步与校验:启动时自动检查代码中定义的 API 端点与 OpenAPI 文档是否同步,并在不一致时给出警告,方便开发者维护。
4. 用户体验与界面优化
- 设置界面更新:在“设置”标签页中新增了“API接入”子标签页,用于配置 API 服务器的端口、访问令牌、强制投屏开关以及屏幕序号检测时长。
- 状态栏通知:新增了
/api/notify接口,允许外部程序向主程序的状态栏发送通知消息。
5. 代码与架构层面的改进
- 模块化设计:将 API 服务器、帧管理、命令执行等逻辑清晰地封装为独立的函数和类,提高了代码的可维护性。
- 扩展性增强:通过统一命令执行器的设计,新的命令类型可以非常方便地添加到所有支持的协议中。
- 实时预览优化:API 投屏的帧数据会被保存,并可以通过
/api/screenshot获取,或用于主界面的实时预览。
总结
4.6.4 版本是一次里程碑式的更新,它将这个工具从一个纯手动操作的副屏软件,升级为了一个具备完整、标准化外部接口的“副屏服务中台”。 这使得它能够无缝融入自动化工作流、智能家居系统或其他自定义应用程序中,极大地拓展了其应用场景和可玩性。
v4.6.0
4.6.0 版本相对于 4.5.10 版本的主要更新内容如下:
🆕 核心新增功能:API 投屏(4.6.0 最大亮点)
| 功能模块 | 更新内容 |
|---|---|
| API 投屏页面 | 新增 API_PAGE_ID = 26,在页面列表中加入“API投屏”页面 |
| 本地 API 服务器 | 新增 HTTP + WebSocket 双协议服务器,默认监听 127.0.0.1:8632 |
| 投屏接口 | 支持整帧图像(image/rgb888/pixels/原始字节流)、文本、清屏、切页、窗口投屏 |
| 多屏投屏 | 各接口支持 device 参数指定目标屏,每屏独立显示;新增 /api/devices 列出多屏设备 |
| 图片显示方式 | 支持 contain(自适应)、stretch(拉伸)、cover(填充)三种模式 |
| 多图轮播 | 支持一次性上传多张图片,按间隔自动切换轮播 |
| OpenAPI 3.0 规范 | 自动生成 /api/openapi.json,供其他程序对接解析;启动时自动校验端点与文档同步 |
| 网页控制台 | 新增分页标签页面(投屏 / 选择程序 / 文档),提供图形化操作界面 |
| WebSocket 实时通道 | 支持二进制帧(原始 RGB888)和 JSON 命令帧,适合高频推流 |
| API 设置界面 | 在「设置」中新增「API接入」子标签页,可配置端口与访问令牌 |
🔧 其他改进
| 改进项 | 说明 |
|---|---|
| 版本号更新 | 4.5.10 → 4.6.0 |
| 构建日期更新 | 2026-08-15 → 2026-08-16 |
| 版本更新说明 | PROGRAM_CHANGELOG 新增 v4.6.0 完整更新日志 |
⚙️ 代码层面的主要新增内容
-
新增函数/类:
start_api_server()/stop_api_server()/show_api()api_set_frame()/api_get_frame()/api_start_slideshow()/api_stop_slideshow()_api_apply_text()/_api_resolve_device()/_api_prepare_frame()/_api_resize_image()_build_openapi_doc()/_check_openapi_sync()/export_api_json()ApiHandler类(HTTP + WebSocket 请求处理)_API_CONSOLE_HTML/_API_DOC_HTML两个内联 HTML 页面
-
新增配置项(在
sys_config中):api_enable:API 服务器开关api_port:API 服务器端口(默认 8632)api_token:可选访问令牌
-
新增全局变量:
_api_frames、_api_frame_lock、_api_server、_api_ws_connections_api_slideshow_stops、_api_slideshow_threads
-
UI 变化:
- 设置页新增「API接入」子标签页
- 页面列表新增「API投屏」选项
- 退出流程中增加
stop_api_server()调用
📌 总结
4.6.0 的核心是“开放接入”——它让 USB 副屏从一个封闭的独立工具,变成了一个可以被其他程序(Python/JS/curl 等)远程控制的自定义投屏终端,通过 HTTP/WebSocket API 实现图像、文本、窗口、多图轮播等内容的实时推送,非常适合开发者进行二次集成或自动化投屏场景。
v4.5.10
4.5.10 相对 4.5.5 主要更新了以下内容:
🎨 配色方案系统(核心更新)
新增独立「配色方案」标签页(设置 → 配色方案)
- 内置 260+ 个色系(马卡龙/莫兰迪/美拉德/赛博朋克/侘寂/大地/孟菲斯/极简/复古/霓虹/传统国色/艺术流派/色彩理论等)
- 配色方案管理:可 新增/编辑/删除 自定义方案(按设备独立保存)
- 实时色块预览
配色方案交互升级
- 选方案只提供候选色板,不自动套用
- 每个颜色位置新增 「色块下拉」,可直接看到并挑选该方案的颜色
- 支持 混合配色:不同位置可分别从不同方案选色
- 新增 「存为新方案」 按钮:把当前各位置颜色的组合一键保存为自定义方案
各页面接入配色方案
- 网络流量、磁盘读写(经典模式/网速样式)、仪表盘设置区新增「配色方案」下拉
🖥 磁盘读写样式优化
- 磁盘读写设置改成分页标签管理(经典模式/经典2样式/网速样式),切换模式自动跳转
- 新增 「经典2样式」:完全复刻网络流量页面的字体大小、布局与配色(标签为读/写),颜色自动跟随网络流量页面当前配色,无需单独配置
🌐 网络流量独立配色
- 网络流量监控新增 「经典/自定义」显示模式:经典=原样式,自定义=独立配色
- 上传/下载文字颜色、柱状图颜色全部可独立自定义
🔧 修复与优化
- 启动/切换设备后,页面下拉框、显示方向下拉框自动恢复为该设备上次的选择
- 设置「按页面」导航记住上次选择的页面,重启后恢复
- 中文字体显示修复:simhei.ttf 自动回退到 resource/,跑马灯/时钟等中文不再变方块
- 跑马灯字体固定为黑体(移除字体选择,避免字体路径失效)
- 编译脚本加入 winsdk(播放音乐)与 device_protocol.json
📝 发布说明摘要
v4.5.10 主要新增了强大的配色方案系统,内置 260+ 色系,支持自定义方案与混合配色;磁盘读写新增「经典2样式」;网络流量支持独立配色;同时修复了多设备切换时页面/方向记忆、中文字体显示等多项问题。