电路图
首页 > 微机单片机 >单片机制作 > 使用Adafruit IO作为MQTT控制Raspberry Pi GPIO的AC设备
使用Adafruit IO作为MQTT控制Raspberry Pi GPIO的AC设备

GPIO MQTT 2024/05/17

在本教程中,我们将使用 Adafruit IO 作为 MQTT 代理来控制连接到 Raspberry Pi GPIO 的 AC 设备。

所需组件

安装了 Raspbian Stretch 的 Raspberry Pi。

继电器模块

电灯泡

跳线

在这里,我们将使用 SSH 访问笔记本电脑上的 Raspberry Pi。您可以在笔记本电脑上使用 VNC 或远程桌面连接,或者可以将您的 Raspberry pi 连接到显示器。

电路原理图

这个带有 MQTT 云和树莓派的物联网控制家电的电路图很简单,只需在树莓派的 GPIO 引脚 35 上连接一个带有继电器模块的灯泡。

poYBAGMQbOiARbUtAAEGtMapGzc982.png

pYYBAGMQbOSACJgVAAOv-ZWko8o183.png

在树莓派上安装 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 仪表板中找到。如下所示

poYBAGMQbOCAQUxJAAEBbrfIwWY757.png

切换 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 connec

订阅提要后,我们必须检查新值并将其存储到有效负载变量中。为此消息函数被调用。因此,每当有效载荷变量中有“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”时应关闭,如下图所示。

pYYBAGMQbNmAHuEqAAGeFeUC9uw276.png

通过这种方式,我们可以使用 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()

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

可能感兴趣的电路图
可能感兴趣的器件
推荐帖子