NodeMCU 和 Raspberry Pi 3 B+
之间的 MQTT 通信
使用 MQTT、NodeMCU、DHT22、RaspberryPi 和 IoT MQTT Panel 监控温度和湿度。
图>使用 Raspberry Pi 3 B+ 作为多个 NodeMCU 的代理,其中 DHT-22 传感器测量温度和湿度并在 IoT MQTT Panel App 上进行监控。我使 NodeMCU 和 Raspberry 的算法可升级。只需更改已发布和订阅的主题,并添加到 IoT MQTT Panel App 即可随时掌握所有数据。
我在互联网上搜索了很多信息,因为我对 raspberry、python 和 MQTT 一无所知。所以,我总结了我所学到的一切,并赞扬了这些网站。
如果您的互联网连接丢失,您的传感器将继续向您的经纪人发送数据。这意味着您可以保存数据!!! (当然你需要做一些编程)
请关注我以获取任何更新。很快我将发布所有运行的视频! 🙂
1。连接事物:
您的网络将是什么样子:
图>2.编程的东西:
首先,您必须确保在 Arduino IDE 和 Raspberry Pi 3B+ 上安装了所有库。
2.1 Arduino
在您的 Arduino IDE 上安装库。
- MQTT – https://github.com/knolleary/pubsubclient/releases/tag/v2.7
- DHT 传感器库:https://github.com/adafruit/DHT-sensor-library
- Adafruit 统一传感器库:https://github.com/adafruit/Adafruit_Sensor
- Esp8266 – https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WiFi
2.2 树莓派 3 b+
在您的 Python IDE 上安装库。
- time – Python 上的原生库
- Paho MQTT – 在 LX 终端上输入“pip install paho-mqtt”来安装 MQTT 库。如果有任何疑问,这个网站很棒!! http://www.steves-internet-guide.com/mqtt/
2.3 上传代码
分别上传代码到你的NodeMCU和Raspberry。
2.4 解释代码——ARDUINO IDE
这些是之前提到的要安装在您的 Arduino IDE 上的库。
#include // Esp8266/NodeMCU 库#include // MQTT 库#include "DHT.h" // DHT 传感器
声明为在整个代码中使用的变量:
const char* mqtt_server ="Broker_IP_Address"; // MQTT 服务器 IP 地址
mqtt_server :要获取 Raspberry pi 上的 IP 地址,请打开终端屏幕并输入:
[email protected]:~ $ ifconfigwlan0:flags=4163 mtu 1500 inet 192.168.1.200 netmask 255.255.255.0 broadcast 165.192
在此示例中,IP 地址将为 192.168.1.200
const char* clientID ="room1"; // 客户端 id 标识 NodeMCU 设备。
clientID :用于标识您正在使用的 NodeMCU 的任何名称或编号。在这种情况下,它将位于 room1。所以它被命名为room1。
const char* topicT ="/room1/temperature"; // 主题温度const char* topicH ="/room1/湿度"; // 话题湿度
topicT :发布温度的话题。在此示例中,对于 room1 温度,主题将是“/room1/temperature”。
topicH :发布湿度的主题。在这个房间 1 湿度示例中,主题将是“/room1/湿度”。
const char* willTopic ="/room1/status"; // 主题 Statusconst char* willMessage ="0"; // 0 - 断开连接
willTopic :发表遗嘱的主题。这将用于检查 NodeMCU 是否已连接/打开。如果它断开连接,它将发布 willMessage willTopic。 在这种情况下“/room1/status”
willMessage :将在 willTopic 上发布的消息 如果 NodeMCU 断开/关闭。
int willQoS =0;boolean willRetain =true;
willQoS :用于设置服务质量。在这种情况下为 0。
将保留 :用于在断开连接时保留遗嘱信息。设置为 True。
int counter =0; // 用于重新连接MQTT serverconst char* swversion ="1.0"; // 软件版本
计数器 :用于重新连接例程的计数器。
swversion :用于控制我的软件版本。
WiFiClient wifiClient;PubSubClient 客户端(mqtt_server, 1883, wifiClient); // 1883 是 Broker 的监听端口
wifiClient :创建一个客户端,该客户端可以连接到 client.connect() 中定义的指定互联网 IP 地址和端口。
client() :Client 是所有基于 WiFi 客户端的调用的基类。它不是直接调用的,而是在您使用依赖于它的函数时调用。
DHT dhtA(2, DHT22); // 名为 dhtA 的 DHT 实例,NodeMCU D4 上的 Pin 和传感器类型
DHT :创建一个名为 dhtA 的实例并分配传感器 DHT-22 的 NodeMCU V3 (D4) 的引脚 2。按照下面的示意图。如果您想使用另一个引脚,请将值更改为正确的引脚。在更改使用的引脚之前,请检查下面的引脚分配以分配正确的引脚。
- 使用引脚 D2 -> GPIO4
- DHT dhtA(4, DHT22)
如果您使用的是 DHT-11,它将是:
- 使用引脚 D2 -> GPIO4
- DHT dhtA(4, DHT11)
注意: 如果您使用的库与我相同。如果您使用不同的库,请查看库文档以检查您应该如何声明使用的引脚和传感器。
void setup() :这里我们初始化东西。
void setup() {Serial.begin(9600); // 调试目的检查 DHT 和与 MQTT Broker 的连接是否正常工作Serial.print(swversion);// Debug.软件版本dhtA.begin(); // 启动 DHT-22
连接到 MQTT 代理。
delay(2000); // 延迟以允许与 MQTT Broker 的第一次连接
延迟(2000) :如果第一次连接失败,则增加时间。在这种情况下,2000 允许 NodeMCU 连接到 Broker。
if (client.connect(clientID,"","", willTopic, willQoS, willRetain, willMessage, true)) { // 连接到 MQTT Broker
client.connect() :下面解释。摘自:https://pubsubclient.knolleary.net/api.html#connect5
____________________________________________________________
布尔连接(clientID、用户名、密码、willTopic、willQoS、willRetain、willMessage、cleanSession)
使用 Will 消息、用户名、密码和指定的干净会话标志连接客户端。
注意 :即使 cleanSession
设置为 false
/0
客户不会 重试 qos 1 发布失败。此标志仅用于维护代理上的订阅。
参数
- clientID :连接到服务器时使用的客户端 ID。
- username :要使用的用户名。如果为 NULL,则不使用用户名或密码 (const char[])
- password :要使用的密码。如果为 NULL,则不使用密码 (const char[])
- willTopic :遗嘱消息使用的主题 (const char[])
- willQoS:遗嘱消息使用的服务质量(整数:0,1 或 2)
- willRetain :是否应使用保留标志 (int :0 或 1) 发布遗嘱
- willMessage :遗嘱消息的负载 (const char[])
- cleanSession :是否连接clean-session (boolean)
退货
- false – 连接失败。
- true – 连接成功。
来源:NodeMCU 与 Raspberry Pi 3 B+ 之间的 MQTT 通信
制造工艺