Lily李 发表于 2025-10-4 20:08

ESP32-S3(N4) IoT 开发板以I2C方式驱动OLED屏

在Arduino IDE的环境下要以I2C方式实现OLED屏的显示驱动还是较为方便的,它需要相应的库进行支持。其相应的工作条件为:#include <Wire.h>#include "SSD1306Wire.h" #include "OLEDDisplayUi.h"#include "images.h"SSD1306Wire display(0x3c, 1, 2);OLEDDisplayUi ui   ( &display );
相应的辅助函数为:void msOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->setFont(ArialMT_Plain_10);
display->drawString(128, 0, String(millis()));
}

void drawFrame1(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
display->drawXbm(x + 34, y + 14, WiFi_**_width, WiFi_**_height, WiFi_**_bits);
}

void drawFrame2(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawString(0 + x, 10 + y, "Arial 10");
display->setFont(ArialMT_Plain_16);
display->drawString(0 + x, 20 + y, "Arial 16");
display->setFont(ArialMT_Plain_24);
display->drawString(0 + x, 34 + y, "Arial 24");
}

void drawFrame3(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
// Text alignment demo
display->setFont(ArialMT_Plain_10);

// The coordinates define the left starting point of the text
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->drawString(0 + x, 11 + y, "Left aligned (0,10)");

// The coordinates define the center of the text
display->setTextAlignment(TEXT_ALIGN_CENTER);
display->drawString(64 + x, 22 + y, "Center aligned (64,22)");

// The coordinates define the right end of the text
display->setTextAlignment(TEXT_ALIGN_RIGHT);
display->drawString(128 + x, 33 + y, "Right aligned (128,33)");
}

void drawFrame4(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
display->setTextAlignment(TEXT_ALIGN_LEFT);
display->setFont(ArialMT_Plain_10);
display->drawStringMaxWidth(0 + x, 10 + y, 128, "Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore.");
}

void drawFrame5(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
}

FrameCallback frames[] = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

int frameCount = 5;

OverlayCallback overlays[] = { msOverlay };
int overlaysCount = 1;
实现驱动效果测试的主程序为:void setup() {
Serial.begin(115200);
Serial.println();
Serial.println();
ui.setTargetFPS(60);
ui.setActiveSymbol(activeSymbol);
ui.setInactiveSymbol(inactiveSymbol);
ui.setIndicatorPosition(BOTTOM);
ui.setIndicatorDirection(LEFT_RIGHT);
ui.setFrameAnimation(SLIDE_LEFT);
ui.setFrames(frames, frameCount);
ui.setOverlays(overlays, overlaysCount);
ui.init();
display.flipScreenVertically();
}

void loop() {
int remainingTimeBudget = ui.update();
if (remainingTimeBudget > 0) {
    delay(remainingTimeBudget);
}
}
经程序的上传,其测试效果如图1至图3所示。
图1 显示图案

图2 变换字体大小

图3 对齐效果

gaochy1126 发表于 2025-10-29 19:48

OLED 模块电源必须为 3.3V,否则可能损坏屏幕。

gaochy1126 发表于 2025-10-29 19:48

将扩展接口插到开发板上,OLED显示屏模块连接到对应接口

Lily李 发表于 2025-10-30 08:06

gaochy1126 发表于 2025-10-29 19:48
将扩展接口插到开发板上,OLED显示屏模块连接到对应接口

对于标准接口一插即可,而ESP开发板则缺少这样的接口。

Lily李 发表于 2025-10-30 08:07

gaochy1126 发表于 2025-10-29 19:48
OLED 模块电源必须为 3.3V,否则可能损坏屏幕。

对数的是3.3V,一些双色屏支持使用5V工作。
页: [1]
查看完整版本: ESP32-S3(N4) IoT 开发板以I2C方式驱动OLED屏