Zápisník experimentátora
Hierarchy: 0.96in 128x64 SPI OLED LCD Display
Tento článek popisuje připojení OLED displeje k Arduinu Uno. OLED displej má velikost 0.96 a rozhraní SPI. V článku se nevěnuji verzi pro I2C, ale jediný rozdíl je v menším počtu připojovacích pinů a pomalejší rychlosti, proto se této verzi raději vyhněte.
V článku jsou použity následující díly:
Zapojení na breadboarde je trošku komplikované. Pokud nechceme použít propojovací vodiče, ale drátěné propojky, nevyhneme se několika překřížení. Proto to nebude vypadat tak elegantně, jako v případě NodeMCU, jehož zapojení jsem demonstroval nedávno.
Proto dodávám dvě alternativy, které se mi podařilo navrhnout.
Toto zapojení se snaží o připojení pouze pomocí klasických datových vodičů 8, 9, 10, 11, 13.
Arduino Pro Mini | OLED |
---|---|
GND | GND |
VCC | VCC |
13 (CLK) | D0 |
11 (MOSI) | D1 |
8 | RES |
9 | DC |
10 | CS |
Toto zapojení se snaží o připojení pomocí klasických datových a analogových vodičů A1, A2, A3, 11, 13. Toto zapojení má tu výhodu, že se všechny nacházejí na jedné straně Arduina Pro Mini. Analogové vodiče můžeme používat jako datové, to že jsou v Arduine primárně označené jako analogové je jen věc značení na desce.
Arduino Pro Mini | OLED |
---|---|
GND | GND |
VCC | VCC |
13 (CLK) | D0 |
11 (MOSI) | D1 |
A1 | RES |
A2 | DC |
A3 | CS |
Protože toto zapojení používá hardwarové SPI, použil jsem následující konstruktor z knihovny U8g2. Knihovnu si nainstalujete prostřednictvím správce knihoven.
#include <U8g2lib.h>
//U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ A3, /* dc=*/ A2, /* reset=*/ A1);
Kreslení je triviální, ale protože Arduino Pro Mini nemá tolik paměti, musíme kreslit obraz postupně. Sice to mírně zpomalí vykreslování, ale zůstane vám RAM i pro jiné účely. Pokud byste použili Arduino Mega 2560, tam by se dalo použít kreslení v jednom bloku (ale třeba použít jiný konstruktor).
void setup() {
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB10_tr);
//u8g2.setFont(u8g2_font_helvB10_tr);
}
void loop() {
for (int i = 12; i < 64; i++) {
drawFrame(i);
delay(10);
}
for (int i = 63; i >= 12; i--) {
drawFrame(i);
delay(10);
}
}
void drawFrame(int y) {
u8g2.firstPage();
do {
u8g2.drawStr(0, y, "Arduino Slovakia"); // write something to the internal memory
for (int j = 0; j <= 128; j += 2)
u8g2.drawLine(j, 0, j, (j % 10 == 0 ? 2 : 1));
for (int j = 0; j <= 64; j += 2)
u8g2.drawLine(0, j, (j % 10 == 0 ? 2 : 1), j);
} while ( u8g2.nextPage() );
}
Zdrojový kód k obrázkům se nachází na GitHub.
18.08.2018