{"code":1,"msg":"成功","time":"1791589081","data":{"title":"〖2026嵌入式大赛〗智能实验室管理终端","content":"# 【2026嵌入式大赛】基于 D12x 与 RT-Thread 的实验室管理终端\r\n\r\n本项目以 ArtInChip D12x 为主控，运行 RT-Thread 4.1.1 和 LVGL v9。终端用于查看实验室成员、日程和网络状态，成员资料与日程通过板内 Web 后台编辑。PC 中转服务负责 CH572 蓝牙门锁控制和摄像头实况传输，系统在局域网内运行。\r\n\r\n2026 RT-Thread 嵌入式大赛参赛作品。\r\n\r\n[开源仓库](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal) · [快速开始](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/docs\/快速开始.md) · [PC 中转部署](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/pc-bridge\/README.md)\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/real-device-front.jpg\" alt=\"终端正面实机\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/real-device-angled.jpg\" alt=\"外壳与支架\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n## 功能概览\r\n\r\n| 功能 | 当前实现 |\r\n| --- | --- |\r\n| 主页 | 480×272 触控界面，五张功能卡片环形轮播 |\r\n| 成员管理 | Web 编辑姓名、身份、学号／工号和电话，触屏查看，最多 6 人 |\r\n| 日程管理 | Web 编辑标题、日期、起止时间和地点，触屏查看，最多 8 条 |\r\n| 开门控制 | 经 PC 的 Wi-Fi → BLE 中转，向 CH572 门锁端发送开锁／关锁指令 |\r\n| 摄像头实况 | 显示 PC 摄像头的 304×144 画面，进入页面才拉流，离开后停止，不保存录像 |\r\n| 网络状态 | 查看 Wi-Fi、IP、MAC、网关及后台认证状态 |\r\n\r\n板内 Web 后台监听 **8080** 端口。成员、日程及中转参数通过网页修改，不需要重新编译或烧录固件。成员“身份”目前是资料字段，尚未实现按成员身份分配开门权限。\r\n\r\n## 硬件与软件配置\r\n\r\n| 部分 | 配置 |\r\n| --- | --- |\r\n| 主控 | ArtInChip D12x，玄铁 RISC-V 内核 |\r\n| 操作系统 | RT-Thread 4.1.1 |\r\n| 图形界面 | LVGL v9，ArtInChip UIBuilder v2.2.0 |\r\n| 显示与触摸 | 480×272 RGB 屏，I2C 电容触摸 |\r\n| Wi-Fi | 后焊接的 RTL8189 SDIO 模组 |\r\n| 存储 | SPI-NOR，界面资源和运行数据分区存放 |\r\n| 门锁端 | CH572 BLE 舵机门锁 |\r\n| PC 中转 | Windows、Python、BLE、OpenCV |\r\n\r\n开发设备背面丝印为 V1-2，工程使用 `demo68-nor` 配置。\r\n\r\nRTL8189 提供 Wi-Fi 通信。BLE 访问与摄像头采集由同一局域网内的 PC 完成。\r\n\r\n## 界面与交互\r\n\r\n### 主页\r\n\r\n主页包含实况、开门控制、网络与安全、成员管理、实验室日程五张卡片。支持滑动和点击侧边卡片切换，点击中央卡片进入功能页。轮播使用 LVGL 动画实现位移、缩放和透明度变化，标题由标签控件绘制。\r\n\r\n终端和 Web 后台采用深蓝背景，使用紫色、青色区分选中状态与交互反馈。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/screen-home-carousel.jpg\" alt=\"首页功能轮播\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n### 成员管理\r\n\r\n成员字段包括姓名、身份、学号／工号和电话。Web 后台负责新增、修改和删除，触屏用于选择成员并查看详情。输入按 UTF-8 字节长度校验，成员编号不得重复。\r\n\r\n源码和截图中的成员资料均为虚拟演示数据。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/screen-members.jpg\" alt=\"终端成员页\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/web-admin-members.png\" alt=\"Web 成员管理后台\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n### 日程管理\r\n\r\n日程包含标题、日期、开始时间、结束时间和地点。Web 后台编辑，触屏展示列表。后台校验日期、时间及字段长度，并要求结束时间晚于开始时间。\r\n\r\n成员和日程持久化到板内 `data` 分区，正常重启后重新加载。整片擦除或覆盖数据分区仍会清除已有记录。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/screen-schedule.jpg\" alt=\"终端日程页\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/web-admin-schedule.png\" alt=\"Web 日程管理后台\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n### 开门控制\r\n\r\n触屏与 Web 后台均支持开锁和关锁。PC 中转参数配置与连接检测在 Web 后台完成。D12x 工作线程通过 HTTP 调用 PC 中转，由 PC 连接 CH572 并执行 BLE GATT 写入\r\n\r\n门锁端使用 `FFE0` 服务和 `FFE1` 命令特征。写入 `0x01` 后，舵机转至开锁位置，保持约 3 秒后返回；写入 `0x02` 则返回锁定位置并保持。\r\n\r\n界面显示任务状态和命令处理结果。`write_ack` 表示 GATT 写入获得应答；结果无法确认时返回 `outcome_unknown`，不自动重发。门锁端尚未接入门磁或锁舌传感器，写入应答不代表物理门锁已到位。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/screen-door-control.jpg\" alt=\"开门控制页\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n### 摄像头实况\r\n\r\n实况源为 PC 连接的摄像头，输出 304×144 MJPEG 画面，默认每秒 5 帧。终端进入实况页后建立流连接，离开后取消接收；PC 检测连接结束后释放摄像头。\r\n\r\n接收端仅保留等待显示的最新帧，避免积压播放队列。画面在内存中传递，不保存录像、截图或历史记录。下图的采集区域已在公开副本中遮盖。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/screen-live-view.jpg\" alt=\"实况页，采集区域已脱敏\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n### 网络状态\r\n\r\n网络页显示 Wi-Fi 状态、IP、MAC、掩码、网关和后台地址。首次通过串口配网后，设备启动时尝试使用已保存的配置连接网络。\r\n\r\n同一局域网中的浏览器访问 `http:\/\/<设备当前IP>:8080\/`。当前使用 DHCP，访问地址以设备显示为准。公开截图中的网络标识已做遮盖。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/screen-network-security.jpg\" alt=\"网络与安全页\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n## 系统架构\r\n\r\n触屏在板内调用 C 接口，浏览器通过 HTTP 访问板内服务。成员与日程后台由 D12x 自身提供；蓝牙门锁和摄像头实况依赖 PC 中转。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/diagram-dataflow.jpg\" alt=\"系统数据流图\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n- **数据与显示分离**：HTTP 保存处理完成持久化并向 UI 提交快照，由 LVGL 线程刷新控件。\r\n- **异步门禁**：`doorbr` 工作线程执行网络请求，页面读取缓存状态，不在触屏回调中等待通信结果。\r\n- **按需实况**：`livepc` 线程接收并校验 MJPEG 数据，只保留最新帧；解码和显示在 LVGL 线程中完成。\r\n- **板内持久化**：`rodata` 保存图片、字体及 Web 页面；`data` 使用 LittleFS 保存成员、日程及中转配置，写入采用临时文件与重命名替换。\r\n\r\n成员页和日程页的 LVGL 刷新周期分别为 30 ms、100 ms。这些数值是本地定时器周期，不是端到端更新延迟保证。Web 页面在进入、保存或手动刷新时读取数据。\r\n\r\nPC 中转监听 **8765** 端口，提供门锁请求和实况流接口，均使用 Bearer token 认证。\r\n\r\n<img src=\"https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/raw\/c51a5df\/docs\/images\/diagram-architecture.jpg\" alt=\"软件架构图\" referrerpolicy=\"no-referrer\" style=\"max-width:100%;height:auto;\">\r\n\r\n## RT-Thread 与 UIBuilder\r\n\r\nRT-Thread 提供线程调度、同步、网络、文件系统和串口调试能力。网络任务与界面任务分离，LVGL 控件由界面线程统一更新。\r\n\r\n| 组件 | 工程用途 |\r\n| --- | --- |\r\n| 线程 | `member_http` 处理后台请求，`doorbr` 执行门锁请求，`livepc` 接收实况数据 |\r\n| 信号量与互斥量 | 唤醒工作线程，保护共享状态及文件读写 |\r\n| WLAN、NETDEV、lwIP | Wi-Fi 接入、网络状态管理和 socket 通信 |\r\n| DFS、FAL、SFUD | 对接 Flash 与文件系统，组织资源和数据分区 |\r\n| LittleFS | 保存可编辑数据，配置宏为 `LPKG_USING_LITTLEFS` |\r\n| FinSH\/MSH、ULOG | 串口配网、状态查询和日志调试 |\r\n\r\nArtInChip UIBuilder v2.2.0 用于页面布局、控件配置和界面骨架生成。导出代码提供控件对象、页面结构以及图片和字体引用；轮播动画、数据更新、门锁状态和实况启停等业务逻辑位于 `ui_builder\/custom\/`。\r\n\r\n界面布局与业务代码分别维护，网络、存储及设备控制通过 C 接口接入生成的页面。\r\n\r\n\r\n## 快速开始\r\n\r\n1. 按[快速开始](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/docs\/快速开始.md)获取指定 Luban-Lite SDK，应用补丁并复制代码与资源。\r\n2. 使用 `tools\/configure_admin.py` 生成本地后台凭据，再通过 SDK 的 Windows 环境构建镜像，使用 AiBurn 烧录。\r\n3. 首次通过串口完成 Wi-Fi 配网，在终端查看 IP，使用浏览器登录板内后台。\r\n4. 按 [PC 中转说明](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/pc-bridge\/README.md)配置 Python、BLE 和摄像头，在后台填写 PC 地址、端口与 token。\r\n\r\n仓库提供应用源码、资源、SDK 补丁、配置快照与 PC 中转服务。完整 Luban-Lite SDK、WCH EVT 和工具链从上游获取；Luban-Lite 参考提交为 `c06865a38ca8bcffa337eee7b209651abacf45d6`。\r\n\r\n## 目录与文档\r\n\r\n```text\r\nsmart-lab-terminal\/\r\n├── firmware\/\r\n│   ├── ui_builder\/     # 界面骨架及 custom 业务代码\r\n│   └── assets\/         # Web 后台、图片与字体\r\n├── patches\/            # SDK 补丁与配置快照\r\n├── pc-bridge\/          # PC 中转、CH572 工程和测试\r\n├── tools\/              # 本地凭据生成与发布检查\r\n├── licenses\/           # 第三方资源许可说明\r\n└── docs\/               # 部署说明、截图与架构图\r\n```\r\n\r\n- [开源仓库](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal)\r\n- [构建、烧录与首次部署](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/docs\/快速开始.md)\r\n- [PC 中转部署与排障](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/pc-bridge\/README.md)\r\n- [CH572 工程与构建说明](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/pc-bridge\/diagnostics\/ch572-phy1m-20260923\/README.md)\r\n- [公开发布与安全说明](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/docs\/公开发布与安全说明.md)\r\n\r\n## 使用范围与限制\r\n\r\n- 成员与日程的编辑入口在 Web 后台，触屏用于展示；成员身份尚未接入门禁授权。\r\n- 门锁控制与实况依赖 PC 中转运行；成员和日程后台由 D12x 独立提供。\r\n- CH572 当前 GATT 写入未强制认证或加密，附近 BLE 客户端可能直接发送命令。\r\n- 后台使用 HTTP Basic 认证，中转使用 Bearer token，链路未加密，适用于受信任的实验室局域网。\r\n- 后台没有共用默认密码，凭据和 PC token 在本地生成。更新仓库不会修改已烧录设备的密码；整片擦除或覆盖数据分区会影响已保存的数据。\r\n\r\n## 许可证与来源\r\n\r\n项目原创业务逻辑、PC 中转实现及原创文档采用 [Apache License 2.0](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/LICENSE)。UIBuilder 生成代码、WCH EVT 衍生工程、字体和 SDK 保留各自的版权与许可，详见[资源来源与许可](https:\/\/gitee.com\/QAQ32\/smart-lab-terminal\/blob\/master\/licenses\/README.md)。\r\n\r\n感谢 RT-Thread、ArtInChip 及相关开源项目提供的平台与工具。","updatetime":"2026-10-09 16:07:38","author":"NEW_MA"}}