Arduino a OLED displej 0.96

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.

Použité díly

V článku jsou použity následující díly:

  • Arduino Pro Mini (link) - Klasické malé Arduino.
  • 7pin 0.96 in SPI OLED 128x64 White (link) - Podstatné je, aby byl displej označený jako SPI. Tyto jsou výrazně rychleji než I2C verze. Prodávají se ve třech barevných modifikacích. Bílé, modré a dvoubarevné. Displej snese napětí 5 V.
  • Breadboard (link) - Používám dva miniaturní.

Zapojení na breadboardu

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.

Alternativa 1

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

Alternativa 2

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

Programování

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

Zdrojový kód k obrázkům se nachází na GitHub.

 


18.08.2018


Menu