在本教程中,我们将使用 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 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”时应关闭,如下图所示。
通过这种方式,我们可以使用 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()
这里还没有内容,您有什么问题吗?