Zápisník experimentátora
Hierarchy: 0.96in 128x64 SPI OLED LCD Display
Tento článok popisuje pripojenie OLED displeja ku ESP8266. Na Internete nájdete dosť veľa otázok, ako pripojiť tento displej. Ale nie je to žiadna veda. Treba si len skontrolovať, či máte SPI alebo I2C verziu displeja a zapojiť to podľa toho. V tomto článku sa pripája SPI verzia displeja, pretože je rýchlejšia.
V článku sú použité nasledovné diely:
Na otestovanie som napísal jednoduchý príklad, ktorý animuje nápis od jedného okraja k druhému a na displeji je aj vykreslená mierka, aby bolo dobre vidno rozmery oblasti, do ktorej sa kreslí.
Na prepojenie pinov som použil drôtené prepojky, ktoré sa nachádzajú pod displejom, preto som priložil fotografie s displejom aj bez neho, aby bolo dobre vidno zapojenie. Fialové prepojky sú dátové a ostatné prepojky slúžia na pripojenie napájania. Prtetože doska NodeMCU má napájanie na pravej strane a displej na ľavej, musel som si trochu pomôcť dvojicami prepojok. Výsledok ale vyzerá veľmi dobre.
Prepojenie medzi pinmi je nasledovné.
NodeMCU | OLED |
---|---|
D0 | D0 |
D1 | D1 |
D2 | RES |
D3 | DC |
D4 | CS |
GND | GND |
3V3 | VCC |
Pretože toto zapojenie používa softvérové ovládanie 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_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ D0, /* data=*/ D1, /* cs=*/ D4, /* dc=*/ D3, /* reset=*/ D2);
Kreslenie pomocou knižnice je triviálne. Pretože ESP8266 má dostatok RAM, môžeme všetko kresliť v jednom bloku.
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.clearBuffer(); // clear the internal memory
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);
u8g2.sendBuffer(); // transfer internal memory to the display
}
Zdrojový kód k obrázkom sa nachádza na serveri GitHub.
26.12.2016