借助現代技術,創建一個完整的家庭自動化系統非常簡單,它允許您使用智能手機控制任何類型的負載。本文幫助您設計一個物聯網系統,讓您可以使用手機遠程驅動伺服電機和 LED 二極管。該系統顯然可以擴展到任何其他類型的應用程序。您會看到,使用 Raspberry Pi 和 MQTT 協議等嵌入式板卡構建 IoT 對象并不難。
本文的目標是設計一個適用于小型設備遠程控制的系統。對于更高功率的電源,有必要構建更強大的專用和隔離部分。該系統由以下組件組成(見圖1):
無線路由器
Raspberry Pi 3 B+ 帶 Wi-Fi 連接
用于模擬小負載的 LED 二極管
伺服電機
帶有 MQTT 客戶端應用程序的智能手機
圖 1:系統的組成部分
基礎知識
要理解這篇文章,以下基礎知識是必要的,以避免重復可能不必要地延長內容的概念。目的是立即找到問題的解決方案:
電子知識的最低限度
對 Python 語言的最少了解
MQTT協議知識
Mosquitto 的基本知識
MQTT 協議 MQTT
的主要特點是它是一個發布/訂閱協議。在這種類型的發布/訂閱通信中,傳感器(或其他設備)將數據發布到稱為代理的中央系統。所有想要獲取此數據的設備都會訂閱代理,當數據可用時,代理會向它們發送數據。我們的系統有以下幾個部分,如圖 2所示:
代理由 Raspberry Pi 代表。
訂閱者由 Raspberry Pi 代表。
發布者由適用于 Android 智能手機的 MQTT 客戶端應用程序表示。
代理和訂閱者位于同一設備上。理論上,所有三個圖形也可以位于同一儀器中。
圖 2:MQTT 協議使用代理、訂閱者和發布者。
這個協議實現起來非常簡單;它不需要在路由器端打開門:Raspberry Pi 連接到外部(或本地)MQTT 服務器,啟動連接并等待命令。智能手機將命令發送(發布)到外部 MQTT 代理服務器,后者又將消息傳遞給 Raspberry Pi。當然,我們也可以反方向發送 MQTT 消息。多虧了這個協議,我們不需要在 NAT 中打開端口,也不需要知道我們的公共 IP 地址。有幾個 MQTT 代理服務器,其中許多使用端口 1883。其中一些是:
mqtt.eclipse.org
test.mosquitto.org
mqtt.switch.cz
電氣原理
圖 原理上,接線圖非常簡單。顯然,這是一個通用配置。要將其應用于實際案例,必須實施電源電路、隔離器、光隔離器和其他安全解決方案。在圖 3中,我們可以看到示意圖。在其中,我們可以找到 LED 二極管及其電阻,連接到引腳 32 (GPIO12)。伺服連接到引腳 2 (5 V PWR)、引腳 34 (GND) 和引腳 22 (GPIO25)。如果需要,可以通過低阻值電阻連接舵機的數據端。
圖 3:簡單的電氣原理圖
密切注意 Raspberry Pi 的引腳排列,檢查連接以避免危險錯誤很有用:如圖 4所示。通過打開終端窗口并運行命令,可以在 Raspberry Pi 上訪問方便的參考:
引出線
此工具由 GPIO Zero Python 庫提供,該庫默認安裝在 Raspbian 桌面映像上,但不安裝在 Raspbian Lite 上。
圖 4:Raspberry Pi 的 GPIO 引腳排列及其實用程序“引腳排列”
客戶端 MQTT
您可以使用適用于智能手機、平板電腦或其他設備的 Android 或其他操作系統的任何類型的 MQTT 客戶端。我們用于這個項目的客戶端是 MyMQTT(圖 5),因為它非常簡單和快速。顯然,要執行的第一個操作是配置代理的 IP 地址,在我們的例子中,它對應于樹莓派的地址(例如,192.168.1.54)。您必須定義端口號,通常為 1883,以及可選的用戶名和密碼。您還可以使用遠程代理地址。在代理地址中,我們必須配置以下消息,這些消息會觸發相應的訂閱者操作:
主題:伺服;消息:開
主題:伺服;消息:關閉
主題:伺服;消息:閃爍
主題:伺服;消息:中心
主題:伺服;消息:左
主題:伺服;消息:對
主題:伺服;留言:你好
以下是創建的消息及其對訂閱者的影響的簡要說明。用戶可以創建自己的消息,但必須在接收程序中實現它們:
ON:此命令具有“打開”連接到樹莓派端口的 LED 二極管的功能。在這種情況下,LED 代表要遠程控制的負載。對于穩健的設備,需要構建電源和隔離電路。
OFF:該指令具有關閉同一個 LED 的功能。
BLINK:該指令具有使 LED 二極管閃爍一定次數的功能。
CENTER:該指令具有使伺服電機的軸回到中心位置的功能。
LEFT:該指令具有使伺服電機的軸向左移動的功能。
RIGHT:該指令具有使伺服電機的軸回到正確位置的功能。
HELLO:此命令具有在電視上再現包含“Hello”一詞的音頻 .WAV 文件的功能。
?
圖 5:您可以為 Android 或其他操作系統使用任何類型的 MQTT 客戶端。
只需在手機上按下這些消息之一即可激活 Raspberry Pi 上的控件。
在 Raspberry Pi 上安裝 Mosquitto
您需要將 Raspberry Pi 連接到互聯網(通過電纜或 Wi-Fi)。對于 Mosquitto 和客戶端的安裝,必須從終端輸入以下命令:
sudo apt install mosquitto
如果您還需要客戶端,可以使用以下命令安裝它:
sudo apt install mosquitto-clients
訂閱者上的軟件
現在,讓我們看一下具有訂閱者功能的分析接收到的消息的軟件。首先,我們需要安裝 Paho-MQTT。它是 Eclipse 基金會開發的開源 Python MQTT 客戶端。Paho-MQTT 可以在任何支持 Python 的設備上運行。Paho Python Client 類提供了一些幫助函數,以便更輕松地將 MQTT 協議與 Python 語言一起使用。可以使用控制臺命令安裝它:
sudo pip install paho-mqtt
如前所述,項目要求是創建一個系統,通過使用智能手機,可用于控制 LED 二極管、伺服電機和音頻文件的再現。編程語言的選擇落在了 Python 上,因為它極其簡單,并且可以實現一些有用的 API 來完全控制 MQTT 協議。系統程序非常簡單。我們可以查看圖6所示的流程圖了解它是如何工作的。該程序用 Python 語言編寫,導入外部模塊,創建 MQTT 對象,連接到代理(本地或公共),訂閱主題“伺服”,并配置輸出端口。在無限循環中,條件會檢查發布者是否存在針對特定“主題”的消息。如果是這樣,將對連接到樹莓派的負載采取相應的措施。
圖 6:程序流程圖
請記住,我們的消息路由的主題名稱是“Servo”。用 Python 語言編寫的完整且實用的源代碼附在文末。它的名字是“servo.py”。要開始執行程序,請檢查 Mosquitto 是否正在運行,然后調用命令:
蟒蛇伺服.py
圖 7顯示了工作時的程序。由代理處理并由訂閱者接收的主題“伺服”的消息顯示在終端窗口上。
圖 7:訂閱者正在運行。
結論
MQTT 協議背后的哲學很容易理解。本文的目的是鼓勵設計人員創建一個使用 MQTT 協議的系統(圖 8)。事實上,很多時候,那些與電子打交道的人,尤其是初學者,不知道從哪里開始。使用 MQTT 協議實現一個完整且功能齊全的系統,非常適合物聯網應用,對于電子設計人員來說非常重要,通過自己的智能手機遠程控制家中的設備將是一個令人滿意的項目。如果您使用公共代理來控制世界上任何距離的設備,最終結果將是驚人的,而且最重要的是非常有用。
圖 8:MQTT 協議測試
評論