news 2026/3/11 23:48:10

ESP32与DHT11传感器实战:基于VSCode+PlatformIO的温湿度监测系统搭建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32与DHT11传感器实战:基于VSCode+PlatformIO的温湿度监测系统搭建

1. 项目概述:为什么选择ESP32+DHT11?

如果你正在寻找一个低成本、易上手的温湿度监测方案,ESP32搭配DHT11传感器绝对是入门级物联网项目的黄金组合。ESP32作为一款集成了Wi-Fi和蓝牙功能的微控制器,价格不到30元却能实现联网功能;而DHT11作为经典的数字温湿度传感器,虽然精度不算顶尖(温度±2℃,湿度±5%RH),但对于家庭温室监测、仓库环境监控等场景完全够用。

我去年帮朋友搭建过一个阳台种植监测系统,就是用这套方案实现的。实测在3米×4米的封闭阳台环境中,单个DHT11就能准确反映环境变化,数据通过Wi-Fi上传到手机APP,成本不到50元。相比动辄上千元的专业设备,这个方案对DIY爱好者特别友好。

2. 硬件准备与连接

2.1 所需材料清单

  • 核心部件

    • ESP32开发板(推荐ESP32-WROOM-32,Type-C接口版本更方便)
    • DHT11温湿度传感器(注意选择带PCB板的型号,稳定性更好)
  • 可选配件

    • 0.96寸OLED屏幕(SSD1306驱动)
    • 面包板+杜邦线(建议使用防反插的镀金线)
    • Micro USB数据线(建议选带磁环的抗干扰线)

2.2 电路连接详解

DHT11的接线非常简单,只需要3根线:

DHT11引脚说明: - VCC → ESP32的3.3V - DATA → GPIO5(可自定义,但代码需同步修改) - GND → ESP32的GND

这里有个实用技巧:在DATA引脚和VCC之间加一个4.7KΩ的上拉电阻,能显著提高信号稳定性。我遇到过好几次数据读取失败的情况,加上电阻后就再没出过问题。

如果使用OLED显示,接线如下:

OLED引脚说明: - SCL → GPIO22 - SDA → GPIO21 - VCC → 3.3V - GND → GND

3. 开发环境搭建

3.1 VSCode配置指南

  1. 安装VSCode后,打开扩展市场搜索安装:

    • PlatformIO IDE(必装)
    • C/C++(代码提示)
    • Python(部分依赖需要)
  2. 首次打开PlatformIO会自动安装核心组件,如果下载慢可以:

    # 在终端设置镜像源 pio settings set mirrors.China https://mirrors.bfsu.edu.cn/pypi/web/simple

3.2 PlatformIO工程创建

  1. 点击PlatformIO主页的"New Project"
  2. 按如下配置:
    Board: ESP32 Dev Module Framework: Arduino Location: 建议使用英文路径
  3. 创建完成后,在platformio.ini中添加依赖库:
    lib_deps = adafruit/DHT sensor library@^1.4.4 olikraus/U8g2@^2.35.7

4. 代码实现解析

4.1 核心代码解读

在src/main.cpp中输入以下代码:

#include <Arduino.h> #include <DHT.h> #include <U8g2lib.h> // 硬件配置 #define DHTPIN 5 #define DHTTYPE DHT11 // 初始化对象 DHT dht(DHTPIN, DHTTYPE); U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); void setup() { Serial.begin(115200); dht.begin(); u8g2.begin(); u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 中文字体 } void loop() { delay(2000); // DHT11最小采样间隔1s float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("读取失败!"); return; } // OLED显示 u8g2.clearBuffer(); u8g2.drawStr(0, 20, "温度:"); u8g2.setCursor(40, 20); u8g2.print(t, 1); u8g2.drawStr(80, 20, "°C"); u8g2.drawStr(0, 40, "湿度:"); u8g2.setCursor(40, 40); u8g2.print(h, 1); u8g2.drawStr(80, 40, "%"); u8g2.sendBuffer(); // 串口输出 Serial.printf("温度: %.1f°C 湿度: %.1f%%\n", t, h); }

4.2 常见问题处理

  1. 中文乱码问题

    • 需要手动导入中文字库
    • 在platformio.ini中添加:
      build_flags = -DU8G2_USE_LARGE_FONTS
  2. 数据读取失败

    • 检查接线是否松动
    • 尝试降低I2C时钟频率:
      Wire.setClock(100000); // 在setup()中添加

5. 功能扩展与优化

5.1 数据上传云端

添加WiFi连接和HTTP请求代码:

#include <WiFi.h> const char* ssid = "你的WiFi"; const char* password = "密码"; void connectWiFi() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("连接成功"); } void postData(float t, float h) { HTTPClient http; http.begin("http://api.example.com/data"); http.addHeader("Content-Type", "application/json"); String payload = "{\"temp\":" + String(t) + ",\"humi\":" + String(h) + "}"; int code = http.POST(payload); Serial.printf("HTTP状态码: %d\n", code); http.end(); }

5.2 低功耗优化

通过深度睡眠实现电池供电:

#define uS_TO_S_FACTOR 1000000 #define SLEEP_TIME 300 // 秒 void setup() { esp_sleep_enable_timer_wakeup(SLEEP_TIME * uS_TO_S_FACTOR); // ...其他初始化代码... } void loop() { // ...数据采集代码... esp_deep_sleep_start(); }

6. 项目实战经验

在最近一个智能衣柜项目中,我发现DHT11在密闭空间容易出现冷凝水导致读数异常。解决方案是在传感器周围涂抹少量凡士林防水,同时将采样间隔从2秒延长到5分钟。另外,ESP32的WiFi信号在金属柜体内衰减严重,最终通过外置陶瓷天线解决了联网问题。

对于需要更高精度的场景,建议升级到DHT22或SHT30传感器,虽然价格贵3-4倍,但温度精度可达±0.3℃,湿度±2%RH。不过对于大多数日常应用,DHT11的性价比依然无敌。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 16:00:56

VibeThinker-1.5B功能测评:专长领域表现全面解析

VibeThinker-1.5B功能测评&#xff1a;专长领域表现全面解析 你是否试过让一个15亿参数的模型&#xff0c;在AIME数学竞赛中击败参数量超400倍的竞品&#xff1f;是否想过&#xff0c;一个训练成本仅7800美元的小模型&#xff0c;能在LiveCodeBench编程基准上跑赢Magistral Me…

作者头像 李华
网站建设 2026/3/10 9:33:43

ChatTTS声音合成技术实战:如何提升语音生成效率与质量

ChatTTS声音合成技术实战&#xff1a;如何提升语音生成效率与质量 摘要&#xff1a;在语音合成应用中&#xff0c;开发者常面临生成速度慢、音质不稳定等问题。本文深入解析ChatTTS的核心技术原理&#xff0c;提供一套优化语音生成效率的实战方案&#xff0c;包括模型轻量化、缓…

作者头像 李华
网站建设 2026/3/11 8:40:34

AI智能二维码工坊性能保障:长时间运行稳定性测试报告

AI智能二维码工坊性能保障&#xff1a;长时间运行稳定性测试报告 1. 为什么需要一场“不睡觉”的稳定性测试&#xff1f; 你有没有遇到过这样的情况&#xff1a;刚部署好的二维码服务&#xff0c;跑着跑着就卡住了&#xff1f;上传图片识别失败、生成图片变空白、WebUI突然打…

作者头像 李华
网站建设 2026/3/11 14:24:10

OFA VQA模型镜像实测:一键运行,轻松实现图片内容识别与问答

OFA VQA模型镜像实测&#xff1a;一键运行&#xff0c;轻松实现图片内容识别与问答 你是否试过为一张照片提问“图中有什么&#xff1f;”“这个人在做什么&#xff1f;”“这辆车是什么品牌&#xff1f;”&#xff0c;却要花半天时间配置环境、下载模型、调试依赖&#xff1f…

作者头像 李华
网站建设 2026/3/11 20:59:00

Nano-Banana开源大模型教程:基于SDXL-Base 1.0的工业级微调实践

Nano-Banana开源大模型教程&#xff1a;基于SDXL-Base 1.0的工业级微调实践 1. 为什么你需要一个“会拆东西”的AI&#xff1f; 你有没有过这样的经历&#xff1a; 想给一款新设计的运动鞋做产品说明书&#xff0c;却卡在“怎么把鞋带、中底、外底、网布层清晰分开又不失美感…

作者头像 李华
网站建设 2026/3/11 14:23:46

嵌入式开发实战:如何为你的单片机项目选择合适的RTOS?

1. RTOS是什么&#xff1f;为什么单片机项目需要它&#xff1f; 第一次接触RTOS是在五年前的一个工业控制项目上。当时客户要求系统必须保证电机控制的响应时间在毫秒级&#xff0c;用传统的裸机编程方式&#xff08;就是那个著名的大循环&#xff09;怎么也达不到要求&#x…

作者头像 李华