新DTH11简介
DTH11是一款数字温湿度传感器,捡百度词条没有的说,这个百度词条是2011年建的,估计这个传感器是2011年开始有的,不过厂家在05年就自主研制出湿敏电阻,估计上市还会早于2011年,而上图的新款传感器是18年买的新版,当时某宝焊接好的模块几乎是旧款,想要新版只能买裸传感器。
更新要点:
- 商标换了,由AOSONGTM 变为 ASAIRTM, MORE INTERNATIONAL;
- 温湿度测量范围由20-90%RH/0-50°C 升级为 5-90%RH/-20-60°C;
- 新版的传感器温度数据有1位小时,可以读出如 -2.1°C这样的数据;
- 用户的最低采样频率由旧款1Hz变为1/2Hz;
- 功耗减半,由0.16mAmin-2.5mAmax 降低为0.06mA-1mA;
- 启动响应信号旧款主机拉低18ms后要等待拉高20-40us,新款粗略测量等待约15us;
硬件原理图
VCC=3.3v:
软件部分结构
- main.c
- DTH11.h
- DTH11.c
DTH11驱动网上其实很多了,新版传感器的也只注意下负数温度的问题, 我这里用的是lcd1602显示的,暂时不包含在这篇里面,另外整理;
main.c主要是调用读数据的函数,显示数据 :
/* main
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "esp_log.h"
#include "esp_system.h"
#include "esp_err.h"
#include "driver/i2c.h"
#include "lcd1602_pcf8574.h"
#include "DTH11.h"
#define LCD1602
static const char *TAG = "main";
void i2c_task_me(void *arg)
{
int dth11_temperature, dth11_humidty;
char str1[41] = {
'\0'};
int ret;
dt11_init_chip();
#ifdef LCD1602
lcd_init_chip(I2C_EXAMPLE_MASTER_NUM);
isBacklight(1);
#endif
while(1)
{
vTaskDelay(30000 / portTICK_RATE_MS);//wait more than 2s, set 30s.
ret = get_dth_data(&dth11_temperature, &dth11_humidty);
if(!ret)
{
//New Asair's DTH11 has decimals of temperature.
sprintf(str1, "%d.%dC %d%% ",
dth11_temperature/10,abs(dth11_temperature%10), dth11_humidty/10);
#ifdef