在此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”。在此文本框中,复制并粘贴以下链接:

http://arduino.esp8266.com/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

  • 弹跳2
  • PubSubClient

一旦安装了这些库,就可以运行此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函数中完成(请参见代码)。

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

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

附件

  • MQTT_Subscribe.zip

    下载

如何在Raspberry Pi和ESP8266中使用MQTT相关推荐

  1. 如何在Raspberry Pi上设置两因素身份验证

    Kiklas/ShutterstockKiklas /快门 The Raspberry Pi is everywhere now, which is why it's caught the eye o ...

  2. 如何在Raspberry Pi上安装Fedora 25

    2016年10月,宣布了Fedora 25 Beta的发布,以及对Raspberry Pi 2和3的最初支持 . 一个月后发布了Fedora 25的最终"通用"版本,从那时起,我一 ...

  3. raspberry pi_如何在Raspberry Pi上使用LÖVE游戏引擎对游戏进行编程

    raspberry pi Raspberry Pi以向孩子介绍开源软件和编程而闻名. Pi是负担得起的,实用的专业级计算入门,伪装成可破解的乐趣. Mitch Resnick's Scratch (最 ...

  4. 如何在 Raspberry Pi 上快速安装 Oracle Linux ?

    你知道树莓派(Raspberry Pi)吗?它可不是一款餐后甜点,而是一个只有信用卡大小的计算机,更准确的说它是一款单板计算机.那么,如何简单快速地在上面安装 Oracle Linux?下面将会详细介 ...

  5. 如何在 Raspberry Pi 上使用 Brother 打印机

    虽然 Brother 有自己的 CUPS 驱动程序,但它们是为 x86(32 位)架构预编译的.Raspberry Pi 基于 ARM arch,因此制造商的驱动程序与您的 Pi 不兼容. 树莓派和 ...

  6. raspberry pi_如何在Raspberry Pi上使用NetBSD

    raspberry pi 您是否有旧的Raspberry Pi散布着灰尘,也许是在最近的Pi升级之后? 您对BSD Unix感到好奇吗? 如果您对这两个问题都回答"是",您将很高兴 ...

  7. raspberry pi_如何在Raspberry Pi上创建盒装Internet

    raspberry pi 如果您是家庭学校的父母或预算有限的老师,那么框选式Internet可能正是您想要的. 它的硬件要求非常适中(Raspberry Pi 3.64GB microSD卡和电源), ...

  8. 树莓派要mysql的密码_树莓派raspberry Pi 3B+系统中安装mysql过程中不提示输入密码,安装完后如何设置密码...

    树莓派raspberry Pi 3B+安装mysql未提示输入密码,安装后修改mysql密码默认密码 使用mysql -uroot -p 命令连接mysql时,报错 pi@raspberrypi:/ ...

  9. ubuntu获取程序的帮助_如何在Raspberry Pi树莓派上安装Ubuntu

最新文章

  1. MySQL:实用 SQL 语句集合
  2. hdu2158 最短区间版大家来找碴
  3. 《JS权威指南学习总结--第八章 函数》
  4. 符合.net准则的事件
  5. SAP Fiori smart template技术里CDS view的注解和UI元素对应关系
  6. Git迁移 从SVN到Git
  7. 学习Spring Boot:(二十一)使用 EhCache 实现数据缓存
  8. leetcode 1025 python
  9. 无法复制_desktop:访问被拒绝的解决方法
  10. 查看zk状态时报错“Error contacting service. It is probably not running
  11. vac虚拟声卡我linux,虚拟声卡驱动应用及其原理简要说明
  12. 从黑格尔的正反合理论看人生的三个阶段
  13. 2020中职技能高考计算机,我市62名中职学生获得2020年技能高考操作考试满分
  14. 情人节的自娱自乐——情书事件
  15. 如何解包编译重新打包boot.img System.img(转自百度文库)
  16. 通达信 数据格式 java_通达信日线 数据格式
  17. 物联网技术在智慧电网中的应用-Susie 周
  18. map、set(底层结构)——C++
  19. 资源共享(好东西,要分享)
  20. 有关项目管理的飞鸽传书2007官网

热门文章

  1. win10查看电池损耗
  2. 为什么淘宝京东使用不是每次都需要登录?
  3. 第一节:(2)逻辑芯片工艺特性指标
  4. 关于网易云验证码的服务介绍
  5. win10 桌面(Windows 资源管理器)卡死的根本解决办法
  6. 0xc000007b 解决办法-取出系统盘(机械硬盘或者固态硬盘),删除bootsafe64.sys和衍生文件kavbootc.sys
  7. java中的枚举是什么?枚举怎么使用?
  8. android中的长度单位介绍(dp,sp,px,in,pt,mm)
  9. 机器学习项目一:共享单车
  10. 币值最大化问题 C++C++