本文共 2427 字,大约阅读时间需要 8 分钟。
前言
随着物联网技术的快速发展,OLED显示屏凭借其高对比度、低功耗等优势,在嵌入式开发中应用广泛。本文以ESP32-S3-DevKitC-1开发板为例,详细叙述了从硬件连接到代码实现的完整驱动方案。与传统的0.96寸SH1106方案相比,本文采用1.3寸SH1306,在保持相同分辨率(128x64)的同时,显著增加了可视面积,适合显示更多信息。
硬件准备
硬件对比
接线示意:
GND - GND VCC - 3.3V / 5V SCL - GPIO21 SDA - GPIO47驱动实现
开发环境配置
#include
#include #include #define SDA 47#define SCL 21 代码示例:
SH1106Wire display(0x3C, SDA, SCL);
引脚定义
代码示例:
#define SDA 47#define SCL 21
I2C地址扫描
注意事项:
#define SDA_PIN 47#define SCL_PIN 21void setup() { Serial.begin(9600); Wire.begin(SDA PIN, SCL PIN);}void loop() { scanI2CDevices(); delay(5000);}void scanI2CDevices() { byte error = 0; int foundDevices = 0; for (byte address = 1; address <= 0x7F; address++) { if (!Wire.beginTransmission(address)) { error = Wire.endTransmission(); if (error != 0) break; } error = Wire.endTransmission(); if (error == 0) { Serial.printf("发现设备:0x%02X\n", address); foundDevices++; } } Serial.printf("共发现%d个设备\n", foundDevices);}
完整驱动代码
代码示例:
#include
#include #define SDA 47#define SCL 21SH1106Wire display(0x3C, SDA, SCL);void oledbegin() { if (!display.init()) { Serial.println("OLED初始化失败"); while(1) delay(100); } display.flipScreenVertically(); display.clear(); display.setFont(&ArialMT_Plain_10);}void displaysensor() { display.drawString(0, 0, "Hello World"); display.drawString(0, 10, "oled"); display.drawString(0, 20, "电磁阀"); display.display();}void displayTemp() { float temp = 0.0; display.drawString(0, 20, String(temp) + "℃"); display.display();}void setup() { Serial.begin(9600); oledbegin();}void loop() { displaysensor(); displayTemp();} 关键函数解析
display.init(); // 初始化屏幕并检测通信状态display.flipScreenVertically(); // 实现180度屏幕旋转display.setFont(&ArialMT_Plain_10); // 支持ArialMT_Plain_10/16/24字体
参考来源
B站 - 普中科技
CSDN博主 - thief_1
总结
本文实现了ESP32-S3对1.3寸OLED屏的完整驱动方案,相比传统方案,可视面积增加30%。在硬件连接和代码实现过程中,需注意GPIO冲突问题。建议通过I2C扫描程序验证连接,后续可扩展实现更多功能。
转载地址:http://sceyk.baihongyu.com/