借助现代技术,创建一个完整的家庭自动化系统非常简单,它允许您使用智能手机控制任何类型的负载。本文帮助您设计一个物联网系统,让您可以使用手机远程驱动伺服电机和 LED 二极管。该系统显然可以扩展到任何其他类型的应用程序。您会看到,使用 Raspberry Pi 和 MQTT 协议等嵌入式板卡构建 IoT 对象并不难。
本文的目标是设计一个适用于小型设备远程控制的系统。对于更高功率的电源,有必要构建更强大的专用和隔离部分。该系统由以下组件组成(见图1):
无线路由器
Raspberry Pi 3 B+ 带 Wi-Fi 连接
带 HDMI 端口的电视
用于模拟小负载的 LED 二极管
带有 MQTT 客户端应用程序的智能手机
图 1:系统的组成部分
基础知识
要理解这篇文章,以下基础知识是必要的,以避免重复可能不必要地延长内容的概念。目的是立即找到问题的解决方案:
电子知识的最低限度
Linux *** 作系统知识和主控制台命令知识
对 Python 语言的最少了解
MQTT协议知识
Mosquitto 的基本知识
MQTT 协议 MQTT
的主要特点是它是一个发布/订阅协议。在这种类型的发布/订阅通信中,传感器(或其他设备)将数据发布到称为代理的中央系统。所有想要获取此数据的设备都会订阅代理,当数据可用时,代理会向它们发送数据。我们的系统有以下几个部分,如图 2所示:
代理由 Raspberry Pi 代表。
订阅者由 Raspberry Pi 代表。
发布者由适用于 Android 智能手机的 MQTT 客户端应用程序表示。
代理和订阅者位于同一设备上。理论上,所有三个图形也可以位于同一仪器中。
图 2:MQTT 协议使用代理、订阅者和发布者。
这个协议实现起来非常简单;它不需要在路由器端打开门:Raspberry Pi 连接到外部(或本地)MQTT 服务器,启动连接并等待命令。智能手机将命令发送(发布)到外部 MQTT 代理服务器,后者又将消息传递给 Raspberry Pi。当然,我们也可以反方向发送 MQTT 消息。多亏了这个协议,我们不需要在 NAT 中打开端口,也不需要知道我们的公共 IP 地址。有几个 MQTT 代理服务器,其中许多使用端口 1883。其中一些是:
mqtt.eclipse.org
test.mosquitto.org
mqtt.switch.cz
电气原理
图 原理上,接线图非常简单。显然,这是一个通用配置。要将其应用于实际案例,必须实施电源电路、隔离器、光隔离器和其他安全解决方案。在图 3中,我们可以看到示意图。在其中,我们可以找到 LED 二极管及其电阻,连接到引脚 32 (GPIO12)。伺服连接到引脚 2 (5 V PWR)、引脚 34 (GND) 和引脚 22 (GPIO25)。如果需要,可以通过低阻值电阻连接舵机的数据端。
图 3:简单的电气原理图
密切注意 Raspberry Pi 的引脚排列,检查连接以避免危险错误很有用:如图 4所示。通过打开终端窗口并运行命令,可以在 Raspberry Pi 上访问方便的参考:
引出线
此工具由 GPIO Zero Python 库提供,该库默认安装在 Raspbian 桌面映像上,但不安装在 Raspbian Lite 上。
图 4:Raspberry Pi 的 GPIO 引脚排列及其实用程序“引脚排列”
客户端 MQTT
您可以使用适用于智能手机、平板电脑或其他设备的 Android 或其他 *** 作系统的任何类型的 MQTT 客户端。我们用于这个项目的客户端是 MyMQTT(图 5),因为它非常简单和快速。显然,要执行的第一个 *** 作是配置代理的 IP 地址,在我们的例子中,它对应于树莓派的地址(例如,192.168.1.54)。您必须定义端口号,通常为 1883,以及可选的用户名和密码。您还可以使用远程代理地址。在代理地址中,我们必须配置以下消息,这些消息会触发相应的订阅者 *** 作:
主题:伺服;消息:开
主题:伺服;消息:关闭
主题:伺服;消息:闪烁
主题:伺服;消息:中心
主题:伺服;消息:左
主题:伺服;消息:对
主题:伺服;留言:你好
以下是创建的消息及其对订阅者的影响的简要说明。用户可以创建自己的消息,但必须在接收程序中实现它们:
ON:此命令具有“打开”连接到树莓派端口的 LED 二极管的功能。在这种情况下,LED 代表要远程控制的负载。对于稳健的设备,需要构建电源和隔离电路。
OFF:该指令具有关闭同一个 LED 的功能。
BLINK:该指令具有使 LED 二极管闪烁一定次数的功能。
CENTER:该指令具有使伺服电机的轴回到中心位置的功能。
LEFT:该指令具有使伺服电机的轴向左移动的功能。
RIGHT:该指令具有使伺服电机的轴回到正确位置的功能。
HELLO:此命令具有在电视上再现包含“Hello”一词的音频 .WAV 文件的功能。
图 5:您可以为 Android 或其他 *** 作系统使用任何类型的 MQTT 客户端。
只需在手机上按下这些消息之一即可激活 Raspberry Pi 上的控件。
在 Raspberry Pi 上安装 Mosquitto
您需要将 Raspberry Pi 连接到互联网(通过电缆或 Wi-Fi)。对于 Mosquitto 和客户端的安装,必须从终端输入以下命令:
sudo apt install mosquitto
如果您还需要客户端,可以使用以下命令安装它:
sudo apt install mosquitto-clients
订阅者上的软件
现在,让我们看一下具有订阅者功能的分析接收到的消息的软件。首先,我们需要安装 Paho-MQTT。它是 Eclipse 基金会开发的开源 Python MQTT 客户端。Paho-MQTT 可以在任何支持 Python 的设备上运行。Paho Python Client 类提供了一些帮助函数,以便更轻松地将 MQTT 协议与 Python 语言一起使用。可以使用控制台命令安装它:
sudo pip install paho-mqtt
如前所述,项目要求是创建一个系统,通过使用智能手机,可用于控制 LED 二极管、伺服电机和音频文件的再现。编程语言的选择落在了 Python 上,因为它极其简单,并且可以实现一些有用的 API 来完全控制 MQTT 协议。系统程序非常简单。我们可以查看图6所示的流程图了解它是如何工作的。该程序用 Python 语言编写,导入外部模块,创建 MQTT 对象,连接到代理(本地或公共),订阅主题“伺服”,并配置输出端口。在无限循环中,条件会检查发布者是否存在针对特定“主题”的消息。如果是这样,将对连接到树莓派的负载采取相应的措施。
图 6:程序流程图
请记住,我们的消息路由的主题名称是“Servo”。用 Python 语言编写的完整且实用的源代码附在文末。它的名字是“servo.py”。要开始执行程序,请检查 Mosquitto 是否正在运行,然后调用命令:
蟒蛇伺服.py
图 7显示了工作时的程序。由代理处理并由订阅者接收的主题“伺服”的消息显示在终端窗口上。
图 7:订阅者正在运行。
结论
MQTT 协议背后的哲学很容易理解。本文的目的是鼓励设计人员创建一个使用 MQTT 协议的系统(图 8)。事实上,很多时候,那些与电子打交道的人,尤其是初学者,不知道从哪里开始。使用 MQTT 协议实现一个完整且功能齐全的系统,非常适合物联网应用,对于电子设计人员来说非常重要,通过自己的智能手机远程控制家中的设备将是一个令人满意的项目。如果您使用公共代理来控制世界上任何距离的设备,最终结果将是惊人的,而且最重要的是非常有用。
图 8:MQTT 协议测试
审核编辑:彭静欢迎分享,转载请注明来源:内存溢出
评论列表(0条)