如何用ESP32和DHT22搭建温湿度监控小程序?完整教程

为什么选择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);
}

开发微信小程序

在微信开发者工具中创建新项目,选择“蓝牙”功能。主要步骤:

  1. 初始化蓝牙适配器:wx.openBluetoothAdapter()
  2. 搜索设备:wx.startBluetoothDevicesDiscovery(),过滤服务UUID
  3. 连接设备:wx.createBLEConnection()
  4. 获取数据: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搭建温湿度监控系统,并配合微信小程序展示,是一个经典且实用的物联网入门项目。本文提供了从硬件到软件的完整方案,代码可直接复制使用。希望你能在此基础上发挥创意,构建更丰富的智能家居应用。

上一篇
没有更多了
下一篇
如何用ESP32 Kit和MySQL打造智能摄像头监控系统?一步步教你实现

评论 (0)

暂无评论,快来抢沙发吧~