如何在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_pub和mosquitto_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相关推荐
- 如何在Raspberry Pi上设置两因素身份验证
Kiklas/ShutterstockKiklas /快门 The Raspberry Pi is everywhere now, which is why it's caught the eye o ...
- 如何在Raspberry Pi上安装Fedora 25
2016年10月,宣布了Fedora 25 Beta的发布,以及对Raspberry Pi 2和3的最初支持 . 一个月后发布了Fedora 25的最终"通用"版本,从那时起,我一 ...
- raspberry pi_如何在Raspberry Pi上使用LÖVE游戏引擎对游戏进行编程
raspberry pi Raspberry Pi以向孩子介绍开源软件和编程而闻名. Pi是负担得起的,实用的专业级计算入门,伪装成可破解的乐趣. Mitch Resnick's Scratch (最 ...
- 如何在 Raspberry Pi 上快速安装 Oracle Linux ?
你知道树莓派(Raspberry Pi)吗?它可不是一款餐后甜点,而是一个只有信用卡大小的计算机,更准确的说它是一款单板计算机.那么,如何简单快速地在上面安装 Oracle Linux?下面将会详细介 ...
- 如何在 Raspberry Pi 上使用 Brother 打印机
虽然 Brother 有自己的 CUPS 驱动程序,但它们是为 x86(32 位)架构预编译的.Raspberry Pi 基于 ARM arch,因此制造商的驱动程序与您的 Pi 不兼容. 树莓派和 ...
- raspberry pi_如何在Raspberry Pi上使用NetBSD
raspberry pi 您是否有旧的Raspberry Pi散布着灰尘,也许是在最近的Pi升级之后? 您对BSD Unix感到好奇吗? 如果您对这两个问题都回答"是",您将很高兴 ...
- raspberry pi_如何在Raspberry Pi上创建盒装Internet
raspberry pi 如果您是家庭学校的父母或预算有限的老师,那么框选式Internet可能正是您想要的. 它的硬件要求非常适中(Raspberry Pi 3.64GB microSD卡和电源), ...
- 树莓派要mysql的密码_树莓派raspberry Pi 3B+系统中安装mysql过程中不提示输入密码,安装完后如何设置密码...
树莓派raspberry Pi 3B+安装mysql未提示输入密码,安装后修改mysql密码默认密码 使用mysql -uroot -p 命令连接mysql时,报错 pi@raspberrypi:/ ...
- ubuntu获取程序的帮助_如何在Raspberry Pi树莓派上安装Ubuntu
最新文章
- MySQL:实用 SQL 语句集合
- hdu2158 最短区间版大家来找碴
- 《JS权威指南学习总结--第八章 函数》
- 符合.net准则的事件
- SAP Fiori smart template技术里CDS view的注解和UI元素对应关系
- Git迁移 从SVN到Git
- 学习Spring Boot:(二十一)使用 EhCache 实现数据缓存
- leetcode 1025 python
- 无法复制_desktop:访问被拒绝的解决方法
- 查看zk状态时报错“Error contacting service. It is probably not running
- vac虚拟声卡我linux,虚拟声卡驱动应用及其原理简要说明
- 从黑格尔的正反合理论看人生的三个阶段
- 2020中职技能高考计算机,我市62名中职学生获得2020年技能高考操作考试满分
- 情人节的自娱自乐——情书事件
- 如何解包编译重新打包boot.img System.img(转自百度文库)
- 通达信 数据格式 java_通达信日线 数据格式
- 物联网技术在智慧电网中的应用-Susie 周
- map、set(底层结构)——C++
- 资源共享(好东西,要分享)
- 有关项目管理的飞鸽传书2007官网
热门文章
- win10查看电池损耗
- 为什么淘宝京东使用不是每次都需要登录?
- 第一节:(2)逻辑芯片工艺特性指标
- 关于网易云验证码的服务介绍
- win10 桌面(Windows 资源管理器)卡死的根本解决办法
- 0xc000007b 解决办法-取出系统盘(机械硬盘或者固态硬盘),删除bootsafe64.sys和衍生文件kavbootc.sys
- java中的枚举是什么?枚举怎么使用?
- android中的长度单位介绍(dp,sp,px,in,pt,mm)
- 机器学习项目一:共享单车
- 币值最大化问题 C++C++