物联网MQTT协议及本地化部署测试

一、MQTT协议简介

MQTT(Message Queuing Telemetry Transport)协议是一种轻量级的发布 / 订阅模式的消息传输协议,以下是对它的详细介绍:

  • MQTT 协议最初是由 IBM 在 1999 年开发的,旨在为连接远程设备提供一种简单、高效的方式,以便在低带宽、不稳定的网络环境下进行通信。

  • 后来,MQTT 成为了物联网(IoT)领域中广泛使用的通信协议之一,被许多设备和平台所采用。

特点

  • 轻量级:协议开销小,数据包结构简单,对硬件资源和网络带宽的要求较低,适用于资源受限的设备,如传感器、嵌入式设备等。

  • 发布 / 订阅模式:基于发布 / 订阅的消息传递模型,解耦了消息的发送者(发布者)和接收者(订阅者),发布者不需要知道哪些订阅者会接收消息,反之亦然,提高了系统的灵活性和可扩展性。

  • 低功耗:支持持久会话和遗嘱消息等功能,能够在设备连接不稳定或意外断开的情况下,确保消息的可靠传输,同时也有助于降低设备的功耗。

  • 支持多种平台:可以在不同的操作系统和硬件平台上运行,包括嵌入式系统、移动设备和服务器等,具有很强的跨平台性。

工作原理

  • 组件

    • 发布者(Publisher):负责向 MQTT 服务器发送消息,发布者可以是任何能够产生数据的设备或应用程序,如传感器、智能设备等。

    • 订阅者(Subscriber):订阅特定主题的消息,当有新消息发布到所订阅的主题时,订阅者会收到通知并接收消息。

    • 代理服务器(Broker):作为消息的中转站,负责接收发布者发送的消息,并将消息路由到订阅了相应主题的订阅者。

  • 主题(Topic)

    • 是 MQTT 协议中消息的标识符,用于区分不同类型的消息。发布者在发送消息时需要指定主题,订阅者通过订阅感兴趣的主题来接收相关消息。主题可以是简单的字符串,也可以是具有层次结构的字符串,例如 "home/light/state"。
  • 消息

    • 由发布者发送,包含有效载荷(Payload)和主题等信息。有效载荷是实际要传输的数据,可以是任何格式,如 JSON、XML 等。

消息质量等级(QoS)

  • QoS 0:最多发送一次。消息发布者只发送一次消息,不进行任何确认或重传操作。适用于对消息丢失不敏感的场景,如实时性要求高但允许少量数据丢失的传感器数据传输。

  • QoS 1:至少发送一次。消息发布者会确保消息至少被发送一次,代理服务器在收到消息后会向发布者发送确认消息,如果发布者没有收到确认,则会重新发送消息,直到收到确认。可能会出现消息重复的情况,适用于大多数物联网场景,如设备状态更新、简单的控制指令传输等。

  • QoS 2:恰好发送一次。这是最高级别的 QoS,确保消息在发布者和订阅者之间只传递一次,不会丢失也不会重复。通过复杂的握手和确认机制来保证消息的可靠传输,适用于对数据准确性和完整性要求极高的场景,如金融交易、医疗数据传输等。

应用场景

  • 物联网领域:广泛应用于各种物联网设备之间的通信,如智能家居系统中,智能灯具、门锁、温湿度传感器等设备可以通过 MQTT 协议与中央控制器进行通信,实现设备的远程控制和数据采集。

  • 工业自动化:在工业生产中,用于连接各种工业设备、传感器和控制系统,实现生产过程的监控、数据采集和远程控制,提高生产效率和自动化水平。

  • 移动应用:在移动应用开发中,用于实现服务器与移动设备之间的消息推送功能,如实时新闻推送、订单提醒、社交消息通知等。

MQTT 协议以其轻量级、高效、灵活等特点,在物联网、工业自动化、移动应用等多个领域发挥着重要作用,为设备之间的通信和数据交互提供了一种可靠、便捷的解决方案。

二、环境准备

  1. 硬件:ARM 网关做为MQTT客户端的安装部署环境,确保网关硬件设备正常运行,具备稳定的网络连接,可通过以太网或 Wi-Fi 接入网络。同时,检查网关硬件资源(如内存、存储等)是否满足 MQTT 服务运行需求。PC机端做为MQTT服务器的安装部署环境。
  1. 软件
  • 操作系统:网关需安装支持 MQTT 协议的操作系统,常见的如 Linux 系统。若网关已预装操作系统,需确保系统更新至最新版本,以获取安全补丁和性能优化。
  • 安装 MQTT 客户端或服务器软件包。常用的 MQTT 客户端库有 Paho MQTT,它支持多种编程语言,如 Python、C/C++ 等。

二、PC机端MQTT 服务器安装与配置

1.安装MQTT 服务器

  • 若要搭建 MQTT 服务器,可选择 Mosquitto 等开源软件。在Linux系统上安装 Mosquitto 为例,可通过以下命令进行安装:

    sudo apt update sudo apt install mosquitto
    $sudo apt install mosquitto-clients

2.配置文件编辑

Mosquitto 的配置文件通常位于/etc/mosquitto/mosquitto.conf。使用文本编辑器(如nano或vim)打开该文件,可进行如下配置:

  • 设置监听端口:默认情况下,Mosquitto 监听 1883 端口(非加密连接)和 8883 端口(SSL/TLS 加密连接)。若需更改监听端口,可在配置文件中添加或修改port选项。例如,将监听端口改为 1884:port 1884。
  • 配置用户名和密码认证(可选但推荐):为增强安全性,可启用用户名和密码认证。首先创建一个用于存储用户名和密码的文件,例如/etc/mosquitto/passwd。使用mosquitto -passwd命令生成加密密码并添加用户,如:

    sudo mosquitto -passwd -c /etc/mosquitto/passwd your_username

然后在配置文件中添加如下内容启用认证:

复制代码
password_file /etc/mosquitto/passwd

allow_anonymous false

  • 配置 SSL/TLS 加密(可选):若要实现数据传输加密,需配置 SSL/TLS。首先获取 SSL 证书和私钥文件(如cert.pem和key.pem),并将其放置在合适的目录(如/etc/mosquitto/certs)。然后在配置文件中添加以下内容:

    listener 8883

cafile /etc/mosquitto/certs/ca.crt

certfile /etc/mosquitto/certs/cert.pem

keyfile /etc/mosquitto/certs/key.pem

3.启动和测试 MQTT 服务器

完成配置后,启动 Mosquitto 服务:

复制代码
$sudo systemctl start mosquitto

使用mosquitto_pub和mosquitto_sub命令进行简单测试。例如,在一个终端中订阅主题test_topic:

复制代码
mosquitto_sub -t test_topic -v

在另一个终端中向该主题发布消息:

复制代码
mosquitto_pub -t test_topic -m "Hello, MQTT!"

若能在订阅终端看到发布的消息,则说明 MQTT 服务器运行正常。

三、开发板MQTT 客户端配置与连接

  1. 选择编程语言和 MQTT 库:根据项目需求选择合适的编程语言和 MQTT 客户端库。例如,若使用 Python 开发,可安装paho-mqtt库:

    pip install paho-mqtt

  1. 编写客户端代码:以下是一个简单的 Python MQTT 客户端示例代码,用于连接到 MQTT 服务器并订阅和发布消息:

    import paho.mqtt.client as mqtt
    import time

    def on_connect(client, userdata, flags, rc):
    if rc == 0:
    print("Connected to MQTT Broker!")
    client.subscribe("test_topic")
    else:
    print(f"Failed to connect, return code {rc}")

    def on_message(client, userdata, msg):
    print(f"Received {msg.payload.decode()} on topic {msg.topic}")

    创建 MQTT 客户端

    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message

    client.username_pw_set("your_username", "your_password")

    连接到 MQTT 代理服务器

    client.connect("192.168.31.26", 1883, 60)
    client.loop_start()

    try:
    # 循环发布消息
    while True:
    client.publish("test_topic", "Hello from ARM gateway!")
    time.sleep(5)
    except KeyboardInterrupt:
    print("Exiting...")

    停止客户端循环

    client.loop_stop()

  2. 运行客户端代码 :保存上述代码为mqtt_client.py,并在终端中运行:

    $python mqtt_client.py

确保代码中填写的 MQTT 服务器地址、端口、用户名和密码等信息与实际配置一致。若一切正常,客户端将连接到 MQTT 服务器,订阅指定主题并定期发布消息。

相关推荐
亿坊电商1 天前
物联网-无人自助茶室-如何实现24H智能营业?
物联网
TDengine (老段)1 天前
TDengine 选择函数 TOP() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
御控工业物联网1 天前
智慧灌溉泵房远程监控物联网系统解决方案
物联网·远程监控·组态监控·智慧水务·智慧灌溉·无人值守泵站·设备远程调试
御控工业物联网1 天前
农田水利工程远程监控与远程调试的御控物联网系统解决方案
物联网·远程监控·远程调试
清风6666662 天前
基于STM32单片机的OneNet物联网粉尘烟雾检测系统
stm32·单片机·物联网·毕业设计·课程设计
TDengine (老段)2 天前
TDengine 特殊函数 MODE() 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
余衫马2 天前
开发指南:使用 MQTTNet 库构建 .Net 物联网 MQTT 应用程序
物联网·mqtt·.net
御控工业物联网2 天前
城市二次供水物联网监测管控管理平台御控解决方案:构建全链路智能水务新生态
物联网·数据采集·远程监控·物联网网关·二次供水·智能水务·泵站
电子科技圈2 天前
芯科科技FG23L无线SoC现已全面供货,为Sub-GHz物联网应用提供最佳性价比
科技·嵌入式硬件·mcu·物联网·制造·智能硬件·交通物流
禁默2 天前
第六届大数据、人工智能与物联网工程国际会议(ICBAIE 2025)
大数据·人工智能·物联网