当前位置: 首页 > 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项目+文档+源码)
  • 站群服务器如何提高搜索引擎排名
  • 【Leetcode】101. 对称二叉树
  • [译]Python中的类属性与实例属性的区别
  • docker python 配置
  • echarts的各种常用效果展示
  • ERLANG 网工修炼笔记 ---- UDP
  • Fabric架构演变之路
  • Java 网络编程(2):UDP 的使用
  • JAVA并发编程--1.基础概念
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 机器学习中为什么要做归一化normalization
  • 前端性能优化——回流与重绘
  • 手写一个CommonJS打包工具(一)
  • 思否第一天
  • 跳前端坑前,先看看这个!!
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 整理一些计算机基础知识!
  • ​configparser --- 配置文件解析器​
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (转) 深度模型优化性能 调参
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .Net - 类的介绍
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 依赖注入的基本用发
  • .NET命名规范和开发约定
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .sdf和.msp文件读取
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL---仿函数与priority_queue
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2669]2-2 Time类的定义