24小時(shí)聯(lián)系電話(huà):18217114652、13661815404
中文
行業(yè)資訊
MQTT 入門(mén)
MQTT 入門(mén)
在當今連接設備無(wú)處不在的世界中,物聯(lián)網(wǎng)(IoT) 一詞已成為“連接到互聯(lián)網(wǎng)的小部件”的事實(shí)上的描述。雖然這個(gè)美化的駱駝案例,首字母縮略詞本身就很漂亮,但“互聯(lián)網(wǎng)連接設備”的含義遠比人們意識到的要多。在本文中,我想深入探討 IoT 設備中使用的最流行的協(xié)議之一:MQ 遙測傳輸 (MQTT) 協(xié)議。我們將簡(jiǎn)要介紹它是什么,它是如何工作的,以及它與其他使用的技術(shù)相比有何新穎之處。
MQTT 是什么以及為什么
在典型的客戶(hù)端-服務(wù)器設置中,我們有一個(gè)將傳感器數據發(fā)布到服務(wù)器的提供者(即設備本身)和一個(gè)請求從服務(wù)器查看傳感器數據的消費者。MQTT 也不例外。它是一種用于設備之間通信的輕量級協(xié)議。設備通常會(huì )將數據“發(fā)布”(即發(fā)送)到 MQTT“代理”(或服務(wù)器),然后將其保留以提供給其他設備或 Web 應用程序。另一個(gè)設備或 Web 應用程序將從 MQTT 代理“訂閱”該數據集(即請求數據),然后 MQTT 代理將該數據傳送給它們。把它想象成一個(gè)美化的 Web 服務(wù)器,有兩個(gè)主要的例外:
數據包非常輕量級(提高了速度、效率和成本)
MQTT 可以使用互聯(lián)網(wǎng)以外的其他通信模式(例如藍牙)
圖 1:帶有設備的 MQTT 代理
由于上述兩個(gè)原因,MQTT 已成為物聯(lián)網(wǎng)設備非常流行的協(xié)議。從歷史上看,人們會(huì )使用 HTTP POST/GET 請求來(lái)實(shí)現這種形式的設備-服務(wù)器通信,但這會(huì )限制他們使用其他通信設備(如藍牙或 ZigBee)的能力。由于 MQTT 在這方面是不可知的,我們現在可以使用 MQTT在基于網(wǎng)格的網(wǎng)絡(luò )中擁有消息傳遞功能,而無(wú)需連接到互聯(lián)網(wǎng)
MQTT 入門(mén)
有很多方法可以開(kāi)始使用 MQTT,包括設計完整的端到端解決方案。為了簡(jiǎn)單起見(jiàn),我們將在本示例中使用 Adafruit 提供的免費 MQTT 代理服務(wù)。這將使我們能夠專(zhuān)注于開(kāi)發(fā)過(guò)程的客戶(hù)端。要開(kāi)始使用,您需要具備以下條件:
Arduino 設備(此示例使用Arduino Uno)
支持互聯(lián)網(wǎng)連接的 Arduino擴展板(即Arduino 以太網(wǎng)擴展板)或基于 Wifi 的 Arduino 兼容設備,例如ESP8266。
Arduino IDE軟件
使用Adafruit IO 的帳戶(hù)。
為了設置我們的環(huán)境,我們需要先做一些事情。讓我們首先設置我們的硬件。我將使用連接到本地網(wǎng)絡(luò )的 Arduino Uno 和 Arduino Ethernet Shield。
圖 2:并排放置 Arduino Uno 和 Arduino Ethernet Shield
我們需要在 Arduino 頂部堆疊以太網(wǎng)擴展板并將其插入網(wǎng)絡(luò ),如下所示:
圖 3:Arduino Uno 和 Arduino Ethernet Shield 連接在一起并插入
配置好硬件后,讓我們打開(kāi) Arduino IDE 并安裝必要的庫。打開(kāi) Arduino IDE 并導航到工具 > 管理庫...
圖 4:管理庫菜單選項
搜索 Adafruit MQTT 庫并單擊安裝:
圖 5:庫管理器
系統還會(huì )提示您安裝庫依賴(lài)項。繼續并單擊“全部安裝”。
圖 6:庫依賴(lài)項對話(huà)框
安裝支持庫后,您可以通過(guò)導航到文件 > 示例 > Adafruit MQTT 庫 > mqtt_ethernet 打開(kāi)示例。
圖 7:mqtt_ethernet 示例的菜單導航
在這一點(diǎn)上,我們需要暫停并從我們的 Adafruit IO 帳戶(hù)中獲取我們的憑據。登錄Adafruit IO并單擊頂部的“我的密鑰”:
圖 8:My Key 菜單選項
現在回到您的 Arduino mqtt_ethernet草圖示例,并使用位于您的 Adafruit IO 帳戶(hù)中的“用戶(hù)名”和“活動(dòng)密鑰”字段填寫(xiě) AIO_USERNAME 和 AIO_KEY 字段。確保您的設備已連接,然后單擊上傳:
圖 9:準備好上傳的 Arduino Sketch
要查看設備的狀態(tài)(并確保它已連接到 MQTT 代理),請導航到工具 > 串行監視器。您應該會(huì )看到如下所示的輸出:
圖 10:Arduino mqtt_ethernet 示例的串行監視器輸出
此時(shí)我們已經(jīng)確認數據已成功發(fā)送到 MQTT 代理。要查看服務(wù)器上的實(shí)際數據,讓我們返回我們的 Adafruit IO 帳戶(hù)并單擊“Feeds”,然后單擊“photocell”
圖 11:Adafruit IO 饋送
我們現在可以實(shí)時(shí)捕獲 Arduino 發(fā)送到 MQTT 代理的數據。我們也可以下載歷史數據。
圖 12:從 Arduino 發(fā)送到 MQTT 代理的實(shí)時(shí)和歷史數據
恭喜!您現在已經(jīng)設置了啟用 MQTT 的設備并將您的數據發(fā)布到 MQTT 代理?,F在進(jìn)行下一步,構建您自己的自定義傳感器并將數據發(fā)布到您的 MQTT 代理。
結論
我們了解了 MQTT 是什么、使用它的原因以及如何在微控制器上實(shí)現它。我們還演示了如何開(kāi)始使用免費的 MQTT 代理服務(wù)并查看其服務(wù)器上的數據。您現在應該可以根據我們用來(lái)將您自己的傳感器數據發(fā)布到 MQTT 代理并在云上查看的示例開(kāi)始您自己的 Arduino 草圖。