Popis
OLED displej 3,12″ s rozlíšením 256 × 64 bodov s radičom SSD1322 ponúka veľkú, výraznú a dobre čitateľnú plochu s bielymi bodmi a 16 odtieňmi sivej. OLED nepotrebuje podsvietenie, takže má hlbokú čiernu, široký pozorovací uhol a nízku spotrebu. Hodí sa na informačné panely, meracie prístroje, audio techniku, hodiny či stavové displeje.
Modul sa napája napätím 3 – 5,5 V a vysoké napätie pre OLED panel si vyrába sám na doske. Pripája sa 16-pinovým konektorom s roztečou 2,54 mm. Z výroby je nastavený na paralelné rozhranie 8080 (rezistory R6 + R8). Zapojenie s Arduino Uno v tomto režime sme overili testom, nižšie nájdete schému aj hotový testovací program. Na ovládanie odporúčame knižnicu U8g2.
Upozornenie: knižnica Adafruit SSD1306 s týmto displejom nefunguje. SSD1306 je iný radič, určený pre menšie displeje 128 × 64 a 128 × 32. Rozloženie pinov sa tiež líši od displejov Newhaven (NHD), preto zapájajte podľa schém na tejto stránke.
Hlavné vlastnosti
- veľká uhlopriečka 3,12″ a rozlíšenie 256 × 64 bodov
- radič SSD1322, 16 odtieňov sivej (4 bity na bod)
- biele body, vysoký kontrast, bez podsvietenia
- napájanie 3 – 5,5 V, menič pre OLED panel je priamo na module
- rozhranie 8080 (z výroby), 6800, 4-wire SPI alebo 3-wire SPI podľa osadenia rezistorov
- podpora v knižnici U8g2 pre Arduino, ESP32 a ďalšie platformy
Technické parametre
| Uhlopriečka | 3,12″ |
| Rozlíšenie | 256 × 64 bodov |
| Radič | SSD1322 |
| Farba bodov | biela, 16 odtieňov sivej |
| Napájacie napätie | 3 – 5,5 V |
| Rozhranie | 8080 paralelné (z výroby), 6800, 4-wire SPI, 3-wire SPI |
| Konektor | 16 pinov, rozteč 2,54 mm |
| Pozorovací uhol | 160° |
| Hmotnosť | 46 g |
Rozloženie pinov
Na doske sú vytlačené iba čísla 1, 2, 15 a 16. Pri pohľade zo zadnej strany s konektorom vľavo je pin 1 v pravom stĺpci dole a pin 2 v ľavom stĺpci dole (pri okraji dosky).
| 1 | GND | 9 | D5 |
| 2 | VCC (3 – 5,5 V) | 10 | D6 |
| 3 | NC (nezapojený) | 11 | D7 |
| 4 | D0 / SCLK | 12 | E/RD# |
| 5 | D1 / SDIN | 13 | R/W# (WR#) |
| 6 | D2 | 14 | D/C# |
| 7 | D3 | 15 | RES# |
| 8 | D4 | 16 | CS# |
Zapojenie – režim 8080 (z výroby)
| Pin displeja | Arduino Uno | ESP32 DevKit |
| 1 GND | GND | GND |
| 2 VCC | 5V | 3V3 |
| 3 NC | nezapájať | nezapájať |
| 4 D0 | D2 | GPIO16 |
| 5 D1 | D3 | GPIO17 |
| 6 D2 | D4 | GPIO18 |
| 7 D3 | D5 | GPIO19 |
| 8 D4 | D6 | GPIO21 |
| 9 D5 | D7 | GPIO22 |
| 10 D6 | D8 | GPIO23 |
| 11 D7 | D9 | GPIO25 |
| 12 RD | A1 (v programe HIGH) alebo 5V | 3V3 |
| 13 WR | D10 | GPIO26 |
| 14 DC | D12 | GPIO32 |
| 15 RES | A0 | GPIO33 |
| 16 CS | D11 | GPIO27 |
Zapojenie s Arduino Uno sme overili testom. Na ESP32 nepoužívajte piny GPIO0, 2, 12, 15 ani GPIO34 – 39.
Postup krok za krokom
- Pozrite sa na zadnú stranu displeja. Ak sú osadené rezistory R6 a R8, je v režime 8080 (z výroby) a zapájate podľa schémy vyššie.
- Prepojte displej s Arduinom 15 vodičmi samec – samica. Pin 3 nechajte voľný.
- V Arduino IDE otvorte Nástroje → Spravovať knižnice…, vyhľadajte U8g2 a pri knižnici U8g2 by oliver kliknite na Inštalovať.
- Nahrajte minimálny príklad nižšie. Na displeji sa zobrazí „Hello World!“.
- Ak chcete displej preveriť celý, nahrajte testovací program. Sériový monitor (115200 Bd) vypisuje, ktorý test práve beží.
Minimálny príklad – Arduino Uno
#include <U8g2lib.h>
// OLED 3.12" 256x64 SSD1322, režim 8080 (R6+R8), Arduino Uno
U8G2_SSD1322_NHD_256X64_1_8080 u8g2(U8G2_R0, 2, 3, 4, 5, 6, 7, 8, 9,
/*WR=*/10, /*CS=*/11, /*DC=*/12, /*RES=*/A0);
void setup() {
pinMode(A1, OUTPUT);
digitalWrite(A1, HIGH); // RD musí byť HIGH
u8g2.begin();
}
void loop() {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvB14_tr);
u8g2.drawStr(10, 30, "Hello World!");
u8g2.setFont(u8g2_font_6x10_tr);
u8g2.drawStr(10, 52, "OLED 3.12\" 256x64 SSD1322");
} while (u8g2.nextPage());
delay(1000);
}
Pre ESP32 použite konštruktor s plným bufferom:
U8G2_SSD1322_NHD_256X64_F_8080 u8g2(U8G2_R0, 16, 17, 18, 19, 21, 22, 23, 25,
/*WR=*/26, /*CS=*/27, /*DC=*/32, /*RES=*/33);
Na Arduino Uno používajte konštruktor s _1_. Verzia _F_ potrebuje 2 kB RAM, čo je celá pamäť Una, a program by nefungoval.
Testovací program
Program dookola zobrazuje šesť obrazcov: celú plochu, šachovnicu po 1 bode, rámik s uhlopriečkami, 16 odtieňov sivej, text s počítadlom a plynulú zmenu kontrastu. Ak všetky prebehnú správne, displej je v poriadku.
// Test OLED 3.12" 256x64 SSD1322 - Arduino Uno, paralelny rezim 8080 (R6+R8)
// Zapojenie (pin modulu -> Arduino): 1 GND->GND, 2 VCC->5V, 3 NC, 4..11 D0..D7 -> D2..D9,
// 12 RD->A1 (HIGH, alebo 5V), 13 WR->D10, 14 DC->D12, 15 RES->A0, 16 CS->D11
// Seriovy monitor 115200 Bd vypisuje T1..T6.
#include <U8g2lib.h>
U8G2_SSD1322_NHD_256X64_1_8080 u8g2(U8G2_R0, 2, 3, 4, 5, 6, 7, 8, 9, /*wr=*/10, /*cs=*/11, /*dc=*/12, /*reset=*/A0);
void hlasTest(uint8_t n, const char *nazov) {
Serial.print(F("T")); Serial.print(n); Serial.print(F(" ")); Serial.println(nazov);
}
void t1_plna() {
hlasTest(1, "cela plocha svieti");
u8g2.firstPage();
do { u8g2.drawBox(0, 0, 256, 64); } while (u8g2.nextPage());
delay(3000);
}
void t2_sachovnica() {
hlasTest(2, "sachovnica 1px");
u8g2.firstPage();
do {
uint8_t *b = u8g2.getBufferPtr();
for (uint16_t x = 0; x < 256; x++) b[x] = (x & 1) ? 0xAA : 0x55;
} while (u8g2.nextPage());
delay(3000);
}
void t3_ramik() {
hlasTest(3, "ramik okolo plochy");
u8g2.firstPage();
do {
u8g2.drawFrame(0, 0, 256, 64);
u8g2.drawLine(0, 0, 255, 63);
u8g2.drawLine(0, 63, 255, 0);
} while (u8g2.nextPage());
delay(3000);
}
// 16 odtienov sivej priamym zapisom do RAM SSD1322 (4 bity/pixel)
void t4_odtiene() {
hlasTest(4, "16 odtienov sivej");
u8x8_t *d = u8g2.getU8x8();
uint8_t riadok[128];
for (uint8_t i = 0; i < 128; i++) { uint8_t g = i / 8; riadok[i] = (g << 4) | g; }
u8x8_cad_StartTransfer(d);
u8x8_cad_SendCmd(d, 0x15); u8x8_cad_SendArg(d, 0x1C); u8x8_cad_SendArg(d, 0x5B);
u8x8_cad_SendCmd(d, 0x75); u8x8_cad_SendArg(d, 0); u8x8_cad_SendArg(d, 63);
u8x8_cad_SendCmd(d, 0x5C);
for (uint8_t y = 0; y < 64; y++) u8x8_cad_SendData(d, 128, riadok);
u8x8_cad_EndTransfer(d);
delay(3000);
}
void t5_text() {
hlasTest(5, "text + pocitadlo");
unsigned long start = millis();
while (millis() - start < 4000) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvB14_tr);
u8g2.drawStr((256 - u8g2.getStrWidth("TECHFUN TEST 256x64")) / 2, 22, "TECHFUN TEST 256x64");
u8g2.setFont(u8g2_font_logisoso24_tn);
u8g2.setCursor(110, 60);
u8g2.print(millis() / 1000);
} while (u8g2.nextPage());
}
}
void t6_kontrast() {
hlasTest(6, "kontrast 0-255-0");
u8g2.firstPage();
do { u8g2.drawBox(0, 0, 256, 64); } while (u8g2.nextPage());
for (int c = 0; c <= 255; c += 3) { u8g2.setContrast(c); delay(18); }
for (int c = 255; c >= 0; c -= 3) { u8g2.setContrast(c); delay(18); }
u8g2.setContrast(255);
}
void setup() {
Serial.begin(115200);
pinMode(A1, OUTPUT);
digitalWrite(A1, HIGH);
u8g2.begin();
u8g2.setContrast(255);
Serial.println(F("\nOLED SSD1322 256x64 test, rezim 8080"));
}
void loop() {
t1_plna();
t2_sachovnica();
t3_ramik();
t4_odtiene();
t5_text();
t6_kontrast();
Serial.println(F("--- dalsie kolo ---"));
}
Prestavba na SPI (voliteľné)
Režim rozhrania určujú 0 Ω rezistory na zadnej strane modulu. Tabuľka režimov je vytlačená aj priamo na doske:
| 80XX (8080) – z výroby | R6 + R8 |
| 68XX (6800) | R6 + R7 |
| 4SPI (4-wire SPI) | R5 + R8 |
| 3SPI (3-wire SPI) | R5 + R7 |
Ak chcete 4-wire SPI s menším počtom vodičov, prespájkujte 0 Ω rezistor z pozície R6 na R5 a R8 ponechajte. Potom zapojte: pin 4 SCLK → D13, pin 5 SDIN → D11, pin 16 CS → D10, pin 14 DC → D9, pin 15 RES → D8, piny 12 a 13 na GND, piny 6 – 11 nezapojené. Konštruktor: U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI u8g2(U8G2_R0, 10, 9, 8);
Poznámka: úpravu modulu spájkovaním robíte na vlastnú zodpovednosť. Poškodenie pri neodbornom spájkovaní nie je predmetom reklamácie.
Čo budete potrebovať
- riadiacu dosku, napríklad Arduino Uno R3 precízny klon alebo ESP32 NodeMCU 38-pin s CP2102
- prepojovacie káble samec – samica, napríklad Kábliky 40 kusov 20 cm vo variante M-F (pre režim 8080 treba 15 vodičov)
- na rozvod napájania sa hodí nepájivé kontaktné pole 830 bodov
- knižnicu U8g2
Časté otázky a riešenie problémov
Displej nič nezobrazuje, je úplne tmavý. Je pokazený?
Takmer vždy ide o zapojenie. Postupujte podľa obrázka vyššie: skontrolujte napájanie (medzi pinmi 1 a 2 musí byť 3 – 5,5 V), režim na zadnej strane (R6 + R8 = 8080), rozloženie pinov a pin RD. Potom nahrajte testovací program. Ak prebehne aspoň test T1 (celá plocha svieti), displej je v poriadku.
Zapojil som ho na SPI (SCK, MOSI, CS, DC, RES) a nič.
Modul je z výroby v paralelnom režime 8080, nie v SPI. Buď ho zapojte podľa schémy 8080, alebo prespájkujte rezistor R6 na R5 (pozri časť Prestavba na SPI).
Zapojil som ho podľa schémy z internetu pre displej Newhaven (NHD-3.12) a nefunguje.
Tento modul má iné rozloženie pinov ako displeje Newhaven. Napríklad D0 je na pine 4 a DC na pine 14. Zapájajte podľa tabuľky na tejto stránke.
Ktorý pin je pin 1?
Na doske sú vytlačené čísla 1, 2, 15 a 16. Pri pohľade zozadu s konektorom vľavo je pin 1 v pravom stĺpci dole. Pin 1 je GND, pin 2 je VCC.
Používam knižnicu Adafruit SSD1306 a nefunguje to.
Táto knižnica je pre iný radič. Pre SSD1322 použite knižnicu U8g2 a konštruktor U8G2_SSD1322_NHD_256X64_….
Program sa skompiluje, ale Arduino Uno sa správa čudne alebo displej nič neukáže.
Pravdepodobne používate konštruktor s _F_ (plný buffer), ktorý zaberie celú RAM Una. Použite verziu s _1_.
Ako zistím, či program na Arduine vôbec beží?
Otvorte Sériový monitor na rýchlosti 115200 Bd. Testovací program vypisuje T1 až T6. Ak nevypisuje nič, program sa nenahral alebo máte zvolený zlý port.
Obraz je posunutý alebo orezaný na okraji.
Namiesto U8G2_SSD1322_NHD_256X64_… vyskúšajte konštruktor U8G2_SSD1322_ZJY_256X64_…. Ak je obraz hore nohami, použite U8G2_R2 namiesto U8G2_R0.
Môžem displej napájať z 3,3 V?
Áno, modul pracuje od 3 V. Pri ESP32 ho napájajte z 3V3 a pin RD pripojte na 3V3.
Nefunguje mi po prestavbe na SPI.
Skontrolujte, či sú osadené R5 + R8 (4-wire SPI), nie R5 + R7 (3-wire SPI). Piny RD a WR (12, 13) pripojte na GND a piny 6 – 11 nechajte voľné.
V ponuke máme aj ďalšie OLED displeje rôznych veľkostí.












