为什么选择ESP32和DHT22搭建温湿度监控?
在物联网项目中,温湿度监控是最常见的应用之一。ESP32作为一款低成本、低功耗、集成Wi-Fi和蓝牙的微控制器,非常适合作为数据采集和传输的核心。DHT22传感器具有高精度、长期稳定性好的特点,能够测量-40°C至80°C的温度和0%至100%的相对湿度,精度分别为±0.5°C和±2%RH。两者结合,再加上微信小程序作为前端展示,可以快速实现一个随时随地查看环境数据的系统。
硬件准备
- ESP32开发板:推荐使用ESP32-DevKitC或NodeMCU-32S,价格约20-30元。
- DHT22传感器模块:包含4个引脚(VCC、DATA、NC、GND),建议购买已焊接好的模块。
- 面包板及杜邦线:用于电路连接。
- Micro USB数据线:用于供电和编程。
电路连接
连接方式非常简单:将DHT22的VCC引脚连接到ESP32的3.3V输出,GND连接到GND,DATA引脚连接到任意数字GPIO(本例使用GPIO4)。注意:如果DHT22模块未集成上拉电阻,需要在DATA和VCC之间连接一个4.7kΩ上拉电阻。
Arduino环境配置
首先在Arduino IDE中安装ESP32开发板支持。打开文件->首选项,在附加开发板管理器网址中添加:https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json。然后进入工具->开发板->开发板管理器,搜索并安装esp32。接着安装DHT传感器库:在库管理器中搜索DHT sensor library并安装。
编写ESP32代码
以下代码实现读取DHT22数据并通过蓝牙发送到手机(以BLE为例):
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) { deviceConnected = true; }
void onDisconnect(BLEServer* pServer) { deviceConnected = false; }
};
void setup() {
Serial.begin(115200);
dht.begin();
BLEDevice::init("ESP32_DHT22");
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(SERVICE_UUID);
pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
);
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
if (deviceConnected) {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) {
String data = "Temp:" + String(t) + "C,Humidity:" + String(h) + "%";
pCharacteristic->setValue(data.c_str());
pCharacteristic->notify();
}
}
delay(2000);
}开发微信小程序
在微信开发者工具中创建新项目,选择“蓝牙”功能。主要步骤:
- 初始化蓝牙适配器:wx.openBluetoothAdapter()
- 搜索设备:wx.startBluetoothDevicesDiscovery(),过滤服务UUID
- 连接设备:wx.createBLEConnection()
- 获取数据:wx.notifyBLECharacteristicValueChange() 并监听特征值变化
关键代码片段:
wx.onBLECharacteristicValueChange(function(res) {
const dataView = new DataView(res.value);
// 解析数据
const temp = dataView.getFloat32(0, true);
const hum = dataView.getFloat32(4, true);
that.setData({ temperature: temp, humidity: hum });
});注意:小程序中需要配置蓝牙权限(在app.json中添加permissions字段)。
测试与调试
上传代码到ESP32后,打开Arduino串口监视器,可以看到温度湿度数据。在小程序端搜索到名为“ESP32_DHT22”的设备并连接,即可实时显示数据。常见问题:如果数据为NaN,检查DHT22接线或更换传感器;如果蓝牙连接失败,确保ESP32的BLE服务UUID与小程序端一致。
扩展与优化
你可以将数据上传到云平台(如阿里云IoT、腾讯云IoT),实现远程监控。也可以添加OLED显示屏,本地显示数据。如果使用Wi-Fi,可改为HTTP或MQTT协议,将数据发送到服务器,小程序再通过API获取。此外,可以增加阈值告警功能,当温湿度超出范围时推送通知。
总结
通过ESP32和DHT22搭建温湿度监控系统,并配合微信小程序展示,是一个经典且实用的物联网入门项目。本文提供了从硬件到软件的完整方案,代码可直接复制使用。希望你能在此基础上发挥创意,构建更丰富的智能家居应用。
请先登录后再发布评论