扫描不到地址
先查 VCC、GND、SDA、SCL、供电电压、杜邦线和 I2C 引脚定义。
SKU 01110 · ESP32-S3 · 1.3 inch IIC OLED
整理 SKU 01110 ESP32-S3 核心板 / GPIO 扩展板接 1.3 寸 IIC OLED 显示屏的接线、Arduino IDE 设置、I2C 扫描、SH1106 / SSD1306 驱动选择和黑屏排查。1.3 寸屏幕不要直接写死 SSD1306,很多批次实际是 SH1106。
Quick Facts
Key Point
客户说“1.3 寸 IIC 屏不亮”,常见原因不是接线坏,而是驱动型号选错。1.3 寸 128x64 IIC OLED 很多使用 SH1106;0.96 寸 OLED 更常见 SSD1306。实物测试图只是展示 I2C Tester 能读到设备地址;不同传感器、不同屏幕、不同批次读出来的 IIC 地址可能不一样,必须以 I2C Scanner 实际扫描结果为准。
先查 VCC、GND、SDA、SCL、供电电压、杜邦线和 I2C 引脚定义。
每个 IIC 设备地址可能不同,OLED 常见可能是 0x3C/0x3D,其他传感器可能是别的地址。扫到地址后仍黑屏,重点换 SH1106 / SSD1306 驱动类,确认分辨率 128x64。
Arduino-ESP32 支持指定 I2C 引脚,示例统一用 Wire.begin(8, 9)。
Real Test
下面为本地实物测试记录。屏幕显示 SENSOR OK,说明当前接线下 IIC 总线和被测模块通信正常。图片里的地址只是本次被测模块的扫描结果,不同传感器/屏幕可能不一样,客户测试时按实际扫描结果修改程序地址。
Real Product
这两张为本店实物参考图。扩展板用于把 ESP32-S3 的 GPIO、电源和 GND 引出,接 IIC 屏时只需要 VCC、GND、SDA、SCL 四根线。
Wiring
ESP32-S3 是 3.3V 逻辑,屏幕模块优先接 3.3V。若使用 GPIO 扩展板,按扩展板丝印找到 3V3、GND、SDA、SCL;若屏幕标称可接 5V,也要确认 SDA/SCL 是否会被上拉到 5V。
| 01110 / 扩展板 | 1.3寸 IIC OLED | 说明 |
|---|---|---|
| 3V3 | VCC / VDD | 推荐 3.3V 供电,最终看屏幕模块说明。 |
| GND | GND | 必须共地。 |
| IO8 / SDA | SDA | I2C 数据线,代码里写 Wire.begin(8, 9)。 |
| IO9 / SCL | SCL | I2C 时钟线。 |
Arduino IDE
不要一开始就烧复杂图形程序。先确认串口监视器能看到 I2C 地址,再根据屏幕驱动选择 SH1106 或 SSD1306 示例。
#include <Wire.h>
#define SDA_PIN 8
#define SCL_PIN 9
void setup() {
Serial.begin(115200);
delay(1000);
Wire.begin(SDA_PIN, SCL_PIN);
Wire.setClock(100000);
Serial.println("ESP32-S3 I2C scanner");
byte count = 0;
for (byte address = 1; address < 127; address++) {
Wire.beginTransmission(address);
byte error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
count++;
}
}
if (count == 0) Serial.println("No I2C devices found");
}
void loop() {}
// Arduino IDE 库管理器安装:U8g2
// 1.3 寸 IIC OLED 常见 SH1106,优先测试这个
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#define SDA_PIN 8
#define SCL_PIN 9
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(
U8G2_R0,
U8X8_PIN_NONE
);
void setup() {
Wire.begin(SDA_PIN, SCL_PIN);
u8g2.begin();
u8g2.setContrast(180);
}
void loop() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x12_tf);
u8g2.drawStr(0, 14, "ESP32-S3 OLED");
u8g2.drawStr(0, 32, "I2C: SDA=8 SCL=9");
u8g2.drawStr(0, 50, "Driver: SH1106");
u8g2.sendBuffer();
delay(1000);
}
// Arduino IDE 库管理器安装:Adafruit SSD1306 和 Adafruit GFX
// 如果 SH1106 示例不正常,再测试 SSD1306
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SDA_PIN 8
#define SCL_PIN 9
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
// OLED 常见地址可能是 0x3C 或 0x3D;请先用 I2C Scanner 确认
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 init failed. Try SH1106 or check address.");
while (true) delay(100);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("ESP32-S3 OLED");
display.println("SDA=8 SCL=9");
display.println("Driver: SSD1306");
display.display();
}
void loop() {}
Troubleshooting
检查 VCC/GND 是否接稳,SDA/SCL 是否接反,代码里的 Wire.begin(8, 9) 是否和实际接线一致。先把 I2C 频率降到 100kHz,杜邦线不要太长。
地址以实际扫描结果为准。OLED 常见可能是 0x3C/0x3D,其他传感器可能完全不同。1.3 寸屏幕常见 SH1106,若使用 SSD1306 库可能扫得到地址但不显示或显示错位。先跑 U8g2 的 SH1106 示例。
常见是驱动类、分辨率或屏幕控制芯片不匹配。确认是 128x64 还是其他分辨率,再换 U8g2 对应构造函数。
Arduino IDE 里选择 ESP32S3 Dev Module 或对应开发板,确认端口;必要时按住 BOOT 再点上传。上传问题和 OLED 本身无关。
ESP32-S3 IO 是 3.3V 逻辑。屏幕模块如果只接电源 5V,但 SDA/SCL 被上拉到 5V,就不适合直接接 ESP32-S3。客户不确定时,建议统一 3.3V 测试。
Support
复制下面这段填一下发给客服,我们一次就能定位,不用来回问。
References
以下链接用于确认 ESP32-S3 I2C 引脚可指定、SSD1306 库安装方式,以及 1.3 寸 OLED 常见 SH1106 场景。屏幕最终型号仍以实物丝印和商品规格为准。
Espressif
说明 ESP32 Arduino Wire I2C API,可设置 SDA/SCL 引脚。
打开资料Adafruit
SSD1306 单色 OLED Arduino 库,适合 SSD1306 屏幕测试。
打开 GitHubAdafruit
说明 Adafruit SSD1306 和 Adafruit GFX 库的安装方式。
打开教程U8g2
适合 SH1106、SSD1306 等多种单色 OLED 控制器,建议排查 1.3 寸屏幕时优先使用。
打开 GitHub