108个传感器之-oled屏(51)

108个传感器之-oled屏(51)

介绍

你是不是厌倦了在Arduino项目中反复使用字符LCD显示器?事实上,它们已经成为过去。进入梦幻般的OLED(有机发光二极管)显示屏!它们非常轻,几乎像纸一样薄,理论上是灵活的,可以产生更明亮、更清晰的图像。

OLED显示器有各种尺寸(例如128×64、128×32)和颜色(例如白色,蓝色和双色OLED)。一些OLED显示器具有I2C接口,而另一些则具有SPI接口。

但是,他们都有的一件事是,他们的核心是强大的单芯片CMOS OLED驱动器控制器-SSD1306,它可以处理所有RAM缓冲,因此您的Arduino几乎不需要工作。

在本教程中,我们将同时使用I2C和SPI 0.96英寸128×64 OLED显示器。不用担心您的模块是不同的尺寸或颜色;此页面上的信息仍然有用。

SPI 和 I2C 怎么选?

SPI通常比I2C快,但需要更多的I/O引脚。另一方面,I2C仅需要两个引脚,并且可以与其他I2C外围设备共享。因为这是引脚和速度之间的权衡,所以选择完全取决于场景需要。

i2c oled display pinout

spi oled display pinout

引脚连接

pin 引脚连接开发板的 gpio 接口即可:

DEV BOARD Sensor
Pin 2 signal
5 V +V
GND GND

代码示例

使用 Adafruit_SSD1306

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <Arduino.h>
#include <Adafruit_SSD1306.h>

int SDA_PIN = 8;
int SCL_PIN = 9;

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
Serial.begin(9600);
Wire.begin(SDA_PIN, SCL_PIN);
// Clear the buffer.
display.clearDisplay();

// Display Text
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();

// Display Inverted Text
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.setCursor(0,28);
display.println("Hello world!");
display.display();
delay(2000);
display.clearDisplay();

// Changing Font Size
display.setTextColor(WHITE);
display.setCursor(0,24);
display.setTextSize(2);
display.println("Hello!");
display.display();
delay(2000);
display.clearDisplay();

// Display Numbers
display.setTextSize(1);
display.setCursor(0,28);
display.println(123456789);
display.display();
delay(2000);
display.clearDisplay();

// Specifying Base For Numbers
display.setCursor(0,28);
display.print("0x"); display.print(0xFF, HEX);
display.print("(HEX) = ");
display.print(0xFF, DEC);
display.println("(DEC)");
display.display();
delay(2000);
display.clearDisplay();

// Display ASCII Characters
display.setCursor(0,24);
display.setTextSize(2);
display.write(3);
display.display();
delay(2000);
display.clearDisplay();

// Scroll full screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Full");
display.println("screen");
display.println("scrolling!");
display.display();
display.startscrollright(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
display.clearDisplay();

// Scroll part of the screen
display.setCursor(0,0);
display.setTextSize(1);
display.println("Scroll");
display.println("some part");
display.println("of the screen.");
display.display();
display.startscrollright(0x00, 0x00);
}


void loop() {
}

使用U8g2

如果是最小系统板,建议不要用这个库,性能要求会比较高

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

// 这里更改为开发板对应的引脚,当前示例以 esp32-c3 为例
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 9, /* data=*/ 8, /* reset=*/ U8X8_PIN_NONE);
// esp8266
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

void setup(void) {
u8g2.begin();
// u8x8.setFlipMode(1); // set number from 1 to 3, the screen word will rotary 180
}

void loop(void) {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
u8g2.drawStr(0,15,"Hello World!"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
// delay(1000);
}

以下是 ESP32-c3-supermini 上的表现

108个传感器之-oled屏(51)

http://blog.jzxer.cn/20250123/20250123-oled/

作者

dev

发布于

2025-01-23

更新于

2025-01-07

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×