当前位置: 首页 > news >正文

[Arduino学习] ESP8266读取DHT11数字温湿度传感器数据

目录

1、传感器介绍

2、接线

3、DHT.h库


1、传感器介绍

        DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,是简单环境监测项目的理想选择。

        温度分辨率为1ºC,相对湿度为1%。温度范围在0ºC到50ºC之间,湿度的测量范围取决于温度。

2、接线

下面是开发板原理图,DHT11接在外设接口上,传感器数据可以通过GPIO5获取。

读取DHT11,采用的DHT sensor library库

       接线注意:根据资料显示传感器可以接在ESP8266的引脚GPIO3、4、5、12、13或14、15,等引脚,这里是ESP8266的,不是D3,D4,这个和厂家有关系,不同模组不一样。

        重点注意的是:传感器接GPIO15引脚时,上传程序时必须断开DHT。否则无法上传程序。同时GPIO16和AO引脚也无法正常

3、DHT.h库

该库有两个示例文件,

库文件解释

        该示例程序 两秒获取刷新一次数据,推荐用下面这个,已测试ok

#include "DHT.h"
#define DHTPIN 2    // 连接到DHT传感器的数字引脚
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
void setup() {Serial.begin(9600);Serial.println(F("DHTxx test!"));dht.begin();
}void loop() {delay(2000);// 读取温度或湿度大约需要250毫秒!float h = dht.readHumidity();// 读取温度为摄氏度(默认值)float t = dht.readTemperature();// 将温度读取为华氏度(isFahrenheight=true)float f = dht.readTemperature(true);// 检查是否有任何读取失败,并提前退出(重试)。if (isnan(h) || isnan(t) || isnan(f)) {Serial.println(F("从DHT传感器读取失败!"));return;}// 以华氏度为单位计算热指数(默认值)//float hif = dht.computeHeatIndex(f, h);// 以摄氏度为单位计算热指数(isFahreheit=false)// float hic = dht.computeHeatIndex(t, h, false);Serial.print(F("Humidity: "));Serial.print(h);Serial.print(F("%  Temperature: "));Serial.print(t);Serial.printLN(F("°C "));// Serial.print(f);// Serial.print(F("°F  Heat index: "));// Serial.print(hic);// Serial.print(F("°C "));// Serial.print(hif);
// Serial.println(F("°F"));
}

注意:

1、F() 宏包裹起来,可以节省微控制器的内存空间。例如,F("Humidity: ") 会将 "Humidity: " 字符串会存储在程序的 Flash 存储器中,而不是 RAM.

2、上面将计算热指数的注释掉了,如果需要计算热指数,删除注释,Serial.printLN(F("°C ")这里采用换行,需要取消换行使用Serial.print

                下面这个可以根据传感器详细信息设置传感器读数之间的延迟.

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>#define DHTPIN 2  //连接到DHT传感器的数字引脚  
// 定义正在使用的传感器类型:
//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)DHT_Unified dht(DHTPIN, DHTTYPE);uint32_t delayMS;void setup() {Serial.begin(9600);// 串口波特率.dht.begin();Serial.println(F("DHTxx Unified Sensor Example"));// 打印温度传感器详细信息.sensor_t sensor;dht.temperature().getSensor(&sensor);Serial.println(F("------------------------------------"));Serial.println(F("Temperature Sensor"));Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("°C"));Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("°C"));Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("°C"));Serial.println(F("------------------------------------"));// 打印湿度传感器详细信息dht.humidity().getSensor(&sensor);Serial.println(F("Humidity Sensor"));Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("%"));Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("%"));Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("%"));Serial.println(F("------------------------------------"));// 根据传感器详细信息设置传感器读数之间的延迟.delayMS = sensor.min_delay / 1000;。
}void loop() {// Delay between measurements.delay(delayMS);// 获取温度事件并打印其值。sensors_event_t event;dht.temperature().getEvent(&event);if (isnan(event.temperature)) {Serial.println(F("Error reading temperature!"));}else {Serial.print(F("Temperature: "));Serial.print(event.temperature);Serial.println(F("°C"));}// 获取湿度事件并打印其值.dht.humidity().getEvent(&event);if (isnan(event.relative_humidity)) {Serial.println(F("Error reading humidity!"));}else {Serial.print(F("Humidity: "));Serial.print(event.relative_humidity);Serial.println(F("%"));}
}

4、测试

        测试采用官方示例的第一种方法获取的,数据获取正常,两秒数据刷新一次。

相关文章:

  • StreamingT2V文本生成视频多模态大模型,即将开源!
  • CAN的协议层
  • Windows批处理数值计算实战
  • Twitter Api查询用户粉丝列表
  • vue 使用自定义标签URL Protocol 调用本地exe 并传参
  • Pycharm+Neo4j红楼梦人物关系图谱
  • Golang 开发实战day07 - Functions
  • 关于在PyCharm中使用虚拟环境
  • 04 - 7 段 16 进制数码管显示
  • DIY蓝牙键盘(1) - 理解 键盘报文(免费)
  • JAX深度学习库入门
  • JS实现双向数据绑定的三种方式
  • 面试题:RabbitMQ 消息队列中间件
  • 基于ssm的轻型卡车零部件销售平台(java项目+文档+源码)
  • 站群服务器如何提高搜索引擎排名
  • CentOS7 安装JDK
  • express.js的介绍及使用
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Sublime text 3 3103 注册码
  • 从零开始学习部署
  • 分布式熔断降级平台aegis
  • 简单实现一个textarea自适应高度
  • 前端技术周刊 2019-01-14:客户端存储
  • 项目实战-Api的解决方案
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • mysql面试题分组并合并列
  • 如何在招聘中考核.NET架构师
  • ​水经微图Web1.5.0版即将上线
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (02)Hive SQL编译成MapReduce任务的过程
  • (poj1.2.1)1970(筛选法模拟)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)elasticsearch 源码之启动流程分析
  • (学习日记)2024.01.09
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • .NET Core 版本不支持的问题
  • .NET Framework .NET Core与 .NET 的区别
  • .NET 设计模式初探
  • .net 提取注释生成API文档 帮助文档
  • .NET框架
  • /proc/vmstat 详解
  • ?php echo ?,?php echo Hello world!;?
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [22]. 括号生成
  • [2544]最短路 (两种算法)(HDU)
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [CLR via C#]11. 事件
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)