怎样从中传输MQTT消息ESP8266/NodeMCU到运行MQTT代理的树莓派

电子说

1.3w人已加入

描述

电路图

ESP8266

图1. 教程电路

什么是MQTT?

消息队列遥测传输(MQTT)是一种消息传递协议,可在任何具有Internet连接的设备上运行,使其成为物联网中最常用的协议之一项目。它被设计用于具有低带宽限制的系统,因此非常适用于家庭自动化或任何物联网(IoT)应用。

MQTT的优势包括其低带宽,简单的实现,它适用于不可靠的连接。

ESP8266

图2. 基于MQTT的系统

MQTT需要使用“代理” - 一个接收和发送MQTT消息的应用程序。在本教程中,我们的代理是Mosquitto,它将安装在Raspberry Pi上。 MQTT系统的第二个组件是“客户端”,它连接到中央代理并可以发布或订阅MQTT消息。

MQTT消息由主题标识,该主题是消息的一部分。在本教程中,我们将发布和订阅“makerpro/mqtt_tutorial/light”主题。

在Raspberry Pi上安装Mosquitto Broker

我建议的第一步是更新Raspberry Pi上的软件。打开终端并输入以下命令:

sudo apt-get update

sudo apt-get upgrade

sudo reboot

一旦你的Pi重新启动,你可以再次在终端类型中安装我们的MQTT代理Mosquitto:

sudo apt install -y mosquitto mosquitto-clients

通过创建终端的两个新实例来测试Mosquitto。在一个终端输入以下内容:

mosquitto_sub -v -t makerpro/mqtt_tutorial/light

在另一个新终端输入:

mosquitto_pub -t makerpro/mqtt_tutorial/light -m ‘helloWorld’

在第二个终端上按Enter键后,您会看到消息“makerpro/mqtt_tutorial/light helloWorld“在第一个终端上,如图3所示。

ESP8266

图3. Raspberry Pi Mosquitto测试

在您的Raspberry Pi上成功测试了Mosquitto,您需要通过输入命令 hostname -I 找到其IP地址。

hostname -I

这将返回一个像192.168.0.47这样的数字,如图4所示。你的Pi可能会给你一个稍微不同的数字。

重要你把这个数字写在安全的地方。 NodeMCU需要它才能连接到我们的Mosquitto服务器。

ESP8266

图4. Raspberry Pi IP地址

构建电路

本教程的电路(如图5所示)包含LDR,10K电阻和我们的电路NodeMCU开发板。

ESP8266

图5. 面包板电路

LDR和电阻形成一个分压器,NodeMCU的模拟输入读取他们之间的电压。当LDR的电阻随照度变化时,LDR和电阻之间的电压电平发生变化,如表1所示。

ESP8266

表1 。照明/电压/ADC电平

安装Arduino IDE和PubSubClient您计算机上的库

您将使用Arduino IDE对NodeMCU开发板进行编程和闪存。在我们进入编程之前,需要安装各种步骤。

下载并安装IDE

运行Arduino并从“文件”菜单中显示“首选项”对话框

在“其他板管理器URL”文本框中粘贴以下内容文本:http://arduino.esp8266.com/stable/package_esp8266com_index.json

单击确定

从工具/板菜单中选择“Board Manager”

在搜索框中键入“esp8266”,然后安装“esp8266 by ESP8266 Community”,

从工具/主板中选择“通用ESP8266模块”

通过工具/打开库管理器管理图书馆。..

搜索“PubSubClient”,然后安装Nick O‘Leary的PubSubClient

ESP8266

图6。 PubSubClient

调整并将软件上传到NodeMCU

首先,下载副本来自Github的NodeMCU软件。

在将代码上传到你的主板之前,你需要做一些更改文件顶部的Wi-Fi和代理地址。

const char *WIFI_NETWORK_NAME = “********”;

const char *WIFI_PASSWORD = “*********”;

const char *MQTT_BROKER = “192.168.0.47”;

将WIFI_NETWORK_NAME和WIFI_PASSWORD更改为您的家庭网络登录详细信息。例如,如果您的Wi-Fi网络名为myWifi,则顶行如下所示:

const char *WIFI_NETWORK_NAME = “myWifi”;

将变量MQTT_BROKER更新为Raspberry Pi的IP地址(您创建了一个早期的说明)。

实施

将NodeMCU和Raspberry Pi连接到同一网络非常重要。请注意,如果重新启动Raspberry Pi,它可能会更改其IP地址,这也意味着更改NodeMSC的代码。

一旦启动,NodeMCU上的软件将定期读取其ADC,然后发送MQTT消息到存储在Raspberry Pi上的代理。然后,代理将消息重新分发给订阅该主题的任何客户端。

NodeMCU代码利用串行端口输出调试消息。如果连接Arduino IDE的串行监视器,您应该看到类似于图7中的消息的输出。

ESP8266

图7. NodeMCU的串行输出

您应该开始在您的经纪人处接收MQTT消息,您可以通过打开Pi上的终端窗口并输入以下内容来确认:

mosquitto_sub -v -t makerpro/mqtt_tutorial/light

这将允许您在控制台中接收常规消息,如图8所示。

ESP8266

图8. 订阅makerpro/mqtt_tutorial/light主题。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分