快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
    开发一个完整的智能家居环境监测系统,包含:1. 设备端(使用ESP32模拟)采集温湿度数据通过MQTT上报 2. Node.js服务端接收存储数据并提供REST API 3. Vue前端展示实时曲线和报警功能 4. 支持通过MQTT远程控制设备开关 5. 数据超出阈值时发送邮件报警。要求使用MQTT QoS1级别保证消息可靠性,系统包含完整的部署说明文档。
  3. 点击'项目生成'按钮,等待项目生成完整后预览效果

示例图片

最近在研究智能家居系统,尝试用MQTT协议搭建了一个家庭环境监测系统,能实时监控温湿度、控制设备开关,还支持异常报警。整个过程踩了不少坑,但也学到了很多实战经验,分享给大家参考。

1. 系统整体设计思路

这个系统的核心是通过MQTT协议实现设备、服务器和前端之间的通信。主要分为三大部分:

  • 设备端:用ESP32开发板连接温湿度传感器,定期采集数据并通过MQTT发布到指定主题
  • 服务器端:用Node.js搭建服务,订阅MQTT消息并存储到数据库,同时提供REST API给前端调用
  • 前端界面:Vue实现的Web界面,展示实时数据曲线,并提供设备控制功能

MQTT协议选择QoS1级别,确保消息至少送达一次,避免数据丢失。当温湿度超过设定阈值时,系统会自动发送邮件报警。

2. 设备端实现细节

设备端使用ESP32开发板,主要完成了以下工作:

  1. 连接温湿度传感器,每5秒采集一次数据
  2. 初始化MQTT客户端,连接到公共MQTT服务器
  3. 将采集到的温湿度数据发布到home/env主题
  4. 订阅home/switch主题,接收服务器下发的控制指令
  5. 根据指令控制继电器开关,实现远程设备控制

这里特别注意要处理WiFi和MQTT的重连机制,避免网络波动导致设备离线。

3. 服务端开发要点

Node.js服务端是整个系统的中枢,主要功能包括:

  1. 使用MQTT.js库订阅home/env主题,接收设备数据
  2. 将接收到的数据存入MongoDB数据库
  3. 提供REST API供前端查询历史数据
  4. 监控数据变化,发现异常时触发邮件报警
  5. 通过home/switch主题向设备发送控制指令

服务端使用了Express框架搭建API,nodemailer实现邮件发送功能。数据库选择MongoDB,因为环境数据的特点是写入频繁但查询简单。

4. 前端界面开发

前端使用Vue3+Element Plus开发,主要实现了:

  1. 实时折线图展示温湿度变化趋势
  2. 设备开关控制面板
  3. 历史数据查询功能
  4. 阈值设置界面
  5. 异常报警通知展示

图表使用了ECharts库,可以直观看到数据波动。前端通过WebSocket与服务端保持长连接,确保数据实时更新。

5. 报警系统实现

报警系统是保障家居安全的重要环节:

  1. 服务端持续监控收到的环境数据
  2. 当温度超过35℃或湿度超过80%时触发报警
  3. 通过SMTP协议发送邮件给指定邮箱
  4. 前端界面同步显示报警信息
  5. 报警解除后发送恢复正常通知

为了避免频繁报警,设置了5分钟的静默期,同一问题短时间内不会重复报警。

6. 部署与优化

整套系统在InsCode(快马)平台上部署非常方便:

  1. 服务端和前端代码直接上传到平台
  2. 使用平台提供的一键部署功能
  3. 自动生成可访问的URL
  4. 无需手动配置服务器环境

示例图片

平台还内置了代码编辑器,开发过程中可以直接在线调试,省去了本地搭建环境的麻烦。

7. 经验总结

通过这个项目,我总结了几个关键点:

  • MQTT的QoS级别要根据业务需求选择,不是越高越好
  • 设备端要考虑断网重连和消息重发机制
  • 服务端要做好消息去重,避免QoS1导致的重复消息
  • 前端实时更新数据时注意性能优化
  • 报警系统要有防骚扰机制

这个系统还可以继续扩展,比如增加更多传感器类型、实现语音控制、接入智能音箱等。使用InsCode(快马)平台让整个开发和部署过程变得特别顺畅,特别是对像我这样的个人开发者来说,省去了运维的烦恼,可以专注在功能实现上。

示例图片

如果你也对智能家居感兴趣,不妨试试用MQTT协议搭建自己的家庭监测系统,相信会有不少收获。

快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
    开发一个完整的智能家居环境监测系统,包含:1. 设备端(使用ESP32模拟)采集温湿度数据通过MQTT上报 2. Node.js服务端接收存储数据并提供REST API 3. Vue前端展示实时曲线和报警功能 4. 支持通过MQTT远程控制设备开关 5. 数据超出阈值时发送邮件报警。要求使用MQTT QoS1级别保证消息可靠性,系统包含完整的部署说明文档。
  3. 点击'项目生成'按钮,等待项目生成完整后预览效果
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐