工业物联网交互系统
系统与分工
这是团队完成的多传感器采集、设备联动和远程交互系统。个人负责 jyx 分支的 Linux C++17 网关,以及设备侧、上位机侧的通信契约对接。
| 模块 | 功能 | 贡献范围 |
|---|---|---|
| STM32F407 / ESP8266 | 温湿度、光照、心率血氧采集,通过 WiFi TCP 上报 | 团队 kq 模块 |
| Linux C++17 Gateway | TCP 接入、分帧、遥测转发、命令路由、设备状态及 UDP 发现 | 个人 jyx 模块 |
| STM32F103 / ESP8266 | LED、风扇、继电器、步进电机控制及状态心跳 | 团队 kq 模块 |
| MQTT 桥接 | System V IPC 与 MQTT 通道间转换 | 团队 yzz 模块 |
| Qt 客户端 | 状态展示、控制交互、设备发现与视频接收 | 团队 zwy 模块 |
两条业务链路
采集链路:F407 → TCP Gateway → StateCoordinator → System V 共享内存 → MQTT 桥接 → Qt。网关还根据联动规则下发 F103 控制,并发布事件。
控制链路:Qt → MQTT 桥接 → System V 消息队列 → Gateway → F103;人工控制接管对应器件,避免联动规则覆盖手动操作。
网关实现
SelectReactor统一拥有 accept / recv / send / close,eventfd 负责唤醒;ConnectionId 隔离文件描述符复用。FrameDecoder支持 AA55 二进制帧与 CRLF 文本行,处理半包、粘包、坏帧重同步及有界接收缓冲。TextProtocolParser兼容 F407 遥测与 F103 状态心跳;设备接入格式和上位机通信契约解耦。UpperComputerIpcAdapter通过 System V 共享内存、消息队列、信号量与 cJSON 传递遥测和命令。PendingCommandManager使用 req_id 去重和单次终态仲裁,处理超时、迟到回执和重复请求。DeviceSnapshotStore发布不可变设备快照,UDP 发现只读快照,不与状态写入抢锁。GatewayRuntime管理启动、失败回滚与退出顺序,后台线程在 IPC 适配器关闭之前停止并回收。
联调与测试记录
项目 README 记录 Linux CTest 12/12 通过,包含真实 SysV IPC、UDP、SelectReactor、GatewayRuntime 与信号退出测试。记录中 F407/F103 经 ESP8266 WiFi TCP 完成实机联调:遥测上报、状态心跳、上位机控制、传感器联动与人工接管两条业务线已打通。
这些是项目既有记录,本次网站更新只核对源码与文档,没有重新运行 Linux 测试或硬件实验。
面试可展开的边界
- F103 没有独立命令 ACK,网关回执 timeout 不等于设备执行失败,应结合状态心跳判断。
- 二进制帧解析框架不意味着所有正式 STM32 CRC / HELLO 协议已实现,当前实机链路使用已适配的文本协议。
- 网络、IPC 与生命周期处理属于个人网关模块;固件驱动、Qt UI 和 MQTT 桥接不算作个人独立开发。
源码定位
仓库:gitee.com/zwy-long/da_shuai_bi_zu,个人分支 jyx。主要路径为 gateway/src/net/、gateway/src/protocol/、gateway/src/ipc/、gateway/src/dispatch/、gateway/src/app/,以及 gateway/tests/。