ESP32-S3与DHT11温湿度传感器开发指南
1. ESP32-S3与DHT11温湿度传感器开发实战在物联网和嵌入式系统开发中环境监测是最基础也最重要的功能之一。ESP32-S3作为乐鑫推出的高性能Wi-Fi/蓝牙双模芯片配合DHT11数字温湿度传感器可以快速构建一个低成本的温湿度监测系统。本文将详细介绍如何在ESP-IDF开发环境下使用ESP32-S3读取DHT11传感器的数据。1.1 DHT11传感器工作原理DHT11是一款经典的温湿度复合传感器采用单总线通信协议具有成本低、体积小、功耗低等特点。其内部结构包含一个电容式湿度传感器和一个热敏电阻温度传感器通过内置的8位微控制器进行数据采集和转换。DHT11的技术参数如下工作电压3.3V-5.5V测量范围湿度20-90%RH温度0-50℃精度湿度±5%RH温度±2℃分辨率湿度1%RH温度1℃采样周期≥2秒1.2 单总线通信协议解析DHT11采用单总线通信协议只需要一根数据线即可完成双向通信。通信过程分为三个主要阶段主机启动信号MCU拉低总线至少18ms然后拉高20-40μs传感器响应DHT11拉低总线80μs然后拉高80μs数据传输传感器发送40位数据高位先出数据格式如下8bit湿度整数8bit湿度小数DHT11固定为08bit温度整数8bit温度小数DHT11固定为08bit校验和前四个字节之和2. 硬件连接与配置2.1 ESP32-S3与DHT11连接ESP32-S3开发板与DHT11的连接非常简单DHT11的VCC引脚接3.3VGND引脚接地DATA引脚接GPIO0可根据需要更改在DATA引脚和VCC之间接一个4.7KΩ上拉电阻注意DHT11的工作电压范围是3.3V-5.5V虽然ESP32-S3的GPIO是3.3V电平但DHT11在3.3V下也能正常工作。2.2 ESP-IDF环境配置在ESP-IDF项目中需要在CMakeLists.txt中添加DHT11驱动组件set(src_dirs components/dht11 ... ) set(include_dirs components/dht11 ... ) idf_component_register( SRC_DIRS ${src_dirs} INCLUDE_DIRS ${include_dirs} REQUIRES driver )3. 软件实现详解3.1 DHT11驱动开发3.1.1 GPIO初始化首先需要配置GPIO为开漏输出模式并启用上拉电阻gpio_config_t io_conf { .pin_bit_mask (1ULL DHT11_GPIO), .mode GPIO_MODE_INPUT_OUTPUT_OD, .pull_up_en GPIO_PULLUP_ENABLE, .pull_down_en GPIO_PULLDOWN_DISABLE, .intr_type GPIO_INTR_DISABLE }; gpio_config(io_conf);3.1.2 复位和检测函数发送复位信号并检测DHT11响应void dht11_reset() { gpio_set_level(DHT11_GPIO, 0); ets_delay_us(20000); // 拉低20ms gpio_set_level(DHT11_GPIO, 1); ets_delay_us(30); // 主机拉高30μs } uint8_t dht11_check() { uint8_t retry 0; while(gpio_get_level(DHT11_GPIO) retry100) { retry; ets_delay_us(1); } if(retry100) return 1; retry 0; while(!gpio_get_level(DHT11_GPIO) retry100) { retry; ets_delay_us(1); } if(retry100) return 1; return 0; }3.1.3 数据读取函数读取一位数据的实现uint8_t dht11_read_bit() { uint8_t retry 0; while(gpio_get_level(DHT11_GPIO) retry100) { retry; ets_delay_us(1); } retry 0; while(!gpio_get_level(DHT11_GPIO) retry100) { retry; ets_delay_us(1); } ets_delay_us(40); // 等待40μs判断高低电平 return gpio_get_level(DHT11_GPIO); } uint8_t dht11_read_byte() { uint8_t data 0; for(int i0; i8; i) { data 1; data | dht11_read_bit(); } return data; }3.2 主程序实现在主程序中初始化硬件并循环读取数据void app_main() { // 初始化NVS、I2C、SPI等 nvs_flash_init(); i2c_init(); spi_init(); lcd_init(); // 初始化DHT11 if(dht11_init() ! 0) { printf(DHT11 initialization failed!\n); return; } uint8_t temperature, humidity; while(1) { if(dht11_read_data(temperature, humidity) 0) { printf(Temperature: %d°C, Humidity: %d%%\n, temperature, humidity); // 更新LCD显示 lcd_display_temp_humi(temperature, humidity); } vTaskDelay(pdMS_TO_TICKS(2000)); // 每2秒读取一次 } }4. 常见问题与优化建议4.1 常见问题排查读取失败或数据错误检查接线是否正确特别是上拉电阻确保供电电压稳定检查时序控制是否准确特别是延时时间两次读取间隔应大于2秒传感器无响应检查传感器方向是否正确有字的一面朝向PCB测量VCC电压是否正常尝试更换传感器4.2 性能优化建议提高读取成功率在关键时序处禁用中断使用更精确的延时函数添加多次尝试机制降低功耗在不读取时将GPIO设为输入模式使用深度睡眠模式定时唤醒读取数据处理优化添加滑动平均滤波实现数据校验和重传机制添加温度补偿算法5. 扩展应用基于ESP32-S3和DHT11可以构建多种应用无线温湿度监测站通过Wi-Fi将数据上传到云平台实现手机APP远程监控添加历史数据存储和查询功能智能家居控制系统根据温湿度自动控制空调、加湿器与其它传感器联动实现环境调节添加语音控制接口农业监测系统多点温湿度监测异常报警功能数据分析与预测实际开发中发现DHT11在高温高湿环境下精度会下降对于要求较高的应用可以考虑使用DHT22或SHT3x系列传感器。

相关新闻

Postman接口自动化测试全攻略:从基础到CI/CD集成

Postman接口自动化测试全攻略:从基础到CI/CD集成

1. 项目概述:为什么我们需要Postman接口自动化测试?如果你是一名后端开发、测试工程师,或者正在学习API开发,那么“接口测试”这个词你一定不陌生。过去,我们可能习惯于用浏览器插件、甚至直接写几行curl命令来手动测试…

2026/10/14 12:21:35 阅读更多 →
AR应用中实时纹理方向校正:基于图片旋转判断模型的Unity集成方案

AR应用中实时纹理方向校正:基于图片旋转判断模型的Unity集成方案

1. 项目概述:为什么AR应用需要实时校正纹理贴图方向?在AR(增强现实)应用开发中,我们常常会遇到一个看似微小却影响巨大的问题:设备摄像头捕捉到的真实世界图像,与我们希望叠加上去的虚拟物体纹理…

2026/10/9 15:11:51 阅读更多 →
React setState机制详解与性能优化

React setState机制详解与性能优化

1. React中的setState机制深度解析在React开发中,状态管理是构建交互式UI的核心。setState作为类组件时代的状态更新机制,虽然现在已被函数组件的useState Hook部分替代,但理解其工作原理仍然是React开发者必备的基础知识。本文将深入剖析set…

2026/10/11 6:14:02 阅读更多 →

最新新闻

基于 AWS CDK (Go) 构建 S3 上传触发 Rekognition 图像识别并写入 DynamoDB 的完整实战

基于 AWS CDK (Go) 构建 S3 上传触发 Rekognition 图像识别并写入 DynamoDB 的完整实战

【免费下载链接】aws-cdk-examples Example projects using the AWS CDK 项目地址: https://gitcode.com/gh_mirrors/aw/aws-cdk-examples 点击查看 免费下载 导读 本文以 aws-cdk-examples 仓库中的 go/rekognition-lambda-s3-trigger 示例为主线,系统…

2026/10/15 2:19:18 阅读更多 →
Unity BakeMesh粒子层级问题解决:从原理到Shader排序实战

Unity BakeMesh粒子层级问题解决:从原理到Shader排序实战

简介:这份资源聚焦Unity开发中粒子特效与UI层级冲突的常见难题,面向需要将粒子效果嵌入界面、并希望像UGUI一样灵活控制层级的开发者。内容围绕BakeMesh方案展开,对比了RenderTexture渲染与多Canvas调整Sort in Layer两种传统思路的优劣&…

2026/10/15 2:19:18 阅读更多 →
空间锚点建模:打工人可复用的AI能力迁移方法论

空间锚点建模:打工人可复用的AI能力迁移方法论

1. 这不是玄学,是可复现的驾驶能力迁移实验最近刷屏的“科目二AI两把过关”视频,表面看是段子,实则藏着一套被低估的、可拆解、可复现的能力迁移路径。我连续两周蹲守驾校训练场,跟拍了6位真实学员(含3位零基础打工人&…

2026/10/15 2:19:18 阅读更多 →
Unity Cloud Content Delivery:面向热更新的原生资源分发方案

Unity Cloud Content Delivery:面向热更新的原生资源分发方案

1. 项目概述:这不是“云存储”,而是为Unity游戏量身定制的资源分发流水线Unity Cloud Content Delivery(UCD)这个名字刚出现时,我第一反应是:“又一个带‘Cloud’的营销词?”——直到在某次跨平…

2026/10/15 2:19:18 阅读更多 →
pyecharts交互式数据可视化实战:从时间刷选到地图下钻

pyecharts交互式数据可视化实战:从时间刷选到地图下钻

有一次,同事跑过来丢给我一句话:“我们想要一个自己能点着看的页面,不是截图,也不是PDF。” 当时他在做月度复盘,数据已经躺在Excel里了,但画出来的折线图、柱状图一旦转发给他,就变成死图片。他…

2026/10/15 2:19:18 阅读更多 →
Java 面向对象|大二学习笔记,把最难啃的这块讲明白

Java 面向对象|大二学习笔记,把最难啃的这块讲明白

之前把 Java 基础语法过完了,if、for、数组、方法写起来还算顺手,可一碰到面向对象直接卡壳。很长一段时间我都觉得:不就是写个 class 然后 new 对象吗?好像看懂了,但一写代码就乱,分不清什么时候用继承、什…

2026/10/15 2:18:18 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →