0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Adafruit IO作為MQTT控制Raspberry Pi GPIO的AC設(shè)備

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:Rishabh Jain ? 2022-09-01 16:30 ? 次閱讀

在本教程中,我們將使用 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è)帶有繼電器模塊的燈泡。

poYBAGMQbOiARbUtAAEGtMapGzc982.png

pYYBAGMQbOSACJgVAAOv-ZWko8o183.png

在樹(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 儀表板中找到。如下所示

poYBAGMQbOCAQUxJAAEBbrfIwWY757.png

切換 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)閉,如下圖所示。

pYYBAGMQbNmAHuEqAAGeFeUC9uw276.png

通過(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()

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1172

    瀏覽量

    51511
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    629

    瀏覽量

    22285
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Amazon?Echo?和?Raspberry?Pi?的自動(dòng)窗簾控制

    GPIO 的水晶頭網(wǎng)線一塊 Raspberry Pi 開(kāi)發(fā)板與Raspberry Pi GPIO
    發(fā)表于 08-23 16:04

    黑科技!使用Raspberry Pi和Python GUI控制伺服電機(jī)(原理圖、源碼、項(xiàng)目教程)

    教程中,我們將介紹如何使用Raspberry Pi和Python TK GUI精確控制伺服。硬件組件:Raspberry Pi 3型號(hào)B.×
    發(fā)表于 10-16 16:49

    使用raspberry pi Pico的原因

    使用raspberry pi Pico的原因在硬件產(chǎn)品(單片機(jī))的開(kāi)發(fā)中我們往往需要借助一些額外的儀器/設(shè)備進(jìn)行產(chǎn)品的輔助測(cè)試, 假設(shè)我們需要一個(gè)IO+ADC類(lèi)型輔助
    發(fā)表于 02-07 09:16

    Raspberry Pi上的IO引腳編號(hào)有幾種方法

    一. 導(dǎo)入RPI.GPIOimport RPi.GPIO as GPIO二. 指定引腳編號(hào)方式RPi.GPIO中的Raspberry Pi
    發(fā)表于 02-17 06:33

    帶超頻冷卻孔徑的Raspberry Pi GPIO

    描述Raspberry Pi GPIO 帽,帶超頻冷卻孔徑這是一個(gè) Raspberry Pi 帽子,它允許
    發(fā)表于 09-12 06:14

    如何使用ESP-01板通過(guò)MQTT和OpenHab使用Raspberry Pi控制LED?

    在這里寫(xiě)了一篇非?;镜奈恼?,但如果它對(duì)某人有用,我很樂(lè)意嘗試寫(xiě)更多關(guān)于使用 ESP-01 板通過(guò) MQTT 和 OpenHab 使用 Raspberry Pi 控制 LED 的正式
    發(fā)表于 05-24 07:34

    如何使用Thingsboard通過(guò)MQTT進(jìn)行Raspberry Pi GPIO控制

    為簡(jiǎn)化此說(shuō)明,我們?cè)诿總€(gè)Thingboard安裝中可用的演示數(shù)據(jù)中都包含了“ Raspberry PI GPIO演示儀表板”。當(dāng)然,您可以修改此儀表板:調(diào)整,添加,刪除小部件等。您可以通過(guò)以租戶管理員身份登錄來(lái)訪問(wèn)此儀表板。
    的頭像 發(fā)表于 10-12 14:32 ?1.6w次閱讀
    如何使用Thingsboard通過(guò)<b class='flag-5'>MQTT</b>進(jìn)行<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>GPIO</b><b class='flag-5'>控制</b>

    Raspberry Pi GPIO帽開(kāi)源分享

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi GPIO帽開(kāi)源分享.zip》資料免費(fèi)下載
    發(fā)表于 08-18 11:01 ?2次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>GPIO</b>帽開(kāi)源分享

    用于40針Raspberry Pi型號(hào)的GPIO分線板

    電子發(fā)燒友網(wǎng)站提供《用于40針Raspberry Pi型號(hào)的GPIO分線板.zip》資料免費(fèi)下載
    發(fā)表于 08-19 09:35 ?2次下載
    用于40針<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>型號(hào)的<b class='flag-5'>GPIO</b>分線板

    Raspberry Pi上安裝和測(cè)試MQTT進(jìn)行IoT通信

    在本教程中,我們將更多地了解 MQTT 及其相關(guān)術(shù)語(yǔ)。在這里,我們將使用Raspberry Pi 作為本地 MQTT 代理,并通過(guò)
    的頭像 發(fā)表于 09-06 15:14 ?2884次閱讀
    在<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>上安裝和測(cè)試<b class='flag-5'>MQTT</b>進(jìn)行IoT通信

    從Alexa控制Raspberry Pi(Linux設(shè)備

    電子發(fā)燒友網(wǎng)站提供《從Alexa控制Raspberry Pi(Linux設(shè)備).zip》資料免費(fèi)下載
    發(fā)表于 12-09 16:18 ?0次下載
    從Alexa<b class='flag-5'>控制</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>(Linux<b class='flag-5'>設(shè)備</b>)

    如何使用GPIO引腳將按鈕連接到Raspberry Pi

    電子發(fā)燒友網(wǎng)站提供《如何使用GPIO引腳將按鈕連接到Raspberry Pi.zip》資料免費(fèi)下載
    發(fā)表于 12-23 17:04 ?0次下載
    如何使用<b class='flag-5'>GPIO</b>引腳將按鈕連接到<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>

    Raspberry Pi Pico作為HID鼠標(biāo)

    電子發(fā)燒友網(wǎng)站提供《Raspberry Pi Pico作為HID鼠標(biāo).zip》資料免費(fèi)下載
    發(fā)表于 02-01 10:17 ?1次下載
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Pico<b class='flag-5'>作為</b>HID鼠標(biāo)

    Raspberry Pi GPIO引腳介紹

    近年來(lái),Raspberry Pi因其可以用作可用于媒體和復(fù)古視頻游戲的廉價(jià)、兼容的Linux機(jī)器以及網(wǎng)絡(luò)設(shè)備而備受喜愛(ài)。
    的頭像 發(fā)表于 02-24 18:08 ?3072次閱讀
    <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>GPIO</b>引腳介紹

    IO設(shè)備接入MQTT

    隨著物聯(lián)網(wǎng)的迅速發(fā)展,越來(lái)越多的IO設(shè)備需要與云平臺(tái)進(jìn)行通信,以實(shí)現(xiàn)遠(yuǎn)程監(jiān)控和控制。本文將基于EsDA開(kāi)發(fā)套件快速實(shí)現(xiàn)將IO設(shè)備接入
    的頭像 發(fā)表于 09-28 08:26 ?649次閱讀
    <b class='flag-5'>IO</b><b class='flag-5'>設(shè)備</b>接入<b class='flag-5'>MQTT</b>