在本教程中,我們將使用 Adafruit IO 作為 MQTT 代理來(lái)控制連接到 Raspberry Pi GPIO 的 AC 設(shè)備。
所需組件
安裝了 Raspbian Stretch 的 Raspberry Pi。
繼電器模塊
電燈泡
跳線
在這里,我們將使用 SSH 訪問(wèn)筆記本電腦上的 Raspberry Pi。您可以在筆記本電腦上使用 VNC 或遠(yuǎn)程桌面連接,或者可以將您的 Raspberry pi 連接到顯示器。
電路原理圖
這個(gè)帶有 MQTT 云和樹(shù)莓派的物聯(lián)網(wǎng)控制家電的電路圖很簡(jiǎn)單,只需在樹(shù)莓派的 GPIO 引腳 35 上連接一個(gè)帶有繼電器模塊的燈泡。
在樹(shù)莓派上安裝 MQTT 云庫(kù)
這里Adafruit IO 平臺(tái)與 Raspberry Pi 一起用作 MQTT 代理。正如我們?cè)谥暗慕坛讨卸啻问褂肁dafruit IO平臺(tái)一樣,我們可以在 Raspberry Pi 中使用它。
制作儀表板后,在 Raspberry Pi 中安裝一些庫(kù)以開(kāi)始使用 MQTT。
1.首先,通過(guò)發(fā)出以下命令更新您的 Pi 和 Python
sudo apt-get update
sudo apt-get upgrade
sudo pip3 install --upgrade setuptools
2. 現(xiàn)在,使用以下命令安裝 Rpi.gpio 和 Adafruit blink 庫(kù)
sudo pip3 install RPI.GPIO
sudo pip3 install adafruit-blinka
3. 使用以下命令安裝 Adafruit IO 庫(kù)
sudo pip3 安裝 adafruit-io
4. 使用以下命令從 github 克隆 adafruit 示例
git 克隆 https://github.com/adafruit/Adafruit_IO_Python.git
5. 然后,通過(guò)在終端中輸入以下命令導(dǎo)航到示例文件夾:
cd Adafruit_IO_Python/examples/basics
如果你不確定你在哪個(gè)目錄,你可以通過(guò)運(yùn)行 pwd來(lái)檢查。
6. 對(duì)于此文件夾中的所有示例,您需要設(shè)置 ADAFRUIT_IO_KEY 和 ADAFRUIT_IO_USERNAME,這可以從 Adafruit 儀表板中找到。如下所示
切換 Adafruit IO 儀表板上的按鈕,您應(yīng)該在 Pi 的終端中看到以下內(nèi)容。
7. 現(xiàn)在,使用nano編輯器打開(kāi)subscribe.py文件。輸入以下命令打開(kāi)它
須藤納米訂閱.py
我們必須修改這個(gè)程序來(lái)控制儀表板上的任何 GPIO。
MQTT控制樹(shù)莓派GPIO的編碼說(shuō)明
首先,導(dǎo)入所有必需的庫(kù)以使用 GPIO 引腳和 Adafruit MQTT 客戶端。
將 RPi.GPIO 導(dǎo)入為 GPIO 從 Adafruit_IO 導(dǎo)入sys導(dǎo)入 MQTTClient
現(xiàn)在,設(shè)置 GPIO 模式并定義 LED 引腳號(hào)并設(shè)置為輸出。
GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) ledPin = 12 GPIO.setup(ledPin, GPIO.OUT)
接下來(lái),我們必須設(shè)置在創(chuàng)建儀表板時(shí)找到的 AIO 密鑰和用戶名。
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
輸入您為打開(kāi)和關(guān)閉燈而提供的提要名稱(chēng)。在這里,它是“光”。
FEED_ID = '光'
現(xiàn)在,定義一個(gè)在有事件發(fā)生時(shí)將被調(diào)用的函數(shù)。因此,我們將使用client.subscribe(FEED_ID)訂閱 Feed
def connected(client): client.subscribe(FEED_ID) print('Waiting for feed data...')
訂閱提要后,我們必須檢查新值并將其存儲(chǔ)到有效負(fù)載變量中。為此消息函數(shù)被調(diào)用。因此,每當(dāng)有效載荷變量中有“1”時(shí),將 LED 引腳設(shè)為高電平,“0”將其設(shè)為低電平。
def message(client, feed_id, payload): print('Feed {0} received new value: {1}'.format(feed_id, payload)) if payload == 1: GPIO.output(ledPin, GPIO.HIGH) else : GPIO.輸出(ledPin,GPIO.LOW)
現(xiàn)在,創(chuàng)建一個(gè) MQTT 客戶端來(lái)連接 Adafruit IO 平臺(tái)并來(lái)回發(fā)送消息。
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = 已連接 client.on_disconnect = 已斷開(kāi)
另外,請(qǐng)注意代碼中的正確縮進(jìn),否則會(huì)顯示錯(cuò)誤。教程末尾給出了完整的 Python 代碼。
最后,使用 ctrl+x 保存程序并回車(chē)?,F(xiàn)在,我們必須運(yùn)行腳本才能訂閱消息。所以在終端輸入python subscribe.py并回車(chē)。
python訂閱.py
您將看到一條消息正在等待 Feed 數(shù)據(jù)。..,如下圖所示。
現(xiàn)在,確保繼電器模塊與 Raspberry Pi 的 GPIO 引腳連接,然后轉(zhuǎn)到 Adafruit IO 儀表板并更改光饋。收到“ 1”時(shí)燈泡應(yīng)打開(kāi),收到“0”時(shí)應(yīng)關(guān)閉,如下圖所示。
通過(guò)這種方式,我們可以使用 Raspberry Pi 和 MQTT 云從世界任何地方控制任何設(shè)備
將 RPi.GPIO 作為 GPIO
導(dǎo)入 sys
從 Adafruit_IO 導(dǎo)入 MQTTClient
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
ledPin = 12
GPIO.setup(ledPin, GPIO.OUT)
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY'
ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
FEED_ID = 'light'
def connected(client):
# 訂閱名為 Counter 的提要的更改。
print('訂閱 Feed {0}'.format(FEED_ID))
client.subscribe(FEED_ID)
print('正在等待 Feed 數(shù)據(jù)...')
def 斷開(kāi)連接(客戶端):
sys.exit(1)
def message(client, feed_id, payload):
print('Feed {0} received new value: {1}'.format(feed_id, payload))
if payload == 1:
GPIO.output(ledPin, GPIO.HIGH)
else :
GPIO.output(ledPin, GPIO.LOW)
# 創(chuàng)建一個(gè) MQTT 客戶端實(shí)例。
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
# 設(shè)置上面定義的回調(diào)函數(shù)。
client.on_connect = 已連接
client.on_disconnect = 已斷開(kāi)
client.on_message = 消息
# 連接到 Adafruit IO 服務(wù)器。
client.connect()
client.loop_blocking()
-
GPIO
+關(guān)注
關(guān)注
16文章
1172瀏覽量
51511 -
MQTT
+關(guān)注
關(guān)注
5文章
629瀏覽量
22285
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論