ESP32 可以通过 I2C 或 SPI 接口驱动 OLED 显示屏(通常是 SSD1306 驱动的 128×64 或 128×32 OLED)。以下是基本的使用方法:
所需材料
- ESP32 开发板
- SSD1306 OLED 显示屏 (I2C 接口)
- 杜邦线若干
接线方式 (I2C)
OLED ESP32
VCC -> 3.3V
GND -> GND
SCL -> GPIO 22 (默认I2C SCL)
SDA -> GPIO 21 (默认I2C SDA)
代码实现
1. 安装必要的库
在 Arduino IDE 中安装以下库:
Adafruit SSD1306
Adafruit GFX Library
2. 示例代码
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED 宽度, 单位像素
#define SCREEN_HEIGHT 64 // OLED 高度, 单位像素
#define OLED_RESET -1 // Reset pin # (或 -1 如果共享 Arduino reset pin)
#define SCREEN_ADDRESS 0x3C // I2C地址(通常0x3C或0x3D)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
// 初始化OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 分配失败"));
for(;;); // 卡在这里
}
// 显示初始内容
display.clearDisplay();
display.setTextSize(1); // 正常1:1像素比例
display.setTextColor(SSD1306_WHITE); // 绘制白色文字
display.setCursor(0,0); // 起始位置
display.println(F("Hello, ESP32!"));
display.display();
delay(2000);
}
void loop() {
// 显示动态内容
display.clearDisplay();
// 绘制静态文本
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("ESP32 OLED Test");
// 绘制动态数字
display.setTextSize(2);
display.setCursor(0,20);
display.print("Count: ");
display.print(millis() / 1000);
// 绘制图形
display.drawRect(0, 40, 120, 20, WHITE);
display.fillRect(2, 42, (millis()/100) % 116, 16, WHITE);
display.display();
delay(10);
}
其他功能
绘制图形
// 绘制线条
display.drawLine(0, 0, 127, 63, WHITE);
// 绘制矩形
display.drawRect(10, 10, 50, 30, WHITE);
// 填充矩形
display.fillRect(70, 10, 50, 30, WHITE);
// 绘制圆形
display.drawCircle(64, 32, 20, WHITE);
显示位图
// 定义位图数组
static const unsigned char PROGMEM logo_bmp[] = {
0b00000000, 0b11000000,
// 更多位图数据...
};
// 显示位图
display.drawBitmap(0, 0, logo_bmp, 16, 16, WHITE);
常见问题
- 显示屏不亮:
- 检查接线是否正确
- 确认I2C地址是否正确(尝试0x3C或0x3D)
- 确保OLED显示屏支持3.3V电压
- 显示内容错乱:
- 检查显示屏分辨率设置是否正确
- 确保I2C引脚没有冲突
- 显示闪烁:
- 减少
display.display()
的调用频率 - 使用双缓冲技术(如果库支持)
- 减少
进阶使用
对于更复杂的应用,可以考虑:
- 使用U8g2库(提供更多字体和绘图功能)
- 实现页面切换功能
- 添加用户输入控制显示内容
- 使用硬件SPI接口提高刷新率(如果OLED支持)
希望这个指南能帮助你开始在ESP32上使用OLED显示屏!