# iot **Repository Path**: mubeiyumian/iot ## Basic Information - **Project Name**: iot - **Description**: 智能家居物联网平台,基于SpringCloud,Nacos,MQTT,WebSocket实现,前端使用微信小程序 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-26 - **Last Updated**: 2026-02-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, mqtt, Vue ## README # 智能家居物联网平台 基于微服务+微信小程序实现的物联网平台,目前处于软件实现阶段:模拟了智能灯和温湿度感应器的使用状态,后续打算使用基于`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)`,测试`MQTT`连接使用的是`MQTTX`。推荐将中间件安装在`vmware`中,我使用的`Linux`版本是`20.04`,**`yml`文件中部分配置使用的是`192.168.242.137`而非本机地址,根据自己的配置进行替换** **准备工作** - 安装`MySQL`和`Redis`,替换账号密码 - 安装`MQTT`中间件`EMQX`,并新建用户分配权限,将用户名和密码在`yml`中对应位置进行替换 - 安装`Influxdb`,获取自己配置的用户名和密码进行替换,注意要先创建`bucket`:`device_report` - 安装`Nacos`用于服务注册 **1. 克隆仓库代码** - 后端使用`IDEA`软件 - 仓库代码中`iot_miniprogram.zip`为前端压缩包,解压后使用`uniapp`打开 **2. `MySQL`中运行`iot.sql`文件** **3. 启动所有服务** - gateway-service - user-service - device-service **4. 在`uniapp`中替换`manifest.json`文件中微信小程序的`AppID`并运行到微信小程序** **5. 查看`MySQL`中用户表手机号,使用手机号进行登录,登录成功后可以开始体验** > 项目中所有的控制器controller、入参和回参都带注释,可以查看注释了解对应功能 # MQTT主题说明 **为了及时更新设备联网状态,使用了`EMQX`自带的主题上下线订阅。在`yml`文件中,预置订阅的主题`$SYS/brokers/+/clients/#`可以在设备上下线后推送通知。** **所有的设备在与MQTT建立连接时,设置的`client_id`为数据库中`iot_device`**表中的`device_sn`字段,这样服务器收到消息时可以通过`sn`(设备序列号)来标识每一个设备 **MQTT所有消息体均使用`JSON`格式** # WebSocket连接说明 **在`device-service`服务中的`WebsocketConfig`文件中,可以看到建立连接时会校验`token`参数,由于`token`只有在登录成功后才会返回给用户,因此没有携带此参数的连接会被拒绝。这个权限校验方式可能还不太完善,后续会考虑使用其他校验方式** # 学习说明 本项目目前比较简单,微服务中只拆分了网关服务,用户服务和设备服务 - 网关服务主要用于负载均衡,`Nacos`很多特性比如统一配置管理和自动刷新还没有使用; - 用户服务权限校验也只是引入了`JWT`,后续打算使用`Spring Security`做权限校验 - 设备服务中`Influxdb`的定时同步还可以继续优化,目前是逻辑是每2分钟同步一次温湿度消息,可能延迟会有点严重,再想想怎么同步好一点 - MQTT的监听消息逻辑中,会考虑使用消息队列`RabbitMQ`或者异步处理,因为在实际操作中,出现过一个BUG,监听消息处理过程中,如果处理时间过长会影响MQTT的心跳,导致MQTT发生重连 - **最重要一点:目前智能灯的指令下发没有做确认操作,可能会出现指令下发了,但是硬件没有接收,这会导致数据库状态不对,需要对已下发的指令做短时间监听,硬件回传状态后再进行数据库的更改** # 开源协议 本项目采用 MIT License 协议,欢迎自由使用和二次开发。 ------ **如有任何问题或建议,欢迎提交Issue或Pull Request!**