在Arduino Uno R3实验板上连接1个DHT11温湿度传感器、 1个DS1307实时钟模块和1个128x64的OLED显示屏模块,通过软件编程实现功能: 在OLED显示屏上显示出当前的年/月/日、时/分/秒及星期几; 同屏显示出当前检测到的温湿度值
时间: 2024-11-20 17:41:58 浏览: 19
在Arduino Uno R3实验板上连接DHT11温湿度传感器、DS1307实时时钟模块和128x64 OLED显示屏,可以按照以下步骤进行硬件接线并编写程序:
**硬件连接**:
1. DHT11传感器的信号连接:数据线(D)连接到数字Pin 2,电源线(Vcc)连接到5V,接地线(GND)连接到GND。
2. DS1307模块通常需要一个I2C通信接口,SCL(时钟)连接到A4 (数字Pin 5),SDA(数据)连接到A5 (数字Pin 4)。还需要一个拉电阻将VCC接到5V。
3. OLED显示屏的数据线(SDA)连接到A5,时钟线(SCL)连接到A4,VSS连接到GND,VDD连接到5V,CE连接到数字Pin 12。
**软件编程**:
1. 首先,安装必要的库。对于DHT11传感器,你可以使用`Adafruit_DHT`库; 对于DS1307,可以使用`Wire`库处理I2C通信; 对于OLED显示屏,可以使用`Adafruit_SSD1306`库。
```cpp
#include <Adafruit_SSD1306.h>
#include <Adafruit_DHT.h>
#include <Wire.h>
// OLED屏幕配置
#define SSD1306_WIDTH 128
#define SSD1306_HEIGHT 64
Adafruit_SSD1306 display(SSD1306_I2C, SDA, SCL);
// DHT11传感器配置
const int DHT_PIN = 2;
// 实时时钟模块
DS1307 ds1307;
void setup() {
// 初始化显示屏
display.begin(SSD1306_I2C);
// 初始化DHT11传感器
dht11.begin(DHT_PIN);
}
void loop() {
// 从DHT11读取数据
float humidity, temperature;
int error = dht11.read(&humidity, &temperature);
if (error == DHT_OK) {
// 温湿度数据显示
String tempStr = String(temperature) + "℃";
String humiStr = String(humidity) + "%";
// 获取当前日期和时间
struct tm timeStruct;
ds1307.now(timeStruct);
char dateStr[16];
asctime_r(&timeStruct, dateStr);
// 显示到OLED屏幕上
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.println(dateStr);
display.setCursor(0, 8);
display.print("Time:");
display.setCursor(9, 8);
display.print(String(hour(timeStruct)) + ":" + String(minute(timeStruct)));
display.setCursor(0, 16);
display.println(tempStr + " " + humiStr);
display.display();
} else {
Serial.println("Failed to read from DHT sensor");
}
}
```
阅读全文