目的:

通过温湿度的代码编写,熟悉树莓派中的单总线操作流程。

目录

1、基础知识

1.1、DHT11数字温湿度传感器简介

1.2、DHT11单总线通信协议定义

2、功能实现

2.1、原理图

2.2、代码实现

2.2.1、头文件

2.2.2、宏定义

2.2.3、DHT11初始化函数

2.2.4、DHT11读取一个字节数据

2.2.5、读DHT11取温湿度

2.2.6、主程序

2.3、生成执行程序

2.4、功能实现


1、基础知识

1.1、DHT11数字温湿度传感器简介

DHT11数据手册

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

温湿度传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。

DHT11采用单线制串行接口,信号传输距离可达20米以上,可以用于空调、汽车、气象站等领域。

型号

测量范围

测湿精度

测温精度

分辨力

封装

DHT11

20-90%RH 0-50℃

±5%RH

±2℃

1

4 针单排直插

1.2、DHT11单总线通信协议定义

DHT11中的DATA引脚用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:

  1. 一次完整的数据传输为40bit,高位先出。
  2. 数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和。
  3. 数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。

图 1-2-1 时序图

读取温湿度步骤如下所示:

步骤一:

DHT11上电后(DHT11上电后要等待1S以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时DHT11的DATA数据线由上拉电阻拉高一直保持高电平;此时DHT11的DATA引脚处于输入状态,时刻检测外部信号。

步骤二:

微处理器的I/O设置为输出同时输出低电平,且低电平保持时间不能小于18ms(最大不得超过30ms),然后微处理器的I/O设置为输入状态,由于上拉电阻,微处理器的I/O即DHT11的DATA数据线也随之变高,等待DHT11作出回答信号。发送信号如图1-2-2所示:

图1-2-2 主机发送起始信号

步骤三:

DHT11的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11的DATA引脚处于输出状态,输出83微秒的低电平作为应答信号,紧接着输出87微秒的高电平通知外设准备接收数据,微处理器的I/O此时处于输入状态,检测到I/O有低电平(DHT11回应信号)后,等待87微秒的高电平后的数据接收,发送信号如图1-2-3所示:

图1-2-3 从机响应信号

步骤四:

由DHT11的DATA引脚输出40位数据,微处理器根据I/O电平的变化接收40位数据,位数据“0”的格式为:54微秒的低电平和23-27微秒的高电平,位数据“1”的格式为:54微秒的低电平加68-74微秒的高电平。位数据“0”、“1”格式信号如图1-2-4所示:

图1-2-4 数据位

结束信号:

DHT11的DATA引脚输出40位数据后,继续输出低电平54微秒后转为输入状态,由于上拉电阻随之变为高电平。但DHT11内部重测环境温湿度数据,并记录数据,等待外部信号的到来。

2、功能实现

通过阅读DHT11数据手册,编写温湿度单总线程序,并在终端上打印出当前的温湿度数据。

2.1、原理图

图2-1-1 温湿度原理图

通过接线,接在GPIO28引脚上。

2.2、代码实现

2.2.1、头文件

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

2.2.2、宏定义

#define GPIOPIN 28 ////设置继电器引脚为输出引脚
#define  DHT11_OUT  pinMode(GPIOPIN, OUTPUT)
#define  DHT11_IN  pinMode(GPIOPIN, INPUT)
#define u8 unsigned char

2.2.3、DHT11初始化函数

int dht11_init(void)
{unsigned int t=0;//第一步:拉低20msDHT11_OUT;digitalWrite(GPIOPIN, LOW);delay(20); //延时20毫秒digitalWrite(GPIOPIN, HIGH);delayMicroseconds(30); //延时30微妙DHT11_IN;//第二步:等待拉低while ((digitalRead(GPIOPIN) == HIGH)&&(t<1000)){t++;delayMicroseconds(1);}if(t == 1000){printf("1.拉低错误了\r\n");return -1;}t = 0;//第三步:等待拉高while ((digitalRead(GPIOPIN) == LOW)&&(t<1000)){t++;delayMicroseconds(1);}if(t == 1000){printf("2.拉高错误了\r\n");return -1;}t = 0;//第四步:等待拉低,开始读数据while ((digitalRead(GPIOPIN) == HIGH)&&(t<1000)){t++;delayMicroseconds(1);}if(t == 1000){printf("3.拉低错误了\r\n");return -1;}   t = 0;dht11_read();return 0;
}

2.2.4、DHT11读取一个字节数据

u8 dht11_read_byte(void)
{u8 reader,j,t;t=0;reader = 0;DHT11_IN;for(j=0;j<8;j++){reader = reader <<1;//第四步:等待拉高while ((digitalRead(GPIOPIN) == LOW)&&(t<1000)){t++;delayMicroseconds(1);}if(t == 1000){printf("4.拉高错误了\r\n");return -1;}t = 0;delayMicroseconds(50);if(digitalRead(GPIOPIN) == HIGH)reader |= 0x01;//第五步:等待拉高while ((digitalRead(GPIOPIN) == HIGH)&&(t<1000)){t++;delayMicroseconds(1);}if(t == 1000){printf("5.等待拉低错误\r\n");return -1;}t = 0;}return reader;}

2.2.5、读DHT11取温湿度

void dht11_read(void)
{u8 data[5];u8 j=0;memset(data,0,4);for(j=0;j<5;j++){data[j] = dht11_read_byte();}if(data[4] == (data[0]+data[1]+data[2]+data[3])){printf("H:%d.%d,T:%d.%d\n",data[0],data[1],data[2],data[3]);}else{printf("read error\r\n");}return;
}

2.2.6、主程序

int main(void)
{int ret;//第一步: 初始化wiringPiret = wiringPiSetup(); //编号为0 ,需要在root权限下才能执行if(ret == -1){printf("wiringPiSetup is error\r\n");return ret;}while(1){dht11_init();delay(4000); //读取间隔至少2S中}return 0;
}

2.3、生成执行程序

编译的时候需要添加wiringPi库,编译步骤如下所示:

gcc -Wall -o dht11 dht11.c -lwiringPi

图2-3-1 编译过程

2.4、功能实现

执行程序

./dht11

图2-4-1 温湿度数据

06_基于树莓派wiringPi的温湿度采集实验相关推荐

  1. 基于I2C下的温湿度采集实验

    目录 一.I2C相关了解及介绍 1.基本介绍 2.I2C 物理层 3.I2C 协议层 二.什么是"软件I2C"和"硬件I2C" 1.软件I2C 2.硬件I2C ...

  2. STM32实现基于I2C的AHT20温湿度采集

    STM32实现基于I2C的AHT20温湿度采集 I2C通信协议 软件I2C与 硬件I2C 代码实现 烧录 硬件连接 烧录并运行 参考 I2C通信协议 I2C协议简介 IC( Inter-- Integ ...

  3. 基于stm32的DHT11温湿度采集LCD显示Proteus仿真

    *本设计:* 基于stm32温湿度采集Proteus仿真(仿真+程序) 仿真图protues 8.9 程序编译器:keil 5 编程语言:C语言 *设计编号:C0041* *功能描述:* 通过STM3 ...

  4. zigbee组网实验:温湿度采集实验SHT10

    对应的代码包:https://download.csdn.net/download/mchen_6431/11536608 硬件采用:深联智达公司产品: https://tb.am/ronna Zig ...

  5. 基于I2C/SPI的温湿度采集与OLED显示

    目录 一.温湿度采集 1.了解I2C总线协议 2.实现AHT20采集程序 3.温湿度的OLED(4SPI)显示 二.OLED显示 1.了解SPI(串行外设接口) 2.使用0.96寸OLED显示屏显示数 ...

  6. STM32基于软件模拟IIC进行AHT21B温湿度采集

    STM32基于软件模拟IIC进行AHT21B温湿度采集 一. IIC简介 1.1 IIC简介 1.2 实现方式 1.3 实现方式对比 二. AHT21B简介 2.1 简介 2.2 产品特点 2.3 外 ...

  7. STM32基于I2C温湿度采集

    目录 一.题目要求 二.关于I2C 1.什么IIC 2.IIC的主要特点 3.IIC协议数据传输过程 三.关于DHT20 1.概述 2.引脚参数 四.DHT20温湿度采集 1.程序代码分析 2.实验效 ...

  8. 基于stm32温湿度采集平台开发

    基于stm32温湿度采集平台开发 ==这里记录一下自己以前课设报告,但是论文中图片和文字.公式太多了,懒得粘贴了,需要完整的私信== 摘 要 关键词 第一章 绪论 1.1 研究背景 1.1.1国内研究 ...

  9. 基于I2C的温度采集实验及实验心得

    文章目录 前言:关于I2C总线协议 1.硬件I2C 2.软件I2C 实验:基于12C的温湿度采集 1.实验准备 2. 程序代码 3.实验结果 总结 前言:关于I2C总线协议 在上次的实验里,我们大致了 ...

最新文章

  1. 精通八大排序算法系列:二、堆排序算法
  2. 华清远见智能小车视频服务器,华清远见版世界杯足球对抗赛,智能小车C位出道...
  3. 1.二叉树的中序遍历
  4. linux命令之上传文件和下载文件
  5. c# webservice生成客户端及使用时碰到decimal类型时的特殊处理
  6. 2017中国新型智慧城市创新50强在京发布
  7. openssl rsa密钥
  8. 初学者学python,列表推导到zip()函数,必须会的五种技巧
  9. 创建您自己的.NET DynamicObject 为什么、何时和如何
  10. 深入理解asp.net里的IHttpHandler
  11. 吴昂雄回应Arm中国控制权争夺:Arm罢免我无效
  12. Web前端干货!30道Web前端面试题精选,你会几个?
  13. springboot redis: xxx as a subtype of [simple type, class java.lang.Object]: no such class found
  14. SpringCloud--Netflix Eureka 简介
  15. 9GAG 中用到的 Shimmer 是什么?
  16. 如何用GIS做城市购房选址分析
  17. c语言中-next是什么意思,Java中关于nextInt()、next()和nextLine()的理解
  18. 谷歌浏览器设置启动页被hao123劫持_win10系统打开chrome会被hao123劫持怎么办?解决方案...
  19. 哈工大软件过程与工具复习5——第9讲 软件设计
  20. EXCEL文件打开缓慢的问题解决

热门文章

  1. 最实用的使用idea看源码的技巧
  2. Spring框架学习,day02
  3. 安装docker报错:Error: Unknown command: cask
  4. java计算机毕业设计某山区环境保护监督管理平台源程序+mysql+系统+lw文档+远程调试
  5. 什么是docx,pptx等的正确MIME类型?
  6. git 进阶系列教程-------git使用流程
  7. SparkSession
  8. 20162316刘诚昊 第五周作业
  9. 计算机的清屏,计算机清屏键是什么
  10. iOS 下一维码与二维码识别相关资料