在本教程中,我們將使用 Adafruit IO 作為 MQTT 代理來控制連接到 Raspberry Pi GPIO 的 AC 設備。
所需組件
安裝了 Raspbian Stretch 的 Raspberry Pi。
繼電器模塊
電燈泡
跳線
在這里,我們將使用 SSH 訪問筆記本電腦上的 Raspberry Pi。您可以在筆記本電腦上使用 VNC 或遠程桌面連接,或者可以將您的 Raspberry pi 連接到顯示器。
電路原理圖
這個帶有 MQTT 云和樹莓派的物聯網控制家電的電路圖很簡單,只需在樹莓派的 GPIO 引腳 35 上連接一個帶有繼電器模塊的燈泡。
在樹莓派上安裝 MQTT 云庫
這里Adafruit IO 平臺與 Raspberry Pi 一起用作 MQTT 代理。正如我們在之前的教程中多次使用Adafruit IO平臺一樣,我們可以在 Raspberry Pi 中使用它。
制作儀表板后,在 Raspberry Pi 中安裝一些庫以開始使用 MQTT。
1.首先,通過發出以下命令更新您的 Pi 和 Python
sudo apt-get update
sudo apt-get upgrade
sudo pip3 install --upgrade setuptools
2. 現在,使用以下命令安裝 Rpi.gpio 和 Adafruit blink 庫
sudo pip3 install RPI.GPIO
sudo pip3 install adafruit-blinka
3. 使用以下命令安裝 Adafruit IO 庫
sudo pip3 安裝 adafruit-io
4. 使用以下命令從 github 克隆 adafruit 示例
git 克隆 https://github.com/adafruit/Adafruit_IO_Python.git
5. 然后,通過在終端中輸入以下命令導航到示例文件夾:
cd Adafruit_IO_Python/examples/basics
如果你不確定你在哪個目錄,你可以通過運行 pwd來檢查。
6. 對于此文件夾中的所有示例,您需要設置 ADAFRUIT_IO_KEY 和 ADAFRUIT_IO_USERNAME,這可以從 Adafruit 儀表板中找到。如下所示
切換 Adafruit IO 儀表板上的按鈕,您應該在 Pi 的終端中看到以下內容。
7. 現在,使用nano編輯器打開subscribe.py文件。輸入以下命令打開它
須藤納米訂閱.py
我們必須修改這個程序來控制儀表板上的任何 GPIO。
MQTT控制樹莓派GPIO的編碼說明
首先,導入所有必需的庫以使用 GPIO 引腳和 Adafruit MQTT 客戶端。
將 RPi.GPIO 導入為 GPIO 從 Adafruit_IO 導入sys導入 MQTTClient
現在,設置 GPIO 模式并定義 LED 引腳號并設置為輸出。
GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) ledPin = 12 GPIO.setup(ledPin, GPIO.OUT)
接下來,我們必須設置在創建儀表板時找到的 AIO 密鑰和用戶名。
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
輸入您為打開和關閉燈而提供的提要名稱。在這里,它是“光”。
FEED_ID = '光'
現在,定義一個在有事件發生時將被調用的函數。因此,我們將使用client.subscribe(FEED_ID)訂閱 Feed
def connected(client): client.subscribe(FEED_ID) print('Waiting for feed data...')
訂閱提要后,我們必須檢查新值并將其存儲到有效負載變量中。為此消息函數被調用。因此,每當有效載荷變量中有“1”時,將 LED 引腳設為高電平,“0”將其設為低電平。
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)
現在,創建一個 MQTT 客戶端來連接 Adafruit IO 平臺并來回發送消息。
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = 已連接 client.on_disconnect = 已斷開
另外,請注意代碼中的正確縮進,否則會顯示錯誤。教程末尾給出了完整的 Python 代碼。
最后,使用 ctrl+x 保存程序并回車。現在,我們必須運行腳本才能訂閱消息。所以在終端輸入python subscribe.py并回車。
python訂閱.py
您將看到一條消息正在等待 Feed 數據。..,如下圖所示。
現在,確保繼電器模塊與 Raspberry Pi 的 GPIO 引腳連接,然后轉到 Adafruit IO 儀表板并更改光饋。收到“ 1”時燈泡應打開,收到“0”時應關閉,如下圖所示。
通過這種方式,我們可以使用 Raspberry Pi 和 MQTT 云從世界任何地方控制任何設備
將 RPi.GPIO 作為 GPIO
導入 sys
從 Adafruit_IO 導入 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 數據...')
def 斷開連接(客戶端):
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)
# 創建一個 MQTT 客戶端實例。
client = MQTTClient(ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY)
# 設置上面定義的回調函數。
client.on_connect = 已連接
client.on_disconnect = 已斷開
client.on_message = 消息
# 連接到 Adafruit IO 服務器。
client.connect()
client.loop_blocking()
-
GPIO
+關注
關注
16文章
1213瀏覽量
52193 -
MQTT
+關注
關注
5文章
652瀏覽量
22573
發布評論請先 登錄
相關推薦
評論