1.概述:
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
2.精确度高
DHT11与ds18b20传感器一样,在时序方面有的严格的要求,在读时序和写时序对延时时间必须在严格的范围内。
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度20-90%RH, 温度0~50℃。
DHT11利用单总线协议,因此有严格的时序。
主机先要发送一个至少18ms的低电平,在这个过程中,DHT11内部完成AD转换等操作,当主机拉高后,有20-40us时间,这个时间用于主机做输入输出切换,当主机释放总线控制权(此时主机为输入状态,总线被上拉电阻拉高),DHT11尝试将总线拉低,成功拉低后就开始准备发送数据了,再拉高一次就开始传输数据了。

 **3.接线**vcc->3v3,GND->GND,数据线out->P0.7

4.源码如下:
Init.c一些串口配置的初始化内容

#include "init.h"
#define uint unsigned int
#define uchar unsigned char// 串口初始化函数
void InitUart()
{CLKCONCMD &= ~0x40;      // 设置系统时钟源为 32MHZ晶振while(CLKCONSTA & 0x40); // 等待晶振稳定 CLKCONCMD &= ~0x47;      // 设置系统主时钟频率为 32MHZPERCFG = 0x00;           //位置1 P0口 P0SEL = 0x0c;            //P0_2,P0_3,P0_4,P0_5用作串口,第二功能 P2DIR &= ~0xC0;          //P0 优先作为UART0 ,优先级U0CSR |= 0x80;           //UART 方式 U0GCR |= 11;             //U0GCR与U0BAUD配合     U0BAUD |= 216;           // 波特率设为115200 UTX0IF = 0;              //UART0 TX 中断标志初始置位0 }void UartSendString(char *Data, int len)//串口发送函数
{uint i;for(i=0;i<len;i++){U0DBUF = *Data++;while(UTX0IF == 0);UTX0IF = 0;}
}//下面是头文件的一些函数声明
#include <ioCC2530.h>void InitClock(void);
void InitSensor(void);
void InitUart(void);//串口的初始化函数
void UartSendString(char *Data, int len);

DHT11.c

#include <ioCC2530.h>
#include "DHT11.h"#define DATA_PIN P0_7
//温湿度定义
uchar ucharFLAG,uchartemp;
uchar shidu,wendu;
uchar ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,ucharcheckdata;
uchar ucharT_data_H_temp,ucharT_data_L_temp,ucharRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;
uchar ucharcomdata;//延时函数
void Delay_us() //1 us延时
{asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");    asm("nop");asm("nop");asm("nop");    asm("nop");
}void Delay_10us() //10 us延时
{#if 0  Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();Delay_us();  #elseint i = 10;while(i--);
#endif
}void Delay_ms(uint Time)//n ms延时
{unsigned char i;while(Time--){for(i=0;i<100;i++)Delay_10us();}
}//温湿度传感
void COM(void)    // 温湿写入
{     uchar i;      for(i=0;i<8;i++){ucharFLAG=2;while((!DATA_PIN)&&ucharFLAG++);Delay_10us();Delay_10us();Delay_10us();uchartemp=0;if(DATA_PIN)uchartemp=1;ucharFLAG=2;while((DATA_PIN)&&ucharFLAG++);if(ucharFLAG==1)break;ucharcomdata<<=1;ucharcomdata|=uchartemp;}
}void DHT11(void)   //温湿传感启动
{DATA_PIN=0;Delay_ms(20);  //>18MSDATA_PIN=1;P0DIR &= ~0x80; //重新配置IO口方向Delay_10us();Delay_10us(); Delay_10us();Delay_10us();if(!DATA_PIN)//如果if中进不去问题一:程序一直进不来,原因可能在延时函数中没有精确{ucharFLAG=2;while((!DATA_PIN)&&ucharFLAG++);ucharFLAG=2;while((DATA_PIN)&&ucharFLAG++);COM();ucharRH_data_H_temp=ucharcomdata;COM();ucharRH_data_L_temp=ucharcomdata;COM();ucharT_data_H_temp=ucharcomdata;COM();ucharT_data_L_temp=ucharcomdata;COM();ucharcheckdata_temp=ucharcomdata;DATA_PIN=1;uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);//检验if(uchartemp==ucharcheckdata_temp){ucharRH_data_H=ucharRH_data_H_temp;ucharRH_data_L=ucharRH_data_L_temp;ucharT_data_H=ucharT_data_H_temp;ucharT_data_L=ucharT_data_L_temp;ucharcheckdata=ucharcheckdata_temp;}wendu=ucharT_data_H;shidu=ucharRH_data_H;}else //没用成功读取,返回0{wendu=21;shidu=15;}P0DIR |= 0x80; //IO口需要重新配置
}//头文件
#include <ioCC2530.h>typedef unsigned char uchar;
typedef unsigned int  uint;extern void Delay_ms(unsigned int xms);  //延时函数
extern void COM(void);                  // 温湿写入
extern void DHT11(void);                //温湿传感启动extern uchar wendu,shidu;//定义程外部文件可以访问的变量,就不用再主函数中在重复定义

主函数:

#include <ioCC2530.h>
#include <string.h>
#include "DHT11.h"
#include "init.h"
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define SIZE 40
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr)[0])#define String "Temp  Alarm!\r\n"
#define String1 "Humi  Alarm!\r\n"char strTemp[SIZE];
char str[1] = "%";
void DelayMS(uint msec)//1毫米延时
{ uint i,j; for (i=0; i<msec; i++) for (j=0; j<535; j++);
}void main()
{DelayMS(1000);//InitClock();InitUart();P0SEL &= 0x7f;while(1){memset(strTemp, 0, ARRAY_SIZE(strTemp));DHT11();sprintf(strTemp,"DHT11-Temperature: %02d\r\n",(uint)wendu);UartSendString(strTemp, sizeof(strTemp));DelayMS(500);if((uint)wendu>28){UartSendString(String,sizeof(String));}DelayMS(1000);memset(strTemp, 0, ARRAY_SIZE(strTemp));sprintf(strTemp,"DHT11-Humidity: %02d%c\r\n",(uint)shidu,str[0]);UartSendString(strTemp, sizeof(strTemp));DelayMS(500);if((uint)shidu>24){UartSendString(String1,sizeof(String1));}DelayMS(2000);}
}

最后串口打印出来的结果

注:如果有更好的方法欢饮在评论区分享!!!!

基于cc2530获取DHT11的温湿度数据相关推荐

  1. 基于cc2530获取ds18b20温度值

    @基于CC2530单片机获取温度传感器 基于CC2530单片机获取温度传感器 cc2530单片机是目前Ztack主流的一款产品,它与普通51的单片机不同于需要对各个IO口配置比如(设置io口的方向或输 ...

  2. STM32使用IIC总线通讯协议在OLED屏幕上显示字符串、汉字、单总线获取DHT11模块温湿度并通过IIC显示到屏幕(软件IIC)

    参考:基于stm32软件IIC的oled显示温湿度 作者:ZPZ DayUp 发布时间: 2021-07-25 20:52:43 网址:https://blog.csdn.net/m0_5619768 ...

  3. 基于CC2530的zIgbee传感器无线数据采集系统开发(部分关键源码)

    这是本人的一个小项目,分享给大家,有什么错误的地方,还请大家指导(完整的工程文件已经上传到资源了) 工程的数据包格式为: |--|--|-----,------,-----|------------- ...

  4. 基于C51的DHT11(温湿度传感器)编程(详解)

    前言 当你点进看这篇博客时,相信对DHT11产品的概述与特性没有任何兴趣,所以跳过那部分,直接上技术活. 1.温湿度如何采集 根据产品说明文档:用户MCU发送一次开始信号后,DHT11从低功耗模式转换 ...

  5. Arduino从DHT11读取温湿度数据并显示在1602LCD

    硬件清单 Arduino NANO 1602LCD + PCF8574T模块 YL-47 DHT11模块 连线 1. 连接LCD: PCF8574T模块4pin(Gnd, Vcc, SDA i2c数据 ...

  6. 基于python获取雅虎金融股票数据及相关可视化操作

    @TOC 基于python3实现 1.获取数据 1.1单只股票 (1)加载所需的包 import pandas as pd import pandas_datareader.data as web i ...

  7. STM32串口显示DHT11温湿度数据,YL-69土壤湿度

    用的控制器是STM32F103C8T6,如果你用STMF103的其他芯片来跑这个代码也能跑通,基本配置都是一样的. 先介绍DHT11温湿度数据的采集,有两个文件,一个DHT11.c,还有一个DHT11 ...

  8. 正点原子STM32f103ZE精英开发板实现基于ESP8266 WIFI模块温湿度数据上传至乐联网平台

    文章目录 一.准备工作 二.实现流程 1.AT指令 2.接入乐联网平台 3.代码实现 三.数据可视化分析 一.准备工作 1.准备一块正点原子STM32f103ZE精英开发板 2.在某宝上购买好正点原子 ...

  9. Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...

最新文章

  1. 11kw星三角启动延时几秒_电机星三角降压启动接线方法图解
  2. 非平衡数据集的机器学习常用处理方法
  3. 【docker教程】docker视频教程(ubuntu)数据卷挂载、数据卷容器volume、端口映射(镜像叠加,分层复用)rootfs、bootfs(没看完)
  4. P2290-[HNOI2004]树的计数【组合数,Prufer序列】
  5. 【SQL Sever】将SQL Sever中的一个数据表的数据导出为insert语句
  6. 纯css实现给图片加标签
  7. C语言编写的爱心代码
  8. 基于KELI5 新建一个STM32 project流程
  9. 小程序ios android差异,解决小程序textarea在安卓和ios上padding不一的问题
  10. php import mdf,excel表格怎么导入数据库数据格式转换-已有excel表格导入sql server生成*.mdf *.ldf文件......
  11. 【2020版】Basic4Android安装配置指南
  12. 做空机构为什么合法,股票做空机构gmt如何达成盈利目标
  13. 如何将Excel表格进行美化?学会这几招你的表格将不会那么难看
  14. PDF所有目录的页码全部变为“错误!未定义书签!”
  15. oracle 虚拟机安装mac os,【Mac OS X 详细安裝教程图解之虚拟机安装】-Oracle论坛-ZOL中关村在线...
  16. MI200e电力线通讯
  17. KSM(Kernel samepage merging)
  18. 尝试 对网游私人服务器架设的一些接触
  19. 全国计算机等级考试二级 Python 语言程序设计考试大纲(2022年版)
  20. OSDI 2021 VEGITO 论文阅读

热门文章

  1. python去噪算法_Python实现图像去噪方式(中值去噪和均值去噪)
  2. 【深度学习】小白学深度学习:参数优化与优化器原理
  3. 很不错的一款软件--护眼精灵
  4. 植物大战僵尸变态辅助开发系列教程(E语言实现和VC6实现)(下)
  5. 数据库设计------(数据库设计基本概念)、需求分析(数据字典)
  6. 数理方程与特殊函数|波动方程:弦的横振动方程
  7. Web前端大作业制作个人网页(html+css+javascript)
  8. 贰零壹壹,壹壹,壹柒
  9. 程序员应该懂的九件事
  10. 2017.10.12 记者招待会