NodeMCU DHT22接入树莓派3B+ MQTT Broker:无缝物联网集成指南
部署可扩展物联网方案:NodeMCU微控制器搭载DHT22温湿度传感器,接入树莓派3 B+运行的MQTT Broker。数据经IoT MQTT Panel App实时可视化。
本指南覆盖硬件连接、软件搭建、代码结构——仅编辑MQTT主题即可增删传感器节点。断网时各NodeMCU本地持续发布,重连后缓冲数据自动回传,零丢包。
1. 网络拓扑
典型布局:树莓派接LAN,各NodeMCU同Wi-Fi路由器下。传感器每10秒读数发布至独立主题,如/room1/temperature、/room1/humidity。Broker监听1883端口转发消息至Panel App。
2. 软件前置依赖
2.1 Arduino IDE库
- PubSubClient —— ESP8266 MQTT客户端
- DHT Sensor Library —— DHT22/11驱动
- Adafruit Unified Sensor —— 通用传感器接口
- ESP8266WiFi —— Wi-Fi连接
2.2 树莓派Python依赖
- Python内置
time模块 - MQTT客户端:
pip install paho-mqtt—— 入门见Steves Internet Guide
3. 固件烧录
NodeMCU刷入提供的草图,树莓派跑Python脚本订阅主题并落盘CSV供后续分析。
4. NodeMCU草图概览
#include <ESP8266WiFi.h> // ESP8266 Wi-Fi库
#include <PubSubClient.h> // MQTT客户端
#include "DHT.h" // DHT传感器库
const char* mqtt_server = "Broker_IP_Address"; // 替换为Pi IP
const char* clientID = "room1"; // 节点标识
const char* topicT = "/room1/temperature"; // 温度主题
const char* topicH = "/room1/humidity"; // 湿度主题
const char* willTopic = "/room1/status"; // 遗嘱主题
const char* willMessage = "0"; // 0=离线
int willQoS = 0;
boolean willRetain = true;
int counter = 0;
const char* swversion = "1.0";
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient);
DHT dhtA(2, DHT22); // DHT22接NodeMCU引脚D4(GPIO2)
void setup() {
Serial.begin(9600);
Serial.print(swversion);
dhtA.begin();
delay(2000); // 等Wi-Fi稳定
if (client.connect(clientID, "", "", willTopic, willQoS, willRetain, willMessage, true)) {
Serial.println("Connected to MQTT broker");
}
}
将Broker_IP_Address替换为Pi局域网IP(如192.168.1.200)。Pi上运行ifconfig wlan0获取。
willTopic与willMessage使Broker能检测节点意外断线,发布保留"0"状态供面板可视化。
5. 树莓派订阅脚本
Python脚本建立持久Broker连接,订阅相关主题,将入站数据写入CSV文件供后续分析。
6. 系统扩展
新增房间仅需复制草图,修改clientID、topicT、topicH、willTopic为新房间名,烧录另一NodeMCU。MQTT Panel App在UI添加新主题即自动检测。
断网时NodeMCU持续发布至本地队列,连接恢复后消息刷新,确保零数据丢失。
关注更新,敬请期待全系统演示视频。
制造工艺