139 lines
4.0 KiB
Markdown
139 lines
4.0 KiB
Markdown
# DTU-RemoteLCD - 远程显示通信工具
|
||
|
||
与 **RemoDispBus** 协议兼容的远程 LCD 显示与按键模拟工具。通过网络连接 DTU 装置,在 Web 浏览器中实时查看 LCD 画面并模拟按键操作,适用于调试、监控等场景。
|
||
|
||
## 功能特性
|
||
|
||
- **实时屏幕显示**:将装置 LCD 显存以 1bpp 位图形式拉取并渲染为 PNG
|
||
- **按键模拟**:支持方向键、确认、返回、复归等按键
|
||
- **WebSocket 传输**:采用 Socket.IO,服务端主动推送,约 100ms 刷新
|
||
- **跨平台**:浏览器访问,无需安装客户端
|
||
|
||
## 环境要求
|
||
|
||
- Python 3.7+
|
||
- 与 DTU 装置网络互通(默认端口 7003)
|
||
|
||
## 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 2. 启动服务
|
||
|
||
```bash
|
||
python remo_disp_server.py [装置IP]
|
||
```
|
||
|
||
启动后访问 **http://localhost:8181**。
|
||
|
||
### 3. 使用说明
|
||
|
||
- 点击「连接」→ 输入装置 IP 和端口(默认 7003)→ 连接
|
||
- 左侧显示装置 LCD 画面(约 100ms 刷新)
|
||
- 右侧使用方向键、确认、复归、返回进行按键操作
|
||
- 点击「断开」断开与装置的连接
|
||
|
||
**可选预连接**:启动时传入 IP 可预连接装置,例如:
|
||
|
||
```bash
|
||
python remo_disp_server.py 192.168.253.3
|
||
```
|
||
|
||
## 打包为 exe(Windows)
|
||
|
||
在项目目录下执行:
|
||
|
||
```bash
|
||
# 安装 PyInstaller 后打包
|
||
pip install pyinstaller
|
||
python -m PyInstaller remo_disp_server.spec --noconfirm
|
||
```
|
||
|
||
或直接双击运行 `build_exe.bat`。
|
||
|
||
打包完成后可执行文件为 **dist\\remo_disp_server.exe**。双击运行,或在命令行:
|
||
|
||
```bash
|
||
dist\remo_disp_server.exe
|
||
dist\remo_disp_server.exe 192.168.253.3
|
||
```
|
||
|
||
运行后浏览器访问 http://localhost:8181。日志会输出到控制台,同目录下会生成 `remo_disp.log`。
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
DTU-RemoteLCD/
|
||
├── remo_disp_server.py # Web 服务(Flask + Socket.IO)
|
||
├── remo_disp_server.spec # PyInstaller 打包配置
|
||
├── build_exe.bat # 一键打包脚本(Windows)
|
||
├── remo_disp_ui.html # Web 前端页面
|
||
├── requirements.txt # Python 依赖
|
||
├── static/ # 静态资源(可选)
|
||
│ └── favicon.ico # 网站图标
|
||
└── README.md
|
||
```
|
||
|
||
## 协议说明
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| **端口** | 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 | 返回/取消 |
|
||
| RESET | 0x04 | 复归 |
|
||
| F2 | 0x80 | F2 |
|
||
|
||
## 依赖说明
|
||
|
||
| 依赖 | 用途 |
|
||
|------|------|
|
||
| Flask | Web 框架 |
|
||
| flask-socketio | WebSocket 支持 |
|
||
| python-socketio | Socket.IO 服务端 |
|
||
| Pillow | 1bpp 位图转 PNG |
|
||
| loguru | 结构化日志、错误追踪 |
|
||
|
||
## 日志与调试
|
||
|
||
- 后端使用 `loguru` 输出日志,默认会打印到控制台,并写入当前目录下的 `remo_disp.log`。
|
||
- 在 `remo_disp_server.py` 顶部有 `LOG_LEVEL` 常量:
|
||
- `LOG_LEVEL = "INFO"`:只输出 INFO/WARNING/ERROR 级别日志(默认)。
|
||
- `LOG_LEVEL = "DEBUG"`:输出包括 DEBUG 在内的详细调试信息。
|
||
- exe 版本(`remo_disp_server.exe`)同样会在运行目录生成 `remo_disp.log`,方便线下排查问题。
|
||
|
||
## 配置说明
|
||
|
||
- **Web 服务端口**:默认 8181,在 `remo_disp_server.py` 的 `main()` 中修改
|
||
- **装置端口**:默认 7003,连接时可输入自定义端口
|
||
- **Favicon**:将 `favicon.ico` 放入 `static/` 目录即可显示网站图标
|
||
|
||
## 许可证
|
||
|
||
本项目仅供内部调试使用。
|