# DTU-RemoteLCD - 远程显示通信工具 与 **RemoDispBus** 协议兼容的远程 LCD 显示与按键模拟工具。通过网络连接 DTU 装置,实时查看 LCD 显存画面并模拟按键操作,适用于调试、监控等场景。 ## 功能特性 - **实时屏幕显示**:将装置 LCD 显存以 1bpp 位图形式拉取并渲染 - **按键模拟**:支持方向键、确认、返回、复归等按键 - **多种使用方式**:命令行、GUI、Web 浏览器 - **WebSocket 传输**:Web 版采用 Socket.IO,服务端主动推送,低延迟 ## 环境要求 - Python 3.7+ - 与 DTU 装置网络互通(默认端口 7003) ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. Web 界面(推荐) ```bash python remo_disp_server.py [装置IP] ``` 启动后访问 **http://localhost:8181**,在页面中: - 点击「连接」→ 输入装置 IP 和端口(默认 7003)→ 连接 - 左侧显示装置 LCD 画面(约 100ms 刷新) - 右侧使用方向键、确认、复归、返回进行按键操作 - 点击「断开」断开与装置的连接 **可选预连接**:启动时传入 IP 可预连接装置,例如: ```bash python remo_disp_server.py 192.168.253.3 ``` ### 3. 命令行工具 ```bash # 获取初始化信息(屏幕宽高、显存大小) python remo_disp_client.py 192.168.1.100 --init # 拉取显存并保存为 screen.png python remo_disp_client.py 192.168.1.100 --screen # 发送按键 (U/D/L/R/ENT/ESC/F1/F2) python remo_disp_client.py 192.168.1.100 --key ENT # 发送 KEEPLIVE python remo_disp_client.py 192.168.1.100 --keepalive # 指定端口 python remo_disp_client.py 192.168.1.100 -p 7003 --screen ``` ### 4. GUI 查看器 ```bash python remo_disp_viewer.py 192.168.1.100 ``` - 连接装置并实时显示 LCD 画面 - 点击按键模拟远程按键 - 点击「刷新」重新拉取显存 ## 项目结构 ``` DTU-RemoteLCD/ ├── remo_disp_server.py # Web 服务(Flask + Socket.IO) ├── remo_disp_ui.html # Web 前端页面 ├── remo_disp_client.py # 命令行客户端 ├── remo_disp_viewer.py # Tkinter GUI 查看器 ├── requirements.txt # Python 依赖 ├── static/ # 静态资源(可选) │ └── favicon.ico # 网站图标 └── README.md ``` ## 协议说明(RemoDispBus) 与 `HMI/RemoeDisp/RemoDispBus.c` 兼容: | 项目 | 说明 | |------|------| | **端口** | 7003 | | **工具 → 装置** | `[0xAA][功能码][长度高][长度低][数据...][CRC]` | | **装置 → 工具** | `[0xBB][功能码][长度高][长度低][数据...][CRC]` | | **CRC** | 数据区逐字节异或,取低 8 位 | **功能码**: | 码 | 名称 | 说明 | |----|------|------| | 0 | KEEPLIVE | 保活 | | 1 | INIT | 初始化,获取屏幕宽高、显存大小 | | 2 | KEY | 按键 | | 3 | LCDMEM | 读取显存(屏幕画面) | ## 按键映射 | 键名 | 协议码 | 说明 | |------|--------|------| | U | 0x02 | 上 | | D | 0x40 | 下 | | L | 0x10 | 左 | | R | 0x08 | 右 | | ENT | 0x20 | 确认 | | ESC | 0x01 | 返回/取消 | | F1/RESET | 0x04 | 复归 | | F2 | 0x80 | F2 | ## 依赖说明 | 依赖 | 用途 | |------|------| | Flask | Web 框架 | | flask-socketio | WebSocket 支持 | | python-socketio | Socket.IO 服务端 | | Pillow | 1bpp 位图转 PNG | `remo_disp_client.py` 仅需 Python 标准库;`remo_disp_viewer.py` 使用 Tkinter(Python 自带)。 ## 配置说明 - **Web 服务端口**:默认 8181,在 `remo_disp_server.py` 的 `main()` 中修改 - **装置端口**:默认 7003,连接时可输入自定义端口 - **Favicon**:将 `favicon.ico` 放入 `static/` 目录即可显示网站图标 ## 许可证 本项目仅供内部调试使用。