/*
* OLED Hello World - Wokwi仿真
* 在STM32 Blue Pill上运行,连接SSD1306 OLED显示屏
*
* 连接:
* OLED SCL -> PB6
* OLED SDA -> PB7
* OLED VCC -> 3.3V
* OLED GND -> GND
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLED显示屏设置
#define SCREEN_WIDTH 128 // OLED显示宽度,像素
#define SCREEN_HEIGHT 64 // OLED显示高度,像素
#define OLED_RESET -1 // 重置引脚
#define SCREEN_ADDRESS 0x3C // OLED I2C地址
// 声明SSD1306显示对象
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// 初始化串口通信
Serial.begin(115200);
Serial.println("OLED Hello World - Wokwi仿真");
// 初始化I2C总线
Wire.begin();
// 初始化SSD1306显示
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306分配失败"));
for(;;); // 无限循环停止程序
}
Serial.println("OLED初始化成功");
// 清除显示缓冲区
display.clearDisplay();
// 显示欢迎信息
display.setTextSize(2); // 设置文本大小
display.setTextColor(SSD1306_WHITE); // 绘制白色文本
display.setCursor(0, 0); // 设置光标位置
display.println("Hello"); // 打印文本
display.println("World!"); // 打印文本
// 显示缓冲区内容到屏幕
display.display();
delay(2000); // 暂停2秒
}
void loop() {
// 清除显示
display.clearDisplay();
// 设置文本属性
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// 显示静态文本
display.setCursor(0, 0);
display.println("OLED Display Test");
// 显示动态内容(时间)
display.setCursor(0, 20);
display.print("Millis: ");
display.print(millis() / 1000);
display.println(" s");
// 显示滚动文本
static int scrollPos = 128; // 从右侧开始
display.setCursor(scrollPos, 40);
display.println("Hello World!");
// 更新滚动位置
scrollPos -= 2;
if (scrollPos < -100) { // 当文本完全滚出左侧时重置
scrollPos = 128;
}
// 显示到屏幕
display.display();
// 短暂延迟
delay(50);
}