OLED 显示屏 SSD1306 驱动教程
📅 2026-05-14 · 📂 硬件编程 · ⏱ 阅读约 6 分钟
概述
0.96 寸 OLED(128×64 像素)是 ESP32 项目中最流行的显示方案。白色/蓝色双色可选,I²C 接口只需 4 根线。本篇教你从点亮屏幕到绘制图形、显示中文的完整流程。
学习目标:掌握 Adafruit_SSD1306 和 U8g2 库,学会绘图、显示文本和中文。
物料清单
- ESP32 ×1
- 0.96寸 OLED SSD1306 (I²C) ×1
- 杜邦线 ×4
接线图
🔌 接线
ESP32 OLED
3.3V ──────── VCC
GND ──────── GND
SDA(GPIO21)── SDA
SCL(GPIO22)── SCL
基础:显示文字和图形
// OLED_Basics.ino — SSD1306基础用法
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I²C地址0x3C
oled.clearDisplay();
oled.setTextSize(2); // 字体大小2倍
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(10, 10);
oled.println("Hello!");
oled.drawRect(5, 5, 118, 54, SSD1306_WHITE); // 边框
oled.fillCircle(64, 50, 8, SSD1306_WHITE); // 实心圆
oled.display();
}
void loop() {}
进阶:U8g2 显示中文
// OLED_Chinese.ino — U8g2库显示中文
// 安装库: U8g2 by oliver
#include <U8g2lib.h>
// 构造函数: U8G2_SSD1306_128X64_NONAME_F_HW_I2C(rotation, clock, data)
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
void setup() {
u8g2.begin();
u8g2.enableUTF8Print(); // 启用UTF8中文
u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 文泉驿12px中文字体
}
void loop() {
u8g2.clearBuffer();
u8g2.setCursor(0, 20);
u8g2.print("你好 世界!");
u8g2.setCursor(0, 45);
u8g2.print("ESP32 物联网);
u8g2.sendBuffer();
delay(1000);
}
绘图 API 速查
| 函数 | 效果 |
|---|
| drawPixel(x,y,color) | 画一个像素 |
| drawLine(x1,y1,x2,y2,color) | 画线 |
| drawRect(x,y,w,h,color) | 空心矩形 |
| fillRect(x,y,w,h,color) | 实心矩形 |
| drawCircle(x,y,r,color) | 空心圆 |
| fillCircle(x,y,r,color) | 实心圆 |
| drawTriangle(...) | 三角形 |
| setRotation(n) | 旋转 0/1/2/3 |
常见问题
⚠️ I²C 地址:大部分 SSD1306 默认地址 0x3C。如果屏幕不亮,先用 I²C 扫描器确认地址。部分模块是 0x3D。
💡 省电:不需要显示时调用 oled.ssd1306_command(SSD1306_DISPLAYOFF) 关闭屏幕,功耗从 ~20mA 降到 <1mA。