用Arduino结合OLED、DHT11测量温湿度

用Arduino结合OLED、DHT11测量温湿度

1.项目起因

最近买了一块温湿度传感器DHT11,想着结合之前买的OLED屏幕和arduino nano 单片机来搭建一个将温湿度传感器DHT11测量到的数据,通过arduino处理后,在OLED屏幕上显示出来,得到一个即时温湿度显示的效果。

2.硬件准备

arduino单片机1
DHT11温湿度传感器
1
OLED屏幕1
面包板
1
杜邦线若干

3.硬件连接

本人使用的OLED屏幕分别有4个引脚,GND、VCC、SCL、SDA,分别接到单片机的GND、5V、A5、A4四个引脚上。温湿度传感器DHT11有3个引脚,VCC、DAT、GND,分别接到单片机的3V3、D10、GND三个引脚上。

单片机通电,下面是软件部分,注入灵魂。

4.软件部分

先贴上项目完整代码,已验证可行。

#include <DFRobot_DHT11.h>
#include "U8glib.h"
#define DHT11_PIN 10//设置D10引脚为DHT11数据采集端
DFRobot_DHT11 DHT;
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

void draw(void) {
u8g.setFont(u8g_font_unifont);//设置在OLED屏幕显示的字体
u8g.drawStr( 40, 12, "Welcome!");

u8g.drawStr( 20, 30, "temp:");
u8g.setPrintPos(60,30);
u8g.print(DHT.temperature);//显示温度
u8g.drawStr( 80, 30, "C");
u8g.drawPixel(78,20);

u8g.drawStr( 20, 50, "humi:");
u8g.setPrintPos(60,50);
u8g.print(DHT.humidity);//显示湿度
u8g.drawStr( 80, 50, "%");

}

void setup(){
  Serial.begin(115200);//串口调试的波特率为115200
   if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void loop(){
  DHT.read(DHT11_PIN);
  Serial.print("temp:");
  Serial.print(DHT.temperature);//串口显示温度
  Serial.print("  humi:");
  Serial.println(DHT.humidity);//串口显示湿度
  delay(1000);
  u8g.firstPage();  
  do {
    draw();//在OLED屏幕上显示
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(50);
}

首先说明:
Arduino代码主要分为两个部分,void setup(),void loop()。
void setup()是Arduino运行初的初始设置,只在程序一开始执行一遍。
void loop()是Arduino循环执行的部分。

本项目中需要用到DHT11和OLED屏幕,所以需要用到"DFRobot_DHT11.h"和"U8glib.h"这两个库文件。

注意:DHT.read(DHT11_PIN)这条语句最好放在loop()循环中,循环一次,收集一次数据。不要放入draw()函数中,会反复出现初始值(225),怀疑是每次在draw()函数中DHT11模块要重启一次,然后直接将初始值显示出来了。放到draw()函数外面则功能正常。

具体代码解释已在注释中注明,有疑惑或者错误欢迎私信。

5.最终效果请添加图片描述

6.改进计划

后面有时间可以画好PCB,将器件焊接上去,3D打印外壳,做成可以日常使用的物品。

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值