使用arduino或者ESP32控制OLED屏幕,用的最多的库是Adafruit_SSD1306库,这个库还是非常好用的。
不过在用ESP32C3的时候,这个库不知道怎么就用不了,所以尝试使用了更简单一些的SSD1306Wire。
我这里使用的是0.91寸OLED,就是下面这个,这用的I2C协议,屏幕分辨率是128*32.
// 2024年9月28日
// 测试https://detail.tmall.com/item.htm?_u=sfik42d0215&id=835667024582&spm=a1z09.2.0.0.13642e8dzaNP0o
// 测试12832屏幕
#include "SSD1306Wire.h"
/* 设置oled屏幕的相关信息 */ //有一些引脚接口不支持I2C
const int I2C_ADDR = 0x3c; // oled屏幕的I2c地址
#define SDA_PIN 6 //
#define SCL_PIN 5 //
/* 新建一个oled屏幕对象,需要输入IIC地址,SDA和SCL引脚号 */
SSD1306Wire oled(I2C_ADDR, SDA_PIN, SCL_PIN,GEOMETRY_128_32);
//测试屏幕显示
void drawRect(void) {
for (int16_t i = 0; i < oled.getHeight() / 2; i += 2) {
oled.drawRect(i, i, oled.getWidth() - 2 * i, oled.getHeight() - 2 * i);
oled.display();
delay(50);
}
}
void setup() {
/* oled屏幕初始化 */
Serial.begin(9600);
oled.init();
// oled.setGeometry(GEOMETRY_128_32);
oled.flipScreenVertically(); // 设置屏幕翻转
oled.setContrast(255); // 设置屏幕亮度
drawRect(); // 测试屏幕显示
oled.clear();
oled.display(); // 清除屏幕
Serial.println("getHeight " + String(oled.getHeight()));
Serial.println("getWidth " + String(oled.getWidth()));
}
void loop() {
// Do the encoder reading and processing
oled.clear();
oled.display(); // 清除屏幕
delay(100);
drawRect(); // 测试屏幕显示
oled.display(); // 将缓存里的文字在屏幕上显示
delay(2000);
oled.clear();
oled.display(); // 清除屏幕
oled.setFont(ArialMT_Plain_10);//ArialMT_Plain_16
oled.drawString(0, 0, "Hello World");
oled.display(); // 将缓存里的文字在屏幕上显示
for (int i = 0; i < 20; i++) {
oled.clear();
oled.display(); // 清除屏幕
oled.setFont(ArialMT_Plain_16);//ArialMT_Plain_16
oled.drawString(0, 2, String(i));
oled.display(); // 将缓存里的文字在屏幕上显示
delay(100);
}
for (int i = 0; i < 100; i++) {
oled.clear();
oled.display(); // 清除屏幕
oled.drawProgressBar(0, 0, 100, 10, i);
oled.display(); // 将缓存里的文字在屏幕上显示
delay(20);
}
delay(2000);
}
ESP32C3 控制0.91寸OLED