基于 MQTT 的单片机与 Java 业务端双向通信全流程

MQTT 服务端与客户端交互概述

一、项目背景

在物联网应用开发中,常常需要实现设备与服务器之间高效、可靠的通信。MQTT 作为一种轻量级的消息协议,非常适合在资源受限的设备和网络环境中使用。本方案旨在介绍基于 MQTT 协议,实现单片机(ESP32)客户端、MQTT 服务端以及 Java 业务端之间的通信流程。

二、系统架构组件

  1. MQTT 服务端 :作为整个通信系统的核心枢纽,负责接收和转发客户端发送的消息,同时维护各个客户端的连接状态,确保消息能够准确地路由到目标客户端。

    统计所有主题收发情况

  2. ESP32 客户端 :基于单片机的设备,具备有限的计算资源和存储资源。它通过网络连接到 MQTT 服务端,作为物联网设备采集数据,并将数据发送到指定的主题。

    下图模拟ESP32单片机设备发送消息

  3. Java 业务端:运行在服务器端的 Java 应用程序,作为系统的业务逻辑处理中心。它监听 MQTT 服务端上的特定主题,接收来自 ESP32 客户端的消息,并根据业务逻辑进行处理,同时也可以向 ESP32 客户端下发指令。

业务端接收到消息

下发指令后 设备接受指令

Java业务端下发指令

设备端接受指令

三、通信流程

bash 复制代码
接受下游设备执行结果的主题
mqtt.subTopic=esp32/control/result  
下发指令到下游设备的主题
mqtt.pubTopic=esp32/control/switch 
  1. 连接阶段
    • ESP32 客户端初始化 MQTT 连接参数,包括服务器地址、端口、客户端 ID 等,然后建立与 MQTT 服务端的连接。连接成功后,ESP32 客户端订阅指定的主题,以便接收来自服务端的消息。
    • Java 业务端同样配置好 MQTT 连接信息,与 MQTT 服务端建立连接,并订阅和 ESP32 客户端相同的主题。
  2. 数据上传阶段
    • ESP32 客户端在采集到数据后,按照预定的格式将数据进行封装。例如,将传感器采集到的温度、湿度等信息打包成 JSON 格式。
    • 然后,ESP32 客户端将封装好的数据发布到之前订阅的主题上。消息通过网络传输到 MQTT 服务端。
    • MQTT 服务端接收到消息后,根据主题匹配规则,将消息转发给所有订阅了该主题的客户端,其中就包括 Java 业务端。
  3. 消息处理与指令下发阶段
    • Java 业务端接收到来自 ESP32 客户端的消息后,会解析消息内容,并根据业务逻辑进行相应的处理。比如,将数据存储到数据库中,进行实时分析等。
    • 在某些情况下,Java 业务端需要向 ESP32 客户端下发指令。Java 业务端构造包含指令信息的消息,发布到相同的主题上。
    • MQTT 服务端再次将这条消息转发给订阅了该主题的 ESP32 客户端。
    • ESP32 客户端接收到指令消息后,解析消息内容,并执行相应的操作,如控制设备的开关、调整传感器的采集频率等。

四、优势

  1. 轻量级:MQTT 协议简洁高效,非常适合资源有限的 ESP32 单片机设备,减少了通信开销和处理负担。
  2. 可靠性:MQTT 协议提供了消息确认机制,确保消息在传输过程中的可靠性,即使在网络不稳定的情况下,也能尽量保证消息不丢失。
  3. 灵活性:通过主题订阅的方式,实现了发布者和订阅者之间的解耦,使得系统易于扩展和维护。不同的客户端可以根据需求订阅不同的主题,增加新的功能模块时也不会对现有系统造成太大的影响。

综上所述,基于 MQTT 协议构建的这个通信

相关推荐
冰茶丿6 分钟前
嵌入式安全第一关:Secure Boot是怎么保护你的设备的?
嵌入式硬件·安全
卖萌的斜阳11 分钟前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
程序员张322 分钟前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端
闲猫24 分钟前
Spring AI Agentic 模式(第1部分):Agent Skills——模块化、可复用的能力
java·人工智能·spring
源图客30 分钟前
云途物流API开发-鉴权认证(Java)
java·网络·python
Kuakewei8881 小时前
4056充电芯片:28V高耐压+电池反接保护+热调节功能
嵌入式硬件
liguojun20251 小时前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
三品吉他手会点灯1 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
woohuwan1 小时前
CST 匝数比和采样电阻怎么算?
单片机·嵌入式硬件
952361 小时前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq