當前位置: 妍妍網 > 碼農

物聯網通訊協定解析:從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這兩種主要物聯網通訊協定的架構、特點和一個簡單的實作例子。可以看出,它們都為物聯網世界的不同場景和需求提供了有效的解決方案。

    無論您前來了解物聯網通訊協定,還是準備將這些協定整合到您的計畫中,我希望這篇文章能為您提供有價值的見解。選拔最適合您需求的協定,可能需要仔細地評估您的裝置環境、資料通訊需求及網路狀況。

    如果喜歡我的內容,不妨點贊關註,我們下次再見!

    大家註意:因為微信最近又改了推播機制,經常有小夥伴說錯過了之前被刪的文章,或者一些限時福利,錯過了就是錯過了。所以建議大家加個 星標 ,就能第一時間收到推播。

    點個喜歡支持我吧,點個 在看 就更好了