如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机

如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机,第1张

借助现代技术,创建一个完整的家庭自动化系统非常简单,它允许您使用智能手机控制任何类型的负载。本文帮助您设计一个物联网系统,让您可以使用手机远程驱动伺服电机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)。如果需要,可以通过低阻值电阻连接舵机的数据端。

如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机,pYYBAGLeOHuAEsuwAAT9SA0EhVU015.png,第2张

图 3:简单的电气原理图

密切注意 Raspberry Pi 的引脚排列,检查连接以避免危险错误很有用:如图 4所示。通过打开终端窗口并运行命令,可以在 Raspberry Pi 上访问方便的参考:

引出线

工具由 GPIO Zero Python 库提供,该库默认安装在 Raspbian 桌面映像上,但不安装在 Raspbian Lite 上。

如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机,pYYBAGLeOI2AfxSnAAK6w_e8LBo178.jpg,第3张

图 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 对象,连接到代理(本地或公共),订阅主题“伺服”,并配置输出端口。在无限循环中,条件会检查发布者是否存在针对特定“主题”的消息。如果是这样,将对连接到树莓派的负载采取相应的措施。

如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机,pYYBAGLeOKmAOfLvAAFOQYHh0Kg806.png,第4张

图 6:程序流程图

请记住,我们的消息路由的主题名称是“Servo”。用 Python 语言编写的完整且实用的源代码附在文末。它的名字是“servo.py”。要开始执行程序,请检查 Mosquitto 是否正在运行,然后调用命令:

蟒蛇伺服.py

图 7显示了工作时的程序。由代理处理并由订阅者接收的主题“伺服”的消息显示在终端窗口上。

如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机,pYYBAGLeOLeAQhWbAADQxwleapw493.jpg,第5张

图 7:订阅者正在运行。

结论

MQTT 协议背后的哲学很容易理解。本文的目的是鼓励设计人员创建一个使用 MQTT 协议的系统(图 8)。事实上,很多时候,那些与电子打交道的人,尤其是初学者,不知道从哪里开始。使用 MQTT 协议实现一个完整且功能齐全的系统,非常适合物联网应用,对于电子设计人员来说非常重要,通过自己的智能手机远程控制家中的设备将是一个令人满意的项目。如果您使用公共代理来控制世界上任何距离的设备,最终结果将是惊人的,而且最重要的是非常有用。

如何使用带有MQTT 协议和 Raspberry Pi的智能手机控制伺服电机,poYBAGLeOMaAHDoZAAFp2r0i1-Y458.jpg,第6张

图 8:MQTT 协议测试  

      审核编辑:彭静

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2711901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存