Arduino a OLED displej 0.96

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.

Použité diely

V článku sú použité nasledovné diely:

  • Arduino Pro Mini (link) - Klasické malé Arduino.
  • 7pin 0.96 in SPI OLED 128x64 White (link) - Podstatné je, aby bol displej označený ako SPI. Tieto sú výrazne rýchlejšie než I2C verzie. Predávajú sa v troch farebných modifikáciách. Bielej, modrej a dvojfarebnej. Displej znesie napätie 5 V.
  • Breadboard (link) - Používam dva miniatúrne.

Zapojenie na breadboarde

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úť.

Alternatíva 1

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

Alternatíva 2

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

Programovanie

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

Zdrojový kód k obrázkom sa nachádza na GitHub.

 


09.02.2017


Menu