Monochromní OLED display s řadičem SSD1306

Máme tady 0.96 palcový OLED displej s možností zobrazení znaků a binárního BMP obrázku.
Tento 0.96 palcový OLED displej má 128×64 rozlišení, tři druhy světelných barev (modré světlo, bílé světlo a modro-žluté světlo). Tento displej je malý, velmi vhodný pro chytré hodinky, mobilní telefony a podobná malá “chytrá zařízení”. Pojďme ho tedy použít pro zobrazení jakéhokoli textu.
Dále bychom rádi rozebrali displej s SPI sběrnicí, který je možné nakonfigurovat pro I2C sběrnici. Nejprve tedy sběrnice SPI, pro kterou je nutné pouze zapojit displej do Arduino a nahrát kód.

Krok 1: Připojení modulu do Arduio. Tento OLED modul má šest pinů.

V tomto článku používáme Arduino Mega, tzn. veškerá zapojení a informace platí pro toto Arduino. Jestli ty budeš používat Arduino Uno, Nano nebo další, je dost možné, že budou muset některé piny být zapojeny jinak.
Připoj tento modul do Arduino. Tento OLED modul má šest pinů.

OLED——-Arduino
SCL———-13
SDA———-11
RST———–8
DC————9
VCC———-5V
GND———-GND

Krok 2: Zkopíruj kód do Arduino IDE

Pro tento návod potřebuješ knihovnu U8g2, kterou si můžeš stáhnout zde
Zde můžeš změnit komentář, který chceš zobrazit na displeji. První a druhý parameter je výchozí souřadnice x, y.

Krok 3: Nahraj kód

#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
/*
  U8glib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
    
*/
// Please UNCOMMENT one of the contructor lines below
// U8g2 Contructor List (Frame Buffer)
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ 8);
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE);   // Všechny displeje bez RES-pinu 
void setup(void) {
  u8g2.begin();
}
void loop(void) {
  u8g2.clearBuffer();					        // vyčistit vnitřní paměť
  u8g2.setFont(u8g2_font_ncenB14_tr);	// vyber font
  u8g2.drawStr(28,20,"kup me");	      // napiš něco do vnitřní paměti
  u8g2.drawStr(51,40,"na");            // napiš něco do vnitřní paměti
  u8g2.setFont(u8g2_font_ncenB12_tr);  // vyber font
  u8g2.drawStr(0,60,"laskarduino.cz"); // napiš něco do vnitřní paměti
  u8g2.sendBuffer();					         // pošli vnitřní paměť do displeje
  delay(1000);
}

Nahraj kód a okamžitě se ti na displeji zobrazí text!

Jak jsi jistě už zjistil, tento displej je nakonfigurován na 4-drátový SPI. Pokud bys ale potřeboval ušetřit nějaké piny, můžeš ho přepájet na I2C! K tomu, abys to udělal, potřebuješ přepájet resistor z pozice R3 na R1. Pak musíš zkrátit resistor R8.

Nyní je tvůj displej předělán na I2C! DC pin nastaví adresu. Abys získal standardní adresu, musíš to napojit do GND. Dej si bacha na RES-pin. Potřebuje nízký puls při spuštění a vysoké napětí během provozu (jako je v režimu SPI). Doporučuji 100nF kondenzátor na GND a 10k na VCC. Funguje to bez problému!

#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
/*
  U8glib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
    
*/
// Please UNCOMMENT one of the contructor lines below
// U8g2 Contructor List (Frame Buffer)
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected
//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE);   // Všechny displeje bez RES-pinu 
//U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ 8);
void setup(void) {
  u8g2.begin();
}
void loop(void) {
  u8g2.clearBuffer();                 // vyčistit vnitřní paměť
  u8g2.setFont(u8g2_font_ncenB14_tr); // vyber font
  u8g2.drawStr(28,20,"kup me");       // napiš něco do vnitřní paměti
  u8g2.drawStr(51,40,"na");            // napiš něco do vnitřní paměti
  u8g2.setFont(u8g2_font_ncenB12_tr);  // vyber font
  u8g2.drawStr(0,60,"laskarduino.cz"); // napiš něco do vnitřní paměti
  u8g2.sendBuffer();                   // pošli vnitřní paměť do displeje
  delay(1000);
}

Nechces dodatečné součástky pájet? Pak můžeš jednoduše zapojit REST-pin displeje na 8-pin Arduino. Initalizuj knihovnu tak, jak je ukázáno v kódu dole.

U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ 8);

Pokud se ti zdá, že jsou příliš velká písmena a nebo potřebuješ na displeji zobrazit vice informací – použij knihovnu U8x8lib.h v knihovně U8g2. Nahrej kód, který je napsaný dole, a dívej se !

#include <Arduino.h>
#include <U8g2lib.h>      //Using u8g2 library

U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(  /* clock=*/ 21,   /* data=*/ 20, /* reset=*/ 8);   // OLEDs without Reset of the Display
void setup(void)
{
  u8x8.begin();
  u8x8.setPowerSave(0);
  u8x8.setFont(u8x8_font_chroma48medium8_r);
  u8x8.drawString(0,0,"LASKARDUINO.CZ");
  u8x8.drawString(0,1,"od bastlire ");
  u8x8.drawString(0,2,"bastlirovi");
  u8x8.drawString(0,4,"za fakt ");
  u8x8.drawString(0,5,"skvely ceny");
}
void loop(void)
{
}

Sdílet článek

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit