物联网通信,学学MQTT

admin 2024年3月25日07:42:32评论4 views字数 1573阅读5分14秒阅读模式

写在前面

好久没发公众号了,最近沉迷电子DIY,没事搞了个四足机器人玩,用的esp WiFi模块来做的通信,记录一下电子通信中学到的MQTT技术。

MQTT

MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议。它跟KafKa的架构类似,都是通过发布-订阅的方式进行通信,不过Kafka是采用这种模式的消息队列(可做数据存储),而MQTT仅仅是类似TCP的传输协议。

在实际使用中有三个角色,代理服务器(Broker),订阅者(Subcriber),发布者(Publisher)。通过唯一标识topic,来进行数据传输,数据收发方不用再像TCP一样建立连接,这点表现形式上跟UDP广播又比较像。

物联网通信,学学MQTT

订阅者订阅一个topic,在运行的时候,当有发布者对着这个topic发送数据,订阅者就可以收到。

MQTT相比HTTP特别轻量级,经常应用在物联网领域。

代码示例

这里我用python来演示,代理服务器Broker有很多公网免费的,topic是自己自定义的,这里我测试配置的config.py如下:

# config.py# MQTT代理服务器的地址broker_address = "mqtt.eclipseprojects.io"# 自定义的topictopic = "ssremex_test/topic"

随后,来模拟发布者和订阅者,这里用到了一个第三方库 paho,它是一个相对稳定的专门用来实现MQTT客户端的库。

pip install paho

在这个库中,不管是发布者还是订阅者都是属于客户端Client,下面分别来实现来进行实现:

# 发布者 publisher.pyimport paho.mqtt.client as clientfrom config import broker_address, topic# 创建客户端实例,赋予ID P1publisher = client.Client(client.CallbackAPIVersion.VERSION2, client_id="P1")# 连接Broker代理publisher.connect(broker_address)message = "Hello MQTT"publisher.publish(topic, message)
import paho.mqtt.client as clientfrom config import broker_address, topicimport time# 连接成功回调函数def on_connect(subscriber, userdata, flags, reason_code, properties):    print(f"Connect with result code: {reason_code}")    # 订阅topic    subscriber.subscribe(topic)# 消息接收回调函数def on_message(subscriber, userdata, msg):    print(f"Received message: {msg.payload.decode()}, topic: {msg.topic}")subscriber = client.Client(client.CallbackAPIVersion.VERSION2, client_id="S1")subscriber.on_connect = on_connectsubscriber.on_message = on_messagesubscriber.connect(broker_address)subscriber.loop_forever()

代码很简单,关键地方也注释了,就不用过多解释。

演示

MQTT本质也是实时通信技术,所以先运行订阅者,再运行发布者

物联网通信,学学MQTT

物联网通信,学学MQTT

收工!

原文始发于微信公众号(飞羽技术工坊):物联网通信,学学MQTT

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月25日07:42:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   物联网通信,学学MQTThttps://cn-sec.com/archives/2600288.html

发表评论

匿名网友 填写信息