24小时联系电话:18217114652、13661815404
中文
行业资讯
如何使用 IoT MQTT 将 ESP32 WiFi 微控制器连接到 Raspberry Pi
如何使用 IoT MQTT 将 ESP32 WiFi 微控制器连接到 Raspberry Pi
物联网 (IoT) 设备最重要的功能之一是其与网络“对话”的能力。一个设备与另一个设备成功通信所必须采取的步骤称为通信协议。
协议是一组管理特定事务的官方程序和规则。就物联网设备而言,通信协议规定了设备为了发送/接收信息而必须采取的程序。通信协议分为两类,网络连接协议和数据通信协议
让我们想象一下,我们正在布局一个新的城市。首先,我们从某处的一块空地开始。其次,我们必须放置具有不同大小和重量能力的实体道路,以使人们能够进入新城市。
如下图所示,我已经布置了道路。我们比喻中的道路是网络协议。网络协议是网络的物理层。在 OSI 模型中,它们通常被标记为物理层、数据链路层和网络层。
现在我们需要用汽车和人(应用程序数据协议)填充道路(网络协议)。正如您在下面的更新图中所见,不同的车辆可以适应不同的路线,反之亦然。
在我们的案例中,网络协议和数据协议携手合作,以促进通信通道(道路),允许数据通过互联网传输到其预期目的地。
作为快速复习,开放系统互连 (OSI) 模型概述了计算机系统通过网络进行通信时必须使用的 7 层(步骤)。下图显示了这 7 个步骤以及用于层的通信协议示例。
今天有许多协议可以促进 OSI 模型的网络和应用层。在本文中,我们将重点关注数据协议部分,尤其是消息队列遥测传输 (MQTT) 协议。
在大多数应用程序中,在设计或编程您的物联网设备时,您使用的通信模块将负责网络协议,您只需关注应用程序和数据协议。
为了演示 MQTT 在实际应用中的使用,我们将展示如何通过本地网络将 ESP32 开发模块连接到 Raspberry Pi,并通过 MQTT 进行通信以发送轻量级数据。
MQTT 是为物联网设备制定的协议。它允许设备和服务器之间的轻量级通信。该协议在MQTT 官方网站中有详细记录。
简单来说,它允许设备订阅和发布主题(端点),以便通过网络协议发送小数据。
MQTT 代理用作将所有消息路由到合法所有者(订阅者)并接受来自不同设备的发布消息的管理器。每个 MQTT 通信机制都必须从规划要用于服务器端和设备端的主题开始。
在我们的演示中,我们将使用 Raspberry Pi 作为我们的 MQTT 代理(服务器)和 ESP32 作为发布者,将光传感器数据发布到 MQTT 代理主题,如下图所示。
从上面看到的计划主题和客户的流程图开始通常是一个好主意。我们将使用光传感器来演示使用 MQTT 将数据推送到 Raspberry Pi 上的 MQTT 代理的想法。
在实际应用中,安全性是必须考虑的第三层。在我们的例子中,我们不会太担心安全性,因为它在没有外部连接的本地网络中运行。
但是,如果您将经纪人暴露在互联网上,您希望确保您的网络安全。
我们将演示分为以下几个部分:
ESP32
光传感器
MQTT 客户端
无线网络连接
树莓派
MQTT 代理
树莓派
Raspberry Pi 将充当 MQTT 代理服务器。它将我们所有的消息路由到相应的订阅者并接受来自发布者的消息。
第1步
首先,在您的 Raspberry Pi 上启用 SSH,以便您从主机 PC 访问终端。如果您使用的是 Windows,请务必安装 SSH 客户端,例如 PuTTy。
找到您的 Raspberry Pi 的 IP 地址并通过 SSH 连接到其中。
第2步
安装 mosquitto 和 mosquitto-clients 以启动 MQTT 代理服务器并使用 mosquitto-clients 测试服务器。使用以下命令安装 mosquitto:
sudo apt install mosquitto mosquitto-clients
第 3 步
此时 mosquitto MQTT 代理服务应该正在运行。要确认这一点,请运行以下命令:
sudo systemctl 状态蚊子
如果您看到绿色的“活动(运行)”状态,这意味着它正在后台运行,并且到目前为止您的设置很好。
第4步
要在每次 Raspberry Pi 重新启动时自动启动 mosquitto 服务,请运行以下命令:
sudo systemctl 启用 mosquitto.service
第 5 步
配置 mosquitto conf 文件,以便您可以通过启用端口 1883 通过本地网络连接到它。
从以下命令开始编辑 mosquitto.conf 文件:
须藤纳米/etc/mosquitto/mosquitto.conf
然后,移动到文件的最后并输入以下行:
听众 1883
allow_anonymous 真
接下来,按 CRTL-X 退出,然后重新启动您的 Raspberry Pi。
第 6 步
记下您的 Raspberry Pi IP 地址,以便您可以将其用作所有 MQTT 通信的主机名。
第 7 步
让我们继续并启动一个订阅者,它将显示已发送到主题“esp32/light”的所有消息,以便查看 ESP32 将发送到该主题的消息。为此,请运行以下命令:
mosquitto _sub -h <RPi IP 地址> -t “esp32/light”
请务必将 <RPi IP 地址> 替换为您的 Raspberry Pi 的 IP 地址。
ESP32
在开始使用 ESP32 板之前,请务必完成以下先决条件:
您将需要一个基于 ESP32 的开发板
使用这些详细说明安装和设置 ESP-IDF 的开发环境(使用VS Code Extension)
购买光传感器——最好是这种类型的光敏电阻。
你还需要一个面包板
第1步
在面包板上构建以下电路:
这里的R_Photo代表光敏电阻,串联一个10k欧的电阻组成分压器。我们需要确保光敏电阻输出连接到 ESP32 的 ADC 输入。在我们的设置中,我使用了以下引脚:
ESP32_模拟 |
GPIO34 |
第2步
Git 从此处克隆示例 ESP-IDF 代码。
第 3 步
从您的 VS Code 中打开文件夹并将目标设备更改为 esp32。然后,更改串行 COM 端口并开始配置设置。
第4步
在配置 (menuconfig) 下,转到示例连接配置和示例配置,输入以下内容:
WiFi SSID:您的 WiFi SSID 名称
WiFi密码:您的WiFi网络密码
Broker URL:输入树莓派IP,格式如下“mqtt://<ip地址>
第 5 步
保存配置,然后在 ESP32 板上构建、刷新和监控固件。
第 6 步
您应该开始看到数据流入您之前设置的 MQTT 代理 SSH 窗口。
您看到的是直接从 ESP32 通过本地网络发布到 Raspberry Pi 上的 MQTT 代理的 ADC 数据。
结论
该演示可以轻松移植到您计划使用的任何现有应用程序中。如果您想收集有关您家中特定流程或系统的数据,您可以使用这种方法轻松完成。
您需要做的就是处理和采集从传感器到 ESP32 的数据。有两种类型的传感器通信,模拟和数字。我们在本文中研究了一个模拟传感器。