1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 如何在Raspberry Pi和ESP8266中使用MQTT

如何在Raspberry Pi和ESP8266中使用MQTT

时间:2020-06-29 14:03:39

相关推荐

如何在Raspberry Pi和ESP8266中使用MQTT

在此Instruction中,我将解释什么是MQTT协议以及如何使用它在设备之间进行通信。然后,作为一个实际演示,我将向您展示如何设置一个简单的两个客户端系统,ESP8266模块将在该系统中发送一条消息按下按钮后转到Python程序。具体来说,我为此项目使用了Adafruit HUZZAH模块,Raspberry Pi和台式计算机。Raspberry Pi将充当MQTT代理,Python客户端将在单独的台式计算机上运行(可选,因为它可以在Raspberry Pi上运行)。

要遵循此Instructable,您将需要具备一些电子学基础知识,以及如何使用Arduino软件。您还应该熟悉使用命令行界面(对于Raspberry Pi)。希望,一旦您了解了什么是MQTT,以及如何在基本场景中使用它,您将能够创建自己的IoT项目!

所需零件

1 x Raspberry Pi,已连接到本地网络(正在运行Jessie)1个ESP8266模组(Adafruit HUZZAH)1 x面包板3 x跳线(公对公)1 x按钮1 x 10k欧姆电阻(棕黑色橙色颜色代码)

我创建了这个Instructable,因为MQTT一直对我感兴趣,因为它是一种协议,可以使用许多不同的方式。但是,我似乎无法理解如何编码设备以使用它。这是因为我不知道/不了解我的“ Hello,World!”到底发生了什么。从设备A发送到设备B。因此,我决定编写此Instructable来(希望)教您它的工作原理,并加深我对它的理解!

添加提示问问题评论下载

步骤1:什么是MQTT?

MQTT或MQ遥测传输是一种消息传递协议,它允许多个设备互相通信。当前,它已成为物联网的流行协议,尽管它已用于其他用途,例如Facebook Messenger。有趣的是,MQTT于1999年发明-意味着它和我一样古老!

MQTT是根据各地的想法,设备可以发布订阅主题。因此,例如。如果设备1已从其传感器之一记录了温度,则它可以包含所记录的温度值的消息发布到主题(例如“温度”)。此消息发送到MQTT代理,您可以将其视为局域网上的交换机/路由器。MQTT Broker收到该消息后,会将其发送到订阅了相同主题的任何设备(在本例中为Device#2)。

在这个项目中,我们将使用ESP8266发布到一个主题,并通过一个充当MQTT Broker的Raspberry Pi创建一个将订阅同一主题的Python脚本。MQTT的伟大之处在于它轻巧,因此非常适合在ESP8266等小型微控制器上运行,但它也广泛可用-因此我们也可以在Python脚本上运行它。

希望在该项目结束时,您将了解什么是MQTT,以及将来如何将其用于您自己的项目。

添加提示问问题评论下载

步骤2:在Raspberry Pi上安装MQTT Broker

如上一步所述,要设置我们的MQTT系统,我们需要一个代理。对于Raspberry Pi,我们将使用“Mosquitto” MQTT代理。在我们安装它之前,最好总是更新我们的Raspberry Pi。

sudo apt-get更新sudo apt-get升级

完成此操作后,安装mosquitto,然后安装mosquitto-clients软件包。

须藤apt-get install mosquitto -y须藤apt-get install mosquitto-clients -y

完成安装这两个软件包后,我们将需要配置代理。mosquitto代理的配置文件位于/etc/mosquitto/mosquitto.conf,因此请使用您喜欢的文本编辑器将其打开。如果您没有喜欢的文本编辑器或不知道如何使用任何命令行编辑器,那么我将使用nano,以便您可以遵循以下步骤:

须藤纳米/etc/mosquitto/mosquitto.conf

在此文件的底部,您应该看到以下行:

include_dir /etc/mosquitto/conf.d

删除此行。将以下行添加到文件的底部。

allow_anonymous错误password_file / etc / mosquitto / pwfile听众1883

通过输入这些行,我们告诉mosquitto,我们不希望任何连接到我们经纪人的人不提供有效的用户名和密码(我们将在接下来的步骤中进行设置),而我们希望mosquitto在端口号1883上侦听消息。

如果您不希望代理要求用户名和密码,则不要包括我们添加的前两行(即allow_anonymous ...和password_file ...)。如果执行了此操作,则跳到重新启动Raspberry Pi。

现在关闭(并保存)该文件。如果要跟随nano示例,请按CTRL + X,并在出现提示时键入Y。

因为我们刚刚告诉mosquitto,尝试使用MQTT代理的用户需要进行身份验证,所以我们现在需要告诉mosquitto,用户名和密码是什么!因此,键入以下命令-用所需的用户名替换用户名-然后在出现提示时输入所需的密码(注意:如果在编辑配置文件时指定了另一个password_file路径,请用您使用过的一种)。

sudo mosquitto_passwd -c / etc / mosquitto / pwfile用户名

由于我们刚刚更改了mosquitto配置文件,因此应该重新启动Raspberry Pi。

须藤重启

一旦Raspberry Pi完成重新启动,您就应该拥有一个功能齐全的MQTT代理!接下来,我们将尝试使用多种不同的设备/方法与之交互!

添加提示问问题评论下载

步骤3:测试经纪人

在Raspberry Pi上安装mosquitto之后,可以对其进行快速测试-只是确保一切正常。为此,我们可以在命令行上使用两个命令。mosquitto_pubmosquitto_sub。在这一步中,我将指导您使用所有这些工具来测试我们的经纪人。

为了测试代理,您将需要打开两个命令行窗口。如果您使用的是Putty或其他SSH客户端,这就像打开另一个SSH窗口并照常登录一样简单。如果从UNIX终端访问Pi,则完全相同。如果直接使用Raspberry Pi,则需要以GUI模式打开两个终端窗口(命令startx可以用来启动GUI)。

现在您已经打开了两个窗口,我们可以开始测试了。在两个终端之一中,键入以下命令,用在上一步中设置的用户名密码替换。

mosquitto_sub -d -u用户名-P密码-t测试

如果您决定在上一步中不设置用户名和密码,那么从现在开始,请忽略命令中的-u和-P标志。因此,作为示例,mosquitto_sub命令现在将是:

mosquitto_sub -d -t测试

mosquitto_sub命令将订阅主题,并在终端窗口中显示发送到指定主题的所有消息。在这里,-d表示调试模式,因此所有消息和活动都将在屏幕上输出。-u-P应该是不言自明的。最后,-t是我们要订阅的主题的名称-在这种情况下为“测试”。

接下来,在另一个终端窗口中,我们将尝试将消息发布到“测试”主题。输入以下内容,再次记住要更改用户名密码

mosquitto_pub -d -u用户名-P密码-t test -m“您好,世界!”

当您按回车键时,您应该看到消息“ Hello,World!”。出现在我们用来(订阅)的第一个终端窗口中。在这种情况下,您都准备开始在ESP8266上工作!

添加提示问问题评论下载

步骤4:设置ESP8266(Adafruit HUZZAH)

此步骤是否特定于Adafruit HUZZAH(这就是我用来完成此项目的步骤)。如果您使用的是其他Arduino / ESP8266设备,则不妨跳过此步骤。但是,我建议您先略读一下,以防万一此处有与您相关的信息。

对于这个项目,我将使用Arduino软件对HUZZAH进行编程。所以,如果你还没有准备好,请确保安装Arduino的软件(更新1.6.4)。您可以在此处下载。

安装Arduino软件后,将其打开并导航至File-> Preferences。在这里,您应该(在窗口底部附近)看到一个带有标签的文本框:“ Additional Boards Manager URLs”。在此文本框中,复制并粘贴以下链接:

/stable/package_esp8266com_index.json

单击确定保存更改。现在打开Board Manager(Tools-> Board-> Board Manager)并搜索ESP8266。通过ESP8266 Community包安装esp8266。重新启动Arduino软件。

现在,在对板进行编程之前,我们需要选择一些不同的选项。在工具菜单选项中,为主板选择Adafruit HUZZAH ESP8266,为CPU频率选择80 MHz(如果您想对其超频,则可以使用160 MHz,但现在我要使用80 MHz),4M(3M SPIFFS)表示Flash大小,而115200表示上传速度。另外,请确保选择您正在使用的COM端口(这取决于您的设置)。

在上载任何代码之前,需要确保HUZZAH处于引导加载程序模式。要启用此功能,请按住板上标有GPIO0的按钮,并在按住该按钮的同时,也按住“复位”按钮。然后,释放复位按钮,然后释放GPIO0。如果正确完成此操作,则按下GPIO0时点亮的红色LED现在应该变暗。

要将代码上传到微控制器,请首先确保HUZZAH处于引导加载程序模式,然后只需单击Arduino IDE中的上载按钮。

如果您在设置HUZZAH时遇到任何问题,可以在Adafruit自己的教程中找到更多信息。

添加提示问问题评论下载

步骤5:编程ESP8266

现在我们将开始对ESP8266进行编程,但是在开始之前,您需要在Arduino库管理器中安装以下库(Sketch-> Include Libraries-> Manage Libraries)

弹跳2PubSubClient

一旦安装了这些库,就可以运行此Instructable(MQTT_Publish.zip)中包含的代码。我已经确保对其进行评论,以便您可以了解每个部分的工作,这有望使您能够适应自己的需求。

请记住要更改代码顶部的常量,以便ESP8266可以连接到WiFi网络和MQTT Broker(Raspberry Pi)。

如果您决定不为MQTT Broker设置用户名和密码,请改为下载MQTT_PublishNoPassword.zip文件。

附件

MQTT_Publish.zip下载MQTT_PublishNoPassword.zip下载 添加提示问问题评论下载

步骤6:安装Python客户端(paho-mqtt)

幸运的是,这一步非常简单!要安装mosquitto python客户端,您只需要在命令行(Linux / Mac)甚至命令提示符(Windows)中键入以下内容。

pip安装paho-mqtt

注意:如果您未指定要安装pip并在安装Python时将python添加到PATH变量中,则Windows命令提示符可能在运行pip命令时出现问题。有多种方法可以解决此问题,但是我认为仅重新安装Python是最简单的方法。如果有疑问-给它一个谷歌!

添加提示问问题评论下载

步骤7:Python客户端-订阅

在此步骤中,我们将设置Python脚本(在Raspberry Pi本身或在连接到网络的另一台计算机上)处理ESP8266发送(发布)到MQTT主题的所有消息。

我已经在下面包含了python代码(PythonMQTT_Subscribe.py),已对其进行注释以帮助您了解发生了什么,但是我还将在此处解释一些主要功能。

如果您之前没有为MQTT连接设置用户名和密码,请改为下载PythonMQTT_SubscribeNoPassword.py文件。

附件

PythonMQTT_Subscribe.py下载PythonMQTT_SubscribeNoPassword.py下载 添加提示问问题评论下载

步骤8:在ESP8266设备之间通信

例如,如果要建立IoT网络,您可能希望在ESP8266设备之间进行通信。值得庆幸的是,它并没有比我们之前编写的代码复杂得多,但是,有一些值得注意的更改。

为了使一个ESP将数据发送到另一个ESP,第一个ESP将需要发布到该主题,而第二个ESP将需要订阅该主题。此设置将允许单向对话-ESP(1)到ESP(2)。如果我们希望ESP(2)与ESP(1)进行对话,则可以创建一个新主题,ESP(2)将向该主题发布,而ESP(1)将进行订阅。值得庆幸的是,我们可以在同一主题上有多个订阅者,因此,如果您要将数据发送到多个系统,则只需要一个主题(除了正在发送数据的设备外,它们都订阅了一个主题)正在发布)。

如果您需要帮助弄清楚每个设备需要做什么,则可以将系统视为一个人间。如果正在发布ESP(1),则可以将该设备想象为“扬声器”,并且在此示例中,订阅该主题的所有设备均为“监听器”。

我在下面提供了一些示例代码,展示了ESP8266如何订阅主题,并侦听某些消息-1和0。如果收到1,则板上LED(对于HUZZAH-GPIO 0)打开。如果收到0,则此LED熄灭。

如果要处理更复杂的数据,则应在ReceivedMessage函数中完成(请参见代码)。

对于您自己的项目,如果需要发送和接收数据,则可以将上一示例中的发布功能合并到此步骤中包含的代码中。这应该在主要的Arduinoloop()函数中处理。

切记更改代码顶部的变量以适合您的网络!

附件

MQTT_Subscribe.zip下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。