news 2026/6/10 19:42:42

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/6/10 11:42:39

ChatTTS本地AI大模型实战:从零搭建高可用语音合成系统

ChatTTS本地AI大模型实战&#xff1a;从零搭建高可用语音合成系统 摘要&#xff1a;把 8G 显存的笔记本变成“播音室”——用 3 个周末把 ChatTTS 搬到本地&#xff0c;推理提速 3 倍、内存省 60%&#xff0c;踩完 5 个坑后总结出的全套笔记&#xff0c;连压测脚本都给你配好了…

作者头像 李华
网站建设 2026/6/10 11:43:08

Pi0机器人控制中心实战教程:3步部署VLA具身智能交互终端

Pi0机器人控制中心实战教程&#xff1a;3步部署VLA具身智能交互终端 1. 这不是普通网页&#xff0c;而是一个能“看懂”环境并执行动作的机器人大脑 你有没有想过&#xff0c;让机器人真正理解你的指令&#xff1f;不是靠预设脚本&#xff0c;而是像人一样——看到红色方块、…

作者头像 李华
网站建设 2026/6/9 22:50:37

4大维度突破设计动效瓶颈:AEUX工具全解析

4大维度突破设计动效瓶颈&#xff1a;AEUX工具全解析 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 在设计与动效制作的协作流程中&#xff0c;设计师与动画师之间常存在数据断层&…

作者头像 李华
网站建设 2026/6/10 11:43:46

蓝牙MIDI协议背后的设计哲学:无线音乐传输的演进与挑战

蓝牙MIDI协议&#xff1a;无线音乐传输的技术革命与未来展望 音乐创作与表演的数字化浪潮中&#xff0c;蓝牙MIDI协议悄然改变了传统音乐制作的工作流程。想象一下&#xff0c;钢琴家不再被杂乱的线缆束缚&#xff0c;电子音乐制作人可以在任何角落用平板电脑控制合成器&#x…

作者头像 李华
网站建设 2026/6/10 15:08:00

错误处理与日志记录:ASP.NET Core 中间件的进阶实践

在ASP.NET Core中,中间件是一个重要的概念,用于处理HTTP请求和响应的生命周期。在处理错误时,我们通常会创建自定义的错误处理中间件。今天,我们将讨论如何在错误处理中间件中引入日志记录功能,并且确保代码的逻辑性和可维护性。 背景知识 在ASP.NET Core中,中间件可以…

作者头像 李华
网站建设 2026/6/10 19:28:28

智能音箱音乐解锁教程:突破版权限制实现免费听歌的完整指南

智能音箱音乐解锁教程&#xff1a;突破版权限制实现免费听歌的完整指南 【免费下载链接】xiaomusic 使用小爱同学播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 智能音箱作为现代家庭的音频中心&#xff0c…

作者头像 李华