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