跨平台智能家居系统
2019.05 — 2019.11 · 毕业设计
这是个什么项目
学校没硬性要求做毕业设计,但我那时候比赛打得比较多,实训室随便进,就自己立项做了这个智能家居系统。从 5 月干到 11 月,前后半年。
核心思路很简单——用 Zigbee 无线网络把各种传感器和执行器连起来,然后通过上位机统一管理和展示。
硬件架构
网络拓扑
通信协议:Modbus
整条链路统一走 Modbus,支持三种模式:
| 模式 | 方向 | 触发方式 |
|---|---|---|
| 主机轮询 | 上位机 → 节点 | 定时或手动查询 |
| 主动上报 | 节点 → 上位机 | 传感器检测到异常时推送 |
| 指令下发 | 上位机 → 执行节点 | 用户操作触发 |
单片机程序
所有节点的固件都是我从零写的。有个遗憾——地址和控制逻辑全是写死的,没做成可配置。一来做可配置化工作量太大,单片机端要加配置解析,前端还要配对应的界面;二来这半年也不是每天都有空——台达杯的比赛跟这个项目时间上冲突,中间还穿插了一些省市级的小比赛,实际能花在项目上的时间远没有表面看起来那么多。光把基础功能跑通就已经焦头烂额了。
另外有个细节——为什么搞了 RS485 集线器这一路?因为实训室的 CC2530 开发板数量有限,不够给每个设备都单独挂一块 Zigbee 节点,所以用集线器走 Modbus 协议来分发控制,把多个执行器挂在同一个 Zigbee 网关板下面。
软件架构
WPF 上位机(C#)
当时受限于技术视野,没想到前后端进程隔离这个概念,所以整个工程是前后端一体的 WPF 应用。WPF 一关,整个系统就停了。
它负责这些事:
- Modbus 协议帧的组装与解析
- 设备在线/离线状态管理,数值缓存
- 数据持久化到本地数据库
- 实时数据曲线图表展示
- 异常阈值判断 + 弹窗报警
Android 客户端(Java)
局域网内的移动端 companion app:
- 实时查看各传感器当前读数
- 接收来自上位机的报警推送消息
- 远程控制各类家电设备(开关、模式切换)
- 查看历史数据和设备信息
App 和 PC 端之间通过 局域网 Socket 通信 同步数据。当时对这块研究得比较多。
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 硬件层 | CC2530 Zigbee 开发板 | 学校提供的现成板子 |
| 通信协议 | Modbus RTU | 统一的数据交换协议 |
| 串口通信 | RS232 / RS485 | 物理链路 |
| 上位机 | C# / WPF | 前后端一体,Modbus 解析 + UI + 存储 |
| 移动端 | Java / Android | 局域网 Socket 通信 |
| 局域网通信 | TCP Socket | App ↔ PC 数据同步 |
回过头看
这个项目虽然技术上有很多不成熟的地方(前后端没分离、配置写死、WPF 一关全停),但它是我第一次独立完成一个从硬件组网到软件开发的完整系统。Zigbee 组网、Modbus 协议、串口通信、多端联动……这些概念都是在这次实践中真正理解的,不是看书看会的。
← 返回个人经历