项目简介
使用ESP32C6微控制器,配合0.96寸OLED显示屏和DHT11温湿度传感器,实现实时温湿度监测和显示。屏幕第一行显示"iCEasy"标识,界面简洁实用。
硬件清单
| 组件名称 | 规格说明 | 数量 |
|---------|---------|------|
| ESP32C6-WROOM-1 | 开发板 | 1 |
| OLED显示屏 | 0.96寸 128x64 IIC | 1 |
| DHT11传感器 | 温湿度传感器模块 | 1 |
| 杜邦线 | 若干 | - |
接线说明
1.OLED显示屏(IIC):
| OLED引脚 | ESP32C6引脚 |
|----------|-------------|
| VCC | 3.3V |
| GND | GND |
| SCL | GPIO6 |
| SDA | GPIO7 |
2.DHT11传感器:
| DHT11引脚 | ESP32C6引脚 |
|-----------|-------------|
| VCC | 3.3V |
| GND | GND |
| DAT | GPIO10 |
库安装
在Arduino IDE的库管理器中安装:
1. Adafruit SSD1306
2. Adafruit GFX Library
3. DHT sensor library by Adafruit
4. Adafruit Unified Sensor
完整代码
```cpp
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// OLED显示屏配置
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
// IIC引脚定义
#define SDA_PIN 7
#define SCL_PIN 6
// DHT11引脚定义
#define DHTPIN 10
#define DHTTYPE DHT11
// 创建对象
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// 初始化IIC
Wire.begin(SDA_PIN, SCL_PIN);
// 初始化OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// 清空屏幕
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// 显示启动画面
display.setTextSize(2);
display.setCursor(20, 20);
display.println(F("iCEasy"));
display.setTextSize(1);
display.setCursor(10, 45);
display.println(F("Initializing..."));
display.display();
// 初始化DHT11
dht.begin();
delay(2000);
Serial.println(F("System Ready!"));
}
void loop() {
// 读取温湿度数据
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// 检查读取是否成功
if (isnan(humidity) || isnan(temperature)) {
Serial.println(F("Failed to read from DHT sensor!"));
displayError();
delay(2000);
return;
}
// 串口输出
Serial.print(F("Temperature: "));
Serial.print(temperature);
Serial.print(F("°C Humidity: "));
Serial.print(humidity);
Serial.println(F("%"));
// 显示在OLED上
displayData(temperature, humidity);
delay(2000); // 每2秒更新一次
}
void displayData(float temp, float humi) {
display.clearDisplay();
// 第一行:显示iCEasy标题
display.setTextSize(1);
display.setCursor(0, 0);
display.println(F("===== iCEasy ====="));
// 显示分割线
display.drawLine(0, 12, 128, 12, SSD1306_WHITE);
// 显示温度
display.setTextSize(1);
display.setCursor(0, 20);
display.print(F("Temperature:"));
display.setTextSize(2);
display.setCursor(10, 32);
display.print(temp, 1);
display.setTextSize(1);
display.setCursor(70, 35);
display.print(F("'C"));
// 显示湿度
display.setTextSize(1);
display.setCursor(0, 50);
display.print(F("Humidity:"));
display.setTextSize(1);
display.setCursor(70, 50);
display.print(humi, 1);
display.print(F("%"));
display.display();
}
void displayError() {
display.clearDisplay();
// 第一行:显示iCEasy标题
display.setTextSize(1);
display.setCursor(0, 0);
display.println(F("===== iCEasy ====="));
display.drawLine(0, 12, 128, 12, SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(15, 30);
display.println(F("Sensor Error!"));
display.setCursor(10, 45);
display.println(F("Check DHT11..."));
display.display();
}
使用说明
1. 按接线图连接硬件
2. 在Arduino IDE中选择开发板:ESP32C6 Dev Module
3. 安装所需库文件
4. 上传代码到ESP32C6
5. 屏幕会先显示"iCEasy Initializing...",2秒后显示温湿度数据
6. 打开串口监视器(115200波特率)可查看实时数据
常见问题
1.OLED无显示
解决方案:
检查IIC地址(尝试改为0x3D)
确认接线:SCL→GPIO6,SDA→GPIO7
2.DHT11读取失败
解决方案:
检查接线:DAT→GPIO10
确认供电正常(3.3V)
DHT11模块可能损坏,尝试更换
3.编译错误
解决方案:
确认已安装所有必需库
检查库版本是否兼容
总结
本项目通过ESP32C6实现温湿度监测和OLED显示,硬件连接简单,代码清晰易懂,适合初学者学习IIC通信和传感器应用。

