问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用Arduino Uno、DHT11和0.96寸OLED显示温湿度数据

创作时间:
作者:
@小白创作中心

使用Arduino Uno、DHT11和0.96寸OLED显示温湿度数据

引用
CSDN
1.
https://m.blog.csdn.net/2301_78925693/article/details/145160812

在物联网和智能家居项目中,显示环境的温湿度是一个常见的需求。今天,我们将通过一个简单的项目,使用Arduino Uno、DHT11温湿度传感器和0.96寸OLED显示屏来实现这一功能。这个项目不仅适合初学者,还能为更复杂的项目提供基础。

硬件连接

DHT11 温湿度传感器

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • DATA 连接到 Arduino Uno 的 D2 引脚。

0.96 寸 OLED 显示屏(I2C)

  • VCC 连接到 Arduino Uno 的 5V 引脚。
  • GND 连接到 Arduino Uno 的 GND 引脚。
  • SCL 连接到 Arduino Uno 的 A5 引脚。
  • SDA 连接到 Arduino Uno 的 A4 引脚。

软件准备

在开始编程之前,确保已经安装了以下库:

  • Adafruit GFX Library
  • Adafruit SSD1306 Library
  • DHT Library

可以通过 Arduino IDE 的“库管理器”安装这些库:

  1. 打开 Arduino IDE,点击“草图”->“包含库”->“管理库...”。
  2. 在库管理器中搜索并安装 Adafruit GFX Library、Adafruit SSD1306 Library 和 DHT Library。

代码实现

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

// OLED显示屏设置
#define SCREEN_WIDTH 128 // OLED显示宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED显示高度,以像素为单位

// 创建SSD1306显示对象
#define OLED_RESET -1 // 重置引脚(不适用时使用-1)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// DHT11设置
#define DHTPIN 2     // DHT传感器数据引脚连接到Arduino的数字引脚2
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  // 初始化串口通信,以便在串行监视器中查看输出(可选)
  Serial.begin(9600);
  
  // 初始化DHT11传感器
  dht.begin();
  
  // 初始化OLED显示屏
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 0x3C是大多数0.96" OLED的默认I2C地址
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // 停止执行
  }
  
  // 清空显示屏
  display.clearDisplay();
  
  // 设置文本大小(可选)
  display.setTextSize(1);
  
  // 设置文本颜色(白色)
  display.setTextColor(SSD1306_WHITE);
  
  // 设置光标位置
  display.setCursor(0,0);
  
  // 显示一些初始文本(可选)
  display.println(F("DHT11 Test!"));
  
  // 更新显示屏
  display.display();
}

void loop() {
  // 等待传感器稳定
  delay(2000);
  
  // 读取温度和湿度数据
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  
  // 检查是否读取失败,有时传感器需要更长时间来稳定
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  
  // 清空显示屏
  display.clearDisplay();
  
  // 设置光标位置
  display.setCursor(0,0);
  
  // 显示温度和湿度数据
  display.print(F("Temp: "));
  display.print(temperature);
  display.print(F(" *C       Humidity: "));
  display.print(humidity);
  display.println(F("%"));
  
  // 更新显示屏
  display.display();
  
  // 等待一段时间再读取下一次数据
  delay(2000);
}

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号