Spring Boot3.x + MQTT + InfluxDB 物联网设备接入平台搭建

📅 2026/7/12 19:35:42 👁️ 阅读次数 📝 编程学习
Spring Boot3.x + MQTT + InfluxDB 物联网设备接入平台搭建

参考

  • TRAE SOLO
  • 豆包
  • Esp8266 MOD Nodemcu v3 2026年使用 Arduino 连接出现 A fatal esptool.py error occurred: Cannot configure port, something went wrong. Original message: PermissionError (13, '����ϵͳ�ϵ��豸 û�з������á�', None, 31)

环境

软件/系统 版本 说明
Windows 10 专业版 10.0.19045 开发主机
Docker Engine 29.5.3 运行 InfluxDB 和 Mosquitto 容器(Docker Desktop 环境)
TRAE CN 3.3.x SOLO 模式生成代码和文章
Spring Boot 3.2.5 Java 后端框架
OpenJDK 21 后端运行环境
InfluxDB 2.7.5 时序数据库(Docker 容器)
Mosquitto 2.0.18 MQTT Broker(Docker 容器)
Eclipse Paho 1.2.5 MQTT Java 客户端库
influxdb-client-java 6.8.0 InfluxDB Java 客户端库
Thymeleaf 3.1.2 Java 模板引擎
Arduino 1.8.19 由于2.0x打不开,多次尝试未解决后更换为老版本
Esp8266 Nodemcu v3

正文

本文由AI生成+博主审核与微调完成

项目介绍

本项目是一个基于 Spring Boot 的物联网设备接入平台,支持通过 MQTT 协议接收 ESP8266 设备数据,并将数据存储到 InfluxDB 时序数据库中。同时提供 Web 界面和 RESTful API 支持设备日志的查询、删除操作,以及设备远程控制功能。

项目功能

  1. MQTT 消息接收
    设备(如 ESP8266)通过 MQTT 协议发送数据到 Mosquitto Broker,Spring Boot 应用作为 MQTT 客户端订阅指定主题。

  2. 数据存储
    设备日志存储到 InfluxDB 时序数据库,按时间戳自动排序存储。

  3. RESTful API

    API 方法 说明
    /api/logs GET 查询设备日志列表
    /api/logs/{id} GET 查询单条设备日志
    /api/logs/{id} DELETE 删除设备日志
    /api/devices/{deviceId}/led/{state} POST 控制单个设备 LED
    /api/devices/broadcast/led/{state} POST 广播控制所有设备 LED
  4. 状态持久化同步机制
    当设备离线时用户在 Web 界面修改的状态(如 LED 开关),在设备重新上线后能够自动同步。

  5. OTA 在线升级设计
    支持 Web 端上传固件,ESP8266 设备自动拉取并更新固件。

  6. ESP8266 客户端

    ESP8266 端主要功能包括:

    • WiFi 连接:自动连接配置的 WiFi 网络
    • MQTT 连接:支持用户名密码认证,自动重连
    • 数据上传:每秒上传模拟传感器数据(温度、湿度、气压)
    • LED 控制:接收 MQTT 控制命令,控制板载 LED 开关
    • Last Will 死亡通知:设备异常断开时自动发送离线通知
    • 状态同步:设备上线后自动请求同步最新 LED 状态

Docker 启动与查看命令

  1. 启动 InfluxDB 容器

    docker run -d --name influxdb -p 8086:8086 \-e DOCKER_INFLUXDB_INIT_MODE=setup \-e DOCKER_INFLUXDB_INIT_USERNAME=<your-username> \-e DOCKER_INFLUXDB_INIT_PASSWORD=<your-password> \-e DOCKER_INFLUXDB_INIT_ORG=<your-org> \-e DOCKER_INFLUXDB_INIT_BUCKET=<your-bucket> \-e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=<your-token> \influxdb:2.7.5
    
  2. 启动 Mosquitto 容器

    docker run -d --name mosquitto -p 1883:1883 -p 9001:9001 \-v "${PWD}/mosquitto-config:/mosquitto/config" \eclipse-mosquitto:2.0.18
    

访问地址汇总

服务 地址
Spring Boot 应用 http://localhost:8080
Web 界面 http://localhost:8080/logs
RESTful API http://localhost:8080/api/logs
InfluxDB 后台 http://localhost:8086
MQTT Broker tcp://localhost:1883

遇到的问题及解决办法

  1. MQTT 连接失败

    可能原因:Windows 防火墙阻止了 ESP8266 访问电脑上的 1883 端口

    解决方案

    • Windows 下 PowerShell(管理员) 临时放行TCP入站,仅本次开机有效
    New-NetFirewallRule -DisplayName "Temp_MQTT_1883" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action Allow -PolicyStore ActiveStore
    

    验证方法

    Test-NetConnection 192.168.x.x -Port 1883
    Test-NetConnection 192.168.x.x -Port 8080
    
  2. LED 控制命令不生效

    现象:发送 LED 控制命令后,ESP8266 上的 LED 没有反应

    可能原因

    1. MQTT 发布器未连接:MQTT 连接在应用启动时失败未自动重连

    2. ESP8266 未订阅控制主题:检查 ESP8266 代码中的主题订阅

    3. ESP8266 未正确连接到 MQTT:检查串口监视器输出

界面截图

设备管理页面

设备管理

日志管理页面

设备日志

ESP8266 WEB 页面

ESP8266WEB页面