Zápisník experimentátora
Hierarchy: 0.96in 128x64 SPI OLED LCD Display
Tento článok popisuje pripojenie OLED displeja ku Arduinu Uno. OLED displej má veľkosť 0.96 a rozhranie SPI. V článku sa nevenujem verzii pre I2C, ale jediný rozdiel je v menšom počte pripojovacích pinov a pomalšej rýchlosti, preto sa tejto verzii radšej vyhnite.
V článku sú použité nasledovné diely:
Zapojenie na breadboarde je trošku komplikované. Pokiaľ nechceme použiť prepojovacie vodiče, ale drôtené prepojky, nevyhneme sa niekoľkým prekríženiam. Preto to nebude vyzerať tak elegantne, ako v prípade NodeMCU, ktorého zapojenie som demonštroval prednedávnom.
Preto dodávam dve alternatívy, ktoré sa mi podarilo navrhnúť.
Toto zapojenie sa snaží o pripojenie len pomocou klasických dátových vodičov 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 zapojenie sa snaží o pripojenie pomocou klasických dátových a analógových vodičov A1, A2, A3, 11, 13. Toto zapojenie má tú výhodu, že sa všetky nachádzajú na jednej strane Arduino Pro Mini. Analógové vodiče môžeme používať ako dátové, to že sú v Arduine primárne označené ako analógové je len vec značenia na doske.
Arduino Pro Mini | OLED |
---|---|
GND | GND |
VCC | VCC |
13 (CLK) | D0 |
11 (MOSI) | D1 |
A1 | RES |
A2 | DC |
A3 | CS |
Pretože toto zapojenie používa hardverové SPI, použil som nasledovný konśtruktor z knižnice U8g2. Knižnicu si nainštalujete prostredníctvom správcu knižníc.
#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);
Kreslenie je triviálne, ale pretože Arduino Pro Mini nemá tak veľa pamäte, musíme kresliť obraz postupne. Síce to mierne spomalí vykresľovanie, ale ostane vám RAM aj na iné účely. Ak by ste použili Arduino Mega 2560, tam by sa dalo použiť kreslenie v jednom bloku (ale treba použiť iný konštruktor).
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ázkom sa nachádza na GitHub.
09.02.2017