项目概述
这是一个基于微服务架构与微信小程序实现的物联网平台,目前处于软件模拟阶段。系统已实现智能灯和温湿度感应器的状态模拟,后续计划接入 STM32 硬件并迁移前端至 Android 版本。
技术栈选型
后端核心
- JDK:21
- Spring Boot:3.2.5
- Spring Cloud:2023.0.1
- Spring Cloud Alibaba:2023.0.1.0
- Spring Data JPA
- Nacos:2.5.2
- MQTT & WebSocket
数据存储
- MySQL:8.0
- Redis:6.2.x
- Influxdb:2.8.0(用于时序数据)
前端
- Uniapp + Vue2
部署与启动流程
部署前请确保所有依赖环境就绪。MQTT 中间件推荐使用 EMQX(5.8.9),测试连接可用 MQTTX。建议将中间件部署在 Linux 虚拟机中(如 Ubuntu 20.04)。注意配置文件中的 IP 地址需根据实际网络环境调整,避免直接使用本机内网 IP。
准备工作
- 安装 MySQL 和 Redis,修改账号密码配置。
- 安装 EMQX,新建用户并分配权限,同步更新到 yml 配置文件中。
- 安装 Influxdb,创建 bucket(例如
device_report),记录用户名和密码。 - 启动 Nacos 服务注册中心。
代码运行
- 克隆仓库代码,后端使用 IDEA 打开。
- 前端部分解压
iot_miniprogram.zip,用 uniapp 工具打开。 - 在 MySQL 中执行
iot.sql初始化数据库结构。 - 依次启动网关服务、用户服务和设备服务。
- 修改前端
manifest.json中的微信小程序 AppID,运行至微信开发者工具。 - 登录时直接使用 MySQL 用户表中的手机号即可进入系统。
项目中 Controller 层入参和回参均带有详细注释,方便查阅具体功能逻辑。
核心通信机制
MQTT 主题订阅
为了实时感知设备联网状态,我们利用了 EMQX 自带的上下线主题订阅。在配置文件中预置了 $SYS/brokers/+/clients/# 主题,一旦设备上下线,服务器会立即收到通知推送。
设备连接时的 client_id 直接关联数据库中 iot_device 表的 device_sn 字段。这样服务端收到消息后,能通过序列号精准标识每一个设备。所有 MQTT 消息体统一采用 JSON 格式传输。
WebSocket 连接校验
在 device-service 服务的 WebsocketConfig 中建立了连接校验逻辑。由于 token 仅在登录成功后返回,未携带该参数的连接会被直接拒绝。这种基于登录态的校验方式虽然简单有效,但后续考虑引入更完善的权限验证方案。
工程复盘与优化方向
项目目前主要拆分为网关、用户和设备三个微服务模块,在实际开发中也遇到了一些值得优化的点:
- 服务治理:网关主要负责负载均衡,Nacos 的统一配置管理和自动刷新特性尚未完全启用。
- 安全加固:当前用户服务仅引入了 JWT 进行权限校验,后续计划全面接入 Spring Security 提升安全性。
- 数据同步:Influxdb 的定时同步目前是每 2 分钟一次,存在一定延迟。正在研究更高效的同步策略以减少数据滞后。


