这里使用的检测器件是DHT11,属单总线器件,是含有已校准数字信号输出的温湿度复合传感器,它有三个引脚,即VCC(3.3-5V)、GND及DATA。
其中,DATA 引脚用于微控器与 DHT11之间的通讯和同步,一次通讯时间约为4ms左右,数据分为u小数部分和整数部分,其小数部分用于以后扩展,其读取值为零。
DHT11的操作流程为:
一次完整的数据传输有40bit,高位在前。其数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。
在连接方面,是使用开发板的GPIO10与传感器的DATA引脚相连。检测结果的显示是通过I2C接口的OLED屏,其使用的引脚是GPIO6和GPIO7,整体的连接整体如图1所示。

图1 连接整体
温湿度检测的程序是在Arduino IDE下编写,用于使用了相应的库作支持,因此其程序非常精炼,具体的内容为:
#include <DFRobot_DHT11.h>
DFRobot_DHT11 DHT;
#define DHT11_PIN 10
void setup(){
Serial.begin(115200);
}
void loop(){
DHT.read(DHT11_PIN);
Serial.print("temp:");
Serial.print(DHT.temperature);
Serial.print(" humi:");
Serial.println(DHT.humidity);
delay(1000);
}经程序的上传,可通过串口来观察其结果,见图2所示。

图2 检测结果
在使用OLED屏的情况下,其程序为:
#include <Wire.h>
#include "SSD1306Wire.h"
#include "images.h"
SSD1306Wire display(0x3c, 6, 7);
#include <DFRobot_DHT11.h>
DFRobot_DHT11 DHT;
#define DHT11_PIN 10
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
display.init();
display.flipScreenVertically();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_16);
}
void loop() {
int w,s;
display.clear();
DHT.read(DHT11_PIN);
Serial.print("temp:");
Serial.print(DHT.temperature);
Serial.print(" humi:");
w=DHT.temperature;
Serial.println(DHT.humidity);
s=DHT.humidity;
display.drawString(10, 0, "DHT11 test");
display.drawString(10, 20, "tem= C");
display.drawString(10, 40, "hum= %");
display.drawString(50, 20, String(w));
display.drawString(50, 40, String(s));
display.display();
delay(1000);
}经程序的上传,即可观察到图1所示的效果,其结果还是比较不错的。
我要赚赏金
