Arduino+DHT11温湿度传感器+12864oled显示温湿度

本文利用arduino uno时时读取DHT11温湿度传感器的温度和湿度值,并将读取到的数值显示在OLED12864上。

元器件: arduino板

OLED12864显示屏

DHT11温湿度传感器

库文件: <U8g2lib.h> 此库是用于12864oled显示屏用

<dht11.h> 此库是DHT11温湿度传感器库文件

一、安装U8g2lib库

1.打开Arduino IDE软件,标题栏找到项目>加载库>管理库,点击打开。

2.打开库管理器之后,等待文件加载完毕,在搜索框内输入u8g2,找到u8g2库文件并完成安装。

二、安装dht11库 

dht11库文件安装参考太极创客网站安装方法:

三、元器件及接线方法

        1.DHT11引脚图及定义 

VDD 接电源正极,3.3V~5V DATA 数据引脚,接开发版数字引脚 NC 空脚 GND 接电源负极(必须与开发板共负极)

         2.oled12864引脚及定义              

本文中使用的是以SH1106为控制器的4SPI接口的12864显示屏。

GND 接电源负极 VDD 接电源正极5V SCK 时钟线 SDA 数据线 RES 复位线 DC 数据/命令 CS 片选信号线

        3.本文元器件接线方法

Arduino DHT11 12864OLED 5V脚 VCC VCC GND GND GND 8脚 DATA 9脚 DC 10脚 CS 11脚 SDA 13脚 SCK REST REST

四、程序

//此程序中loop函数中的DHT11测试程序引用自太极创客网站:
//http://www.taichi-maker.com/homepage/reference-index/arduino-sensor-index/arduino-dht11-temperature-sensor/

#include <U8g2lib.h>
#include <dht11.h>

//创建12864OLED初始化构造器
U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9);

dht11 DHT11; //创建DHT11对象
 
#define DHT11PIN 8  //将arduino 8脚作为温湿度数据输入脚
float H=0;          //湿度存储
float T=0;          //温度存储

void setup(void) {
  u8g2.begin();     //初始化u8g2库
  u8g2.enableUTF8Print();   //启用UTF8打印

  Serial.begin(9600);     //启用串口通讯
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
}

void loop(void) {
  Serial.println("
");
 
  int chk = DHT11.read(DHT11PIN);
 
  Serial.print("Read sensor: ");
  switch (chk)
  {
    case DHTLIB_OK: 
                Serial.println("OK"); 
                break;
    case DHTLIB_ERROR_CHECKSUM: 
                Serial.println("Checksum error"); 
                break;
    case DHTLIB_ERROR_TIMEOUT: 
                Serial.println("Time out error"); 
                break;
    default: 
                Serial.println("Unknown error"); 
                break;
  }
  
  H=DHT11.humidity;         //读取湿度值
  T=DHT11.temperature;      //读取温度值
  Serial.println(H);
  Serial.println(T);
  
  u8g2.clearBuffer();       // 清除内部缓冲区
  drawDHT11(H,T);           //调用函数将温湿度值显示在12864OLED上
  u8g2.sendBuffer();          
  delay(1000);  
}
void drawDHT11(float H,float T){
  u8g2.setFont(u8g2_font_unifont_t_chinese2); 
  u8g2.drawStr(0,20,"Temp: ");
  u8g2.setCursor(40, 20);
  u8g2.print(T);  // 
  u8g2.setCursor(80, 20);
  u8g2.print(" *C");
  u8g2.drawStr(0,40,"Humi: ");
  u8g2.setCursor(40, 40);
  u8g2.print(H);
  u8g2.setCursor(80, 40);
  u8g2.print(" %");
}

五、最终实物图

经验分享 程序员 微信小程序 职场和发展