24小時(shí)聯(lián)系電話(huà):18217114652、13661815404
中文
行業(yè)資訊
如何使用 IoT MQTT 將 ESP32 WiFi 微控制器連接到 Raspberry Pi
如何使用 IoT MQTT 將 ESP32 WiFi 微控制器連接到 Raspberry Pi
物聯(lián)網(wǎng) (IoT) 設備最重要的功能之一是其與網(wǎng)絡(luò )“對話(huà)”的能力。一個(gè)設備與另一個(gè)設備成功通信所必須采取的步驟稱(chēng)為通信協(xié)議。
協(xié)議是一組管理特定事務(wù)的官方程序和規則。就物聯(lián)網(wǎng)設備而言,通信協(xié)議規定了設備為了發(fā)送/接收信息而必須采取的程序。通信協(xié)議分為兩類(lèi),網(wǎng)絡(luò )連接協(xié)議和數據通信協(xié)議
讓我們想象一下,我們正在布局一個(gè)新的城市。首先,我們從某處的一塊空地開(kāi)始。其次,我們必須放置具有不同大小和重量能力的實(shí)體道路,以使人們能夠進(jìn)入新城市。
如下圖所示,我已經(jīng)布置了道路。我們比喻中的道路是網(wǎng)絡(luò )協(xié)議。網(wǎng)絡(luò )協(xié)議是網(wǎng)絡(luò )的物理層。在 OSI 模型中,它們通常被標記為物理層、數據鏈路層和網(wǎng)絡(luò )層。
現在我們需要用汽車(chē)和人(應用程序數據協(xié)議)填充道路(網(wǎng)絡(luò )協(xié)議)。正如您在下面的更新圖中所見(jiàn),不同的車(chē)輛可以適應不同的路線(xiàn),反之亦然。
在我們的案例中,網(wǎng)絡(luò )協(xié)議和數據協(xié)議攜手合作,以促進(jìn)通信通道(道路),允許數據通過(guò)互聯(lián)網(wǎng)傳輸到其預期目的地。
作為快速復習,開(kāi)放系統互連 (OSI) 模型概述了計算機系統通過(guò)網(wǎng)絡(luò )進(jìn)行通信時(shí)必須使用的 7 層(步驟)。下圖顯示了這 7 個(gè)步驟以及用于層的通信協(xié)議示例。
今天有許多協(xié)議可以促進(jìn) OSI 模型的網(wǎng)絡(luò )和應用層。在本文中,我們將重點(diǎn)關(guān)注數據協(xié)議部分,尤其是消息隊列遙測傳輸 (MQTT) 協(xié)議。
在大多數應用程序中,在設計或編程您的物聯(lián)網(wǎng)設備時(shí),您使用的通信模塊將負責網(wǎng)絡(luò )協(xié)議,您只需關(guān)注應用程序和數據協(xié)議。
為了演示 MQTT 在實(shí)際應用中的使用,我們將展示如何通過(guò)本地網(wǎng)絡(luò )將 ESP32 開(kāi)發(fā)模塊連接到 Raspberry Pi,并通過(guò) MQTT 進(jìn)行通信以發(fā)送輕量級數據。
MQTT 是為物聯(lián)網(wǎng)設備制定的協(xié)議。它允許設備和服務(wù)器之間的輕量級通信。該協(xié)議在MQTT 官方網(wǎng)站中有詳細記錄。
簡(jiǎn)單來(lái)說(shuō),它允許設備訂閱和發(fā)布主題(端點(diǎn)),以便通過(guò)網(wǎng)絡(luò )協(xié)議發(fā)送小數據。
MQTT 代理用作將所有消息路由到合法所有者(訂閱者)并接受來(lái)自不同設備的發(fā)布消息的管理器。每個(gè) MQTT 通信機制都必須從規劃要用于服務(wù)器端和設備端的主題開(kāi)始。
在我們的演示中,我們將使用 Raspberry Pi 作為我們的 MQTT 代理(服務(wù)器)和 ESP32 作為發(fā)布者,將光傳感器數據發(fā)布到 MQTT 代理主題,如下圖所示。
從上面看到的計劃主題和客戶(hù)的流程圖開(kāi)始通常是一個(gè)好主意。我們將使用光傳感器來(lái)演示使用 MQTT 將數據推送到 Raspberry Pi 上的 MQTT 代理的想法。
在實(shí)際應用中,安全性是必須考慮的第三層。在我們的例子中,我們不會(huì )太擔心安全性,因為它在沒(méi)有外部連接的本地網(wǎng)絡(luò )中運行。
但是,如果您將經(jīng)紀人暴露在互聯(lián)網(wǎng)上,您希望確保您的網(wǎng)絡(luò )安全。
我們將演示分為以下幾個(gè)部分:
ESP32
光傳感器
MQTT 客戶(hù)端
無(wú)線(xiàn)網(wǎng)絡(luò )連接
樹(shù)莓派
MQTT 代理
樹(shù)莓派
Raspberry Pi 將充當 MQTT 代理服務(wù)器。它將我們所有的消息路由到相應的訂閱者并接受來(lái)自發(fā)布者的消息。
第1步
首先,在您的 Raspberry Pi 上啟用 SSH,以便您從主機 PC 訪(fǎng)問(wèn)終端。如果您使用的是 Windows,請務(wù)必安裝 SSH 客戶(hù)端,例如 PuTTy。
找到您的 Raspberry Pi 的 IP 地址并通過(guò) SSH 連接到其中。
第2步
安裝 mosquitto 和 mosquitto-clients 以啟動(dòng) MQTT 代理服務(wù)器并使用 mosquitto-clients 測試服務(wù)器。使用以下命令安裝 mosquitto:
sudo apt install mosquitto mosquitto-clients
第 3 步
此時(shí) mosquitto MQTT 代理服務(wù)應該正在運行。要確認這一點(diǎn),請運行以下命令:
sudo systemctl 狀態(tài)蚊子
如果您看到綠色的“活動(dòng)(運行)”狀態(tài),這意味著(zhù)它正在后臺運行,并且到目前為止您的設置很好。
第4步
要在每次 Raspberry Pi 重新啟動(dòng)時(shí)自動(dòng)啟動(dòng) mosquitto 服務(wù),請運行以下命令:
sudo systemctl 啟用 mosquitto.service
第 5 步
配置 mosquitto conf 文件,以便您可以通過(guò)啟用端口 1883 通過(guò)本地網(wǎng)絡(luò )連接到它。
從以下命令開(kāi)始編輯 mosquitto.conf 文件:
須藤納米/etc/mosquitto/mosquitto.conf
然后,移動(dòng)到文件的最后并輸入以下行:
聽(tīng)眾 1883
allow_anonymous 真
接下來(lái),按 CRTL-X 退出,然后重新啟動(dòng)您的 Raspberry Pi。
第 6 步
記下您的 Raspberry Pi IP 地址,以便您可以將其用作所有 MQTT 通信的主機名。
第 7 步
讓我們繼續并啟動(dòng)一個(gè)訂閱者,它將顯示已發(fā)送到主題“esp32/light”的所有消息,以便查看 ESP32 將發(fā)送到該主題的消息。為此,請運行以下命令:
mosquitto _sub -h <RPi IP 地址> -t “esp32/light”
請務(wù)必將 <RPi IP 地址> 替換為您的 Raspberry Pi 的 IP 地址。
ESP32
在開(kāi)始使用 ESP32 板之前,請務(wù)必完成以下先決條件:
您將需要一個(gè)基于 ESP32 的開(kāi)發(fā)板
使用這些詳細說(shuō)明安裝和設置 ESP-IDF 的開(kāi)發(fā)環(huán)境(使用VS Code Extension)
購買(mǎi)光傳感器——最好是這種類(lèi)型的光敏電阻。
你還需要一個(gè)面包板
第1步
在面包板上構建以下電路:
這里的R_Photo代表光敏電阻,串聯(lián)一個(gè)10k歐的電阻組成分壓器。我們需要確保光敏電阻輸出連接到 ESP32 的 ADC 輸入。在我們的設置中,我使用了以下引腳:
ESP32_模擬 |
GPIO34 |
第2步
Git 從此處克隆示例 ESP-IDF 代碼。
第 3 步
從您的 VS Code 中打開(kāi)文件夾并將目標設備更改為 esp32。然后,更改串行 COM 端口并開(kāi)始配置設置。
第4步
在配置 (menuconfig) 下,轉到示例連接配置和示例配置,輸入以下內容:
WiFi SSID:您的 WiFi SSID 名稱(chēng)
WiFi密碼:您的WiFi網(wǎng)絡(luò )密碼
Broker URL:輸入樹(shù)莓派IP,格式如下“mqtt://<ip地址>
第 5 步
保存配置,然后在 ESP32 板上構建、刷新和監控固件。
第 6 步
您應該開(kāi)始看到數據流入您之前設置的 MQTT 代理 SSH 窗口。
您看到的是直接從 ESP32 通過(guò)本地網(wǎng)絡(luò )發(fā)布到 Raspberry Pi 上的 MQTT 代理的 ADC 數據。
結論
該演示可以輕松移植到您計劃使用的任何現有應用程序中。如果您想收集有關(guān)您家中特定流程或系統的數據,您可以使用這種方法輕松完成。
您需要做的就是處理和采集從傳感器到 ESP32 的數據。有兩種類(lèi)型的傳感器通信,模擬和數字。我們在本文中研究了一個(gè)模擬傳感器。