利用DHT11温湿度传感器与OLED显示屏构建环境监测系统

利用DHT11温湿度传感器与OLED显示屏构建环境监测系统

在今天的文章中,我们将探索如何使用Arduino平台,结合DHT11温湿度传感器和OLED显示屏(具体型号为SSD1306),来创建一个简易的环境监测装置。此装置能够实时显示当前环境的温度和湿度,非常适合于家庭、办公室或小型温室等场所的环境监控。

准备材料

Arduino开发板(如Arduino Uno)
DHT11温湿度传感器
SSD1315 OLED显示屏(本例中使用的是0.96寸,四针IIC驱动)
跳线若干

硬件连接

DHT11连接:将DHT11的数据引脚连接到Arduino的数字引脚2上。同时,确保DHT11的VCC连接到5V,GND连接到GND。
OLED显示屏连接:对于SSD1306 OLED屏,使用I2C接口与Arduino Uno相连。通常,OLED的SCL针脚连接到Arduino的A5,SDA针脚连接到A4,VCC连接到5V,GND连接到GND。

软件配置

库文件引入
为了简化编程,我们使用了几个外部库:

DHT.h:用于与DHT系列温湿度传感器通信。
Wire.h:I2C通信库,用于与OLED显示屏通信。
Adafruit_GFX.h 和 Adafruit_SSD1306.h:这两个库支持Adafruit的OLED显示屏图形操作。

代码解析

定义引脚和常量

#define DHTPIN 2      // DHT11数据引脚连接至数字2
#define DHTTYPE DHT11 // 使用的DHT型号为DHT11
#define SCREEN_WIDTH 128 // OLED屏幕宽度
#define SCREEN_HEIGHT 64 // OLED屏幕高度
#define OLED_RESET -1    // OLED无需复位引脚,设为-1

初始化对象

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // OLED显示屏初始化
DHT dht(DHTPIN, DHTTYPE); // DHT11传感器初始化

设置函数
在setup()函数中,我们初始化串行通信、OLED显示屏,并启动DHT11传感器。

void setup() {
    
    
  Serial.begin(9600);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    
     // OLED初始化检查
    Serial.println("SSD1306初始化失败!");
    while (true);
  }
  dht.begin();
}

主循环
loop()函数每隔2秒读取一次DHT11的温湿度数据,并在OLED显示屏上实时更新这些信息。

void loop() {
    
    
  delay(2000);
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  display.clearDisplay(); // 清除屏幕
  display.setTextSize(1); // 设置字体大小
  display.setTextColor(SSD1306_WHITE); // 文字颜色为白色
  display.setCursor(0, 0); // 设置打印起点

  // 打印湿度和温度
  display.print("humidity: ");
  display.print(humidity);
  display.println("%");
  display.print("temperature: ");
  display.print(temperature);
  display.println("°C");

  display.display(); // 更新显示
}

总结

通过以上步骤,我们成功构建了一个基于Arduino的温湿度监测系统,它能够实时地在OLED显示屏上展示当前环境的温湿度信息。此项目不仅加深了对传感器、显示屏控制以及数据处理的理解,而且提供了实用的环境监测解决方案,适合于各种DIY爱好者和初学者尝试。希望这篇文章能激发你对电子制作的兴趣,并开启更多创意项目的探索之旅!

#include <DHT.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define DHTPIN 2      // 这里是DHT11数据引脚
#define DHTTYPE DHT11 // 指定使用的DHT型号

#define SCREEN_WIDTH 128 // OLED宽度
#define SCREEN_HEIGHT 64 // OLED高度
#define OLED_RESET -1    // 这里不需要RESET引脚,设置为-1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

DHT dht(DHTPIN, DHTTYPE);

void setup() {
    
    
  Serial.begin(9600);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    
    
    Serial.println(F("SSD1306初始化失败!"));
    for (;;)
      ;
  }

  dht.begin();
}

void loop() {
    
    
  delay(2000); // 等待2秒钟

  float humidity = dht.readHumidity(); // 读取湿度
  float temperature = dht.readTemperature(); // 读取温度

  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.print("humidity: ");
  display.print(humidity);
  display.println("%");

  display.print("temperature: ");
  display.print(temperature);
  display.println("'C");

  display.display();
}

每日"大饼":
真正的成功,不在于战胜多少人,而在于提升自己的能力和表现,超越昨日的自己

扫描二维码关注公众号,回复: 17492207 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_52051554/article/details/138292933