【安信可BW16-Kit开发板】DHT11应用
按照安信可BW16-Kit开发板官方介绍,此款开发版支持Linux、Arduino IDE、Python开发环境。Linux、Arduino IDE开发环境搭建已经有很多文章介绍,这里就不在赘述。本文重点介绍Python开发环境搭建及程序烧录。
一、DHT11介绍
DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个 8 位单片机控制一个电阻式感湿元件和一个 NTC 测温元件。其温度测量范围为 0~50℃,误差在±2℃;湿度的测量范围为 20%~90%RH,误差在±5%RH。DHT11 电路很简单,只需要将 DATA 引脚连接单片机的一个 I/O 即可,不过该引脚需要上拉一个 5K 的电阻,DHT11 的供电电压为 3~5.5V。
1、DHT11引脚说明
pin
|
名称
|
注释
|
1
|
VDD
|
供电3~5V
|
2
|
DATA
|
串行数据,单总线
|
3
|
NC
|
空脚
|
4
|
GND
|
接地,电源负极
|
2、传感器性能参数
参数
|
条件
|
Min
|
Type
|
Max
|
单位
|
湿度
|
分辨率
|
|
1
|
1
|
1
|
%RH
|
|
|
8
|
|
Bit
|
重复性
|
|
|
±1
|
|
%RH
|
精度
|
25℃
|
|
±4
|
|
%RH
|
0~25℃
|
|
|
±5
|
%RH
|
互换性
|
可完全互换
|
量程范围
|
0℃
|
30
|
|
90
|
%RH
|
25℃
|
20
|
|
90
|
%RH
|
50℃
|
20
|
|
80
|
%RH
|
响应时间
|
1/e(63%)25℃,
1m/s空气
|
6
|
10
|
15
|
S
|
迟滞
|
|
|
±1
|
|
%RH
|
长期稳定性
|
典型值
|
|
±1
|
|
%RH/yr
|
温度
|
|
分辨率
|
|
1
|
1
|
1
|
℃
|
|
8
|
8
|
8
|
Bit
|
重复性
|
|
|
±1
|
|
℃
|
精度
|
|
±1
|
|
±2
|
℃
|
量程范围
|
|
0
|
|
50
|
℃
|
响应时间
|
1/e(63%)
|
6
|
|
30
|
S
|
3、接口说明
建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻。DHT11的供电电压为3-5.5V。传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF的电容,用以去耦滤波。
4、MCU连接示意图
5、串行接口(单线双向)
DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零。操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和
数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号。主机发送开始信号结束后,延时等待20-40us后,读取DHT11的响应信号,主机发送开始信号后,可以切换到输入模式,或者输出高电平均可,总线由上拉电阻拉高。
二、运行范例
1、Arduino环境下程序如下
#include "DHT.h"
#define DHTPIN 8
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(t, h, false);
Serial.print(F("Temperature: "));
Serial.print(hic);
Serial.print(F(" ℃ "));
Serial.print(F("Humidity: "));
Serial.print(hif);
Serial.println(F(" ℉"));
}
2、运行结果
显示运行结果如下:
三、总结
从上面示例我们可以看出,在Arduino环境下可以很容易对安可信BW16-Kit进行二次开发。