当前位置: 欣欣网 > 码农

物联网通信协议解析:从MQTT到CoAP

2024-02-26码农

物联网通信协议解析:从MQTT到CoAP

物联网(Internet of Things,IoT)是一个由众多设备组成的网络,这些设备通过互联网相互连接,以无缝和自动化的方式进行通信。在物联网生态中,各种不同的通信协议发挥着至关重要的作用,以便实现高效、可靠且安全的数据交换。今天,我将带您一起探讨两种广泛使用的物联网通信协议:消息队列遥测传输(MQTT)和受限应用协议(CoAP)。我们将了解它们各自的架构、用例及实现方式。

MQTT:轻量级消息传递协议

消息队列遥测传输(MQTT)是一种轻量级的发布/订阅消息传递协议,特别适用于远程通信和带宽有限的环境。它是IBM在1999年为连接油管远程传感器而设计的,现在已经成为一个开放的OASIS标准。

MQTT 架构

MQTT 协议基于客户端/服务器(或叫发布者/订阅者)模型。在这个模型中:

  • 客户端 执行发布(发送)或订阅(接收)消息的操作。

  • 代理(Broker) 是服务端组件,负责接收来自客户端的所有消息,将它们过滤,并确保它们送达订阅了这些消息主题的客户端。

  • MQTT 特点

  • 轻量级和开放 :使用较少的数据包并减小网络流量。

  • 异步通信 :提供了QoS(服务质量)等级,保证消息的送达。

  • 会话保持 :即使设备临时离线,也能确保不丢失任何消息。

  • Last Will and Testament (遗嘱):允许客户端预设一个在连接意外断开时将会发布的消息。

  • MQTT 实现

    以下是使用Python和Paho MQTT库实现的一个基础的MQTT客户端实例:

    import paho.mqtt.client as mqtt
    # 连接成功回调
    def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("iot/topic")
    # 接收消息回调
    def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    # 设置代理服务器的IP地址和端口号
    client.connect("mqtt_broker_ip", 1883, 60)
    # 循环等待消息client.loop_forever()



    在这段代码中,我们创建了一个MQTT客户端,它连接到代理服务器,并订阅了特定的主题( iot/topic )。当它收到来自这个主题的消息时,会输出到控制台。

    CoAP:轻量级的Web传输协议

    受限应用协议(CoAP)是一种专门为紧凑型设备设计的Web传输协议,旨在将HTTP协议的简易性和REST模型联接至物联网设备。CoAP是在受限资源环境中实现机器间互联的理想选择,并且它被设计为能够轻松映射到HTTP模型以简化从物联网世界到Web世界的集成。

    CoAP 架构

    与HTTP类似,CoAP协议也遵循客户端-服务器模型,但在以下方面进行了优化以适应物联网的特点:

  • UDP :CoAP运行于传输层的UDP之上,从而减少了TCP的连接开销。

  • 异步消息交换 :支持非确认消息和确认消息,前者不需要应答,后者需要。

  • 资源发现 :使得设备能够自己宣告或发现网络中的资源。

  • 四种请求类型 :GET、POST、PUT和DELETE,这些与HTTP请求类似。

  • CoAP 特点

  • 适应性强 :可以在高丢包率的网络中工作。

  • 多播支持 :支持向多个设备同时发送消息。

  • 简单的代理和缓存机制 :易于集成与缓存。

  • CoAP 实现

    以下是使用Python和CoAPthon库实现CoAP客户端的简化例子:

    from coapthon.client.helperclient import HelperClient
    host = "coap_server_ip"
    port = 5683
    path ="coap_resource"
    client = HelperClient(server=(host, port))
    response = client.get(path)
    print(response.pretty_print())
    client.stop()


    在这段代码中,我们创建了一个CoAP客户端。它发送一个GET请求到服务器的特定资源路径( coap_resource ),获取信息并打印出来。

    现在,我们已经简要介绍了MQTT和CoAP这两种主要物联网通信协议的架构、特点和一个简单的实现例子。可以看出,它们都为物联网世界的不同场景和需求提供了有效的解决方案。

    无论您前来了解物联网通信协议,还是准备将这些协议集成到您的项目中,我希望这篇文章能为您提供有价值的见解。选拔最适合您需求的协议,可能需要仔细地评估您的设备环境、数据通信需求及网络状况。

    如果喜欢我的内容,不妨点赞关注,我们下次再见!

    大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,或者一些限时福利,错过了就是错过了。所以建议大家加个 星标 ,就能第一时间收到推送。

    点个喜欢支持我吧,点个 在看 就更好了