0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:工程师吴畏 2019-07-30 09:31 次阅读

电路图

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

图1. 教程电路

什么是MQTT?

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

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

图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所示。

图3. Raspberry Pi Mosquitto测试

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

hostname -I

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

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

图4. Raspberry Pi IP地址

构建电路

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

图5. 面包板电路

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

表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

图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中的消息的输出。

图7. NodeMCU的串行输出

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

mosquitto_sub -v -t makerpro/mqtt_tutorial/light

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

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

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

    关注

    116

    文章

    1687

    浏览量

    105448
  • ESP8266
    +关注

    关注

    50

    文章

    962

    浏览量

    44748
  • NODEMCU
    +关注

    关注

    13

    文章

    289

    浏览量

    21262
  • MQTT
    +关注

    关注

    5

    文章

    646

    浏览量

    22391
收藏 人收藏

    评论

    相关推荐

    esp8266连接阿里云平台时mqtt连接超时

    esp8266nodemcu在使用arduino.ide连接阿里云平台的时候,wifi配置正常但连接不上mqtt,显示报错如下: Attempting MQTT connection...失败, rc=-4 5秒! 这是我所
    发表于 10-26 21:39

    ESP8266 通过 MQTT 协议实现 LED 的远程控制

    本文简要介绍了搭建 EMQX 服务器实现基于 MQTT 协议远程控制 NodeMCU ESP8266 板载 LED 的解决方案。
    的头像 发表于 09-25 09:11 1629次阅读
    <b class='flag-5'>ESP8266</b> 通过 <b class='flag-5'>MQTT</b> 协议实现 LED 的远程控制

    esp8266esp32区别是什么

    Xtensa® 32-bit LX6 CPU,主频可达240MHz,具有更强大的处理能力。 内存 : ESP8266 :通常有64KB512KB的RAM,以及1MB4MB的闪存。 ESP
    的头像 发表于 08-19 18:16 3659次阅读

    esp8266不烧录可以使用吗

    ESP8266是一款非常流行的Wi-Fi模块,广泛应用于物联网项目中。然而,如果不进行烧录,ESP8266将无法正常工作。 1. ESP8266简介 ESP8266是一款由Espres
    的头像 发表于 08-19 17:28 557次阅读

    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据及 OLED显示

    Arduino Nano 和 NodeMCU ESP8266 读取 DHT11 环境温湿度数据及 OLED显示
    的头像 发表于 08-13 18:04 882次阅读
    Arduino Nano 和 <b class='flag-5'>NodeMCU</b> <b class='flag-5'>ESP8266</b> 读取 DHT11 环境温湿度数据及 OLED显示

    esp8266的脉冲计数问题求解

    我正在编写 nodemcu esp8266 的代码,它涉及脉冲计数、存储和返回 nodemcu,使用 raspberry pi 作为服务器。为此,我使用了 3 个 nodemcu
    发表于 07-10 06:49

    esp8266运行REMOTE_OTA_TASK出错的原因?

    官方整合阿里云物联网套件的程序,然后在乐鑫官网下载了RTOS,放到了esp8266-rtos-sdk 目录下,修改了阿里云套件的三元组,产品KEY、设备名、设备密钥。使用MQTT_TASK任务运行
    发表于 07-10 06:32

    esp8266无法收到usb-ttl发过来的串口数据如何解决?

    usb-ttl和esp8266都通过usb连接到同一电脑的usb口。用sscom测试 两边的波特率115200 AT固件:安信可的出厂固件,mqtt固件都试过了.测试AT指令正常。 实验目的:验证
    发表于 07-09 06:43

    求助,请问如何在RTOS SDK 1.5的PlatformIO IDE ESP8266实现MQTT

    ESP8266设备连接到 mqtt 代理。但 PlatformIO IDE 内置的 RTOS SDK 1.5 版本不支持 mqtt。此 SDK 没有
    发表于 07-08 06:22

    STM32、ESP8266MQTT连接阿里云物联网的串口通信异常解析

    STM32、ESP8266MQTT协议连接阿里云物联网平台时常见的串口通信异常介绍 在构建物联网应用时,STM32、ESP8266MQTT协议的结合是实现设备与网络间稳定通信的关键
    的头像 发表于 04-19 17:19 1338次阅读

    浅析ESP32运行MQTT客户端进行主题的发布和订阅的方法

    ESP32 MQTT的库有很多,凌顺实验室(lingshunlab.com)这次主要使用AsyncMQTT_ESP32,以后有机会再更多的MQTT其他库的使用方法。
    的头像 发表于 03-18 10:05 3528次阅读
    浅析<b class='flag-5'>ESP</b>32<b class='flag-5'>运行</b><b class='flag-5'>MQTT</b>客户端进行主题的发布和订阅的方法

    如何通过mqtt实现光自动化?

    一个树莓,我想用它来与 20 esp 01bords 进行通信。我决定使用 MQTT 协议进行 raspberry Pi 和 esp 01
    发表于 01-31 08:30

    宏集方案 | 如何用工业树莓MQTT平台打通OT和IT?

    如何用工业树莓MQTT平台打通OT和IT?
    的头像 发表于 01-05 11:01 343次阅读
    宏集方案 | 如何用工业<b class='flag-5'>树莓</b><b class='flag-5'>派</b>和<b class='flag-5'>MQTT</b>平台打通OT和IT?

    MQTT和Modbus的物联网网关协议区别分析

    MQTT 是一个开放的轻量级机器对机器协议,专为物联网交互设计。MQTT 网络包含一个 MQTT 经纪人 (broker),负责协调 MQTT 代理
    发表于 11-27 10:58 856次阅读
    <b class='flag-5'>MQTT</b>和Modbus的物联网网关协议区别分析

    MQTT是什么 MQTT特点

    很简单,易于学习和使用。 •可靠性高:MQTT 使用了 TCP 协议进行传输,具有较高的可靠性。 •低延迟:MQTT 使用了发布/订阅模式,可以减少消息传递的延迟。 在机器人应用中,MQTT
    的头像 发表于 11-09 15:20 2333次阅读