- OLED displej
- Súčasti sú povinné
- SPI Pin pripojenie medzi NodeMCU a OLED displejom
- Programovanie NodeMCU pre prepojenie OLED
- Preveďte obrázok do bitmapových hodnôt
V tomto tutoriáli prepojíme OLED displej s NodeMCU ESP8266. NodeMCU je open source platforma IoT, ktorá obsahuje firmvér, ktorý beží na nízkonákladovom Wi-Fi s podporou Wi-Fi ESP8266 Wi-Fi SoC od spoločnosti Espressif Systems. Má piny GPIO na pripojenie ďalších periférií a podporuje sériovú komunikáciu pomocou pinov SPI, I2C a UART. Má tiež kolíky pre ADC a PWM. Predtým sme prepojili OLED s iným mikrokontrolérom vrátane radiča rodiny ESP (ESP32):
- Prepojovací OLED displej SSD1306 s Raspberry Pi
- Prepojovací OLED displej SSD1306 s Arduino
- Vybudujte si inteligentné hodinky prepojením OLED displeja s telefónom s Androidom pomocou Arduina
- Internetové hodiny využívajúce ESP32 a OLED displej
V tomto tutoriále použijeme protokol SPI na prepojenie monochromatického 7-pinového SSD1306 0,96 OLED displeja s NodeMCU a naučíme sa zobrazovať obraz na OLED obrazovke s NodeMCU ESP8266.
OLED displej
Organic Light Emitting Diode (OLED) je druh svetlo emitujúcej diódy, kde vrstva vyžarujúca svetlo, ktorá je vyrobená z organickej zlúčeniny, vyžaruje svetlo, keď je napájaný elektrický prúd. Táto vrstva je umiestnená medzi dvoma elektródami. Táto technológia sa používa na obrazovkách ako sú počítače, televízory, smartphony atď. OLED displeje majú svoje vlastné svetlo a nepotrebujú žiadne podsvietenie ako pri LCD, preto sú energeticky efektívne a používajú sa s mnohými mikrokontrolérmi. Ďalšou výhodou používania OLED displejov nad LCD je zobrazovanie veľkej a lepšej kvality grafiky na OLED. Viac informácií o technológii OLED Display sa dozviete tu.
Na trhu sú k dispozícii rôzne druhy OLED displejov. Tieto displeje sú charakterizované na základe farby, počtu pinov, IC radiča a veľkosti obrazovky. Na základe farieb sú OLED k dispozícii v monochromatickej modrej, monochromatickej bielej a žlto-modrej farbe. A na základe komunikácie sú k dispozícii hlavne dva typy OLED - 3pin a 7pin. 3-pólový OLED možno použiť v režime komunikácie I2C a 7-pólový OLED sa dá použiť buď v režime SPI alebo v režime I2C.
V tomto výučbe budeme používať OLED displej „ Monochrome 7-pin SSD1306 0,96 “, ktorý je 128 pixelov široký a 64 pixelov dlhý. Tento displej môže pracovať na komunikačných protokoloch SPI aj I2C. V tomto návode použijeme protokol SPI. Na tejto OLED je prítomná jednotka SSD1306 IC, ktorá pomáha zobrazovať pixely na obrazovke.
Súčasti sú povinné
- Monochromatický 7-pinový SSD1306 0,96 ”OLED displej
- NodeMCU ESP8266
- Kábel micro USB
- Nepál
- Prepojovacie vodiče typu samec-samec
SPI Pin pripojenie medzi NodeMCU a OLED displejom
Ďalej je schéma zapojenia pre pripojenie 7-pinového OLED displeja k NodeMCU na komunikáciu pomocou sériového komunikačného protokolu SPI.
Nasledujúca tabuľka zobrazuje prepojenia medzi OLED displejom a NodeMCU ESP8266. Pin GND ide na NodeMCU GND, pin VDD je možné pripojiť na 3,3 V alebo 5 V, SCK je hodinový pin na OLED displeji, ktorý je pripojený k D5 NodeMCU pre hodiny SPI. Pin SDA, ktorý je pinom MOSI na OLED rozhraní SPI, ide do D7 v NodeMCU. Pin RESET smeruje na D3. DC, dátový príkazový pin je pripojený k D2 v NodeMCU. Posledný pin je CS ide na D8, chip select z NodeMCU.
Č. |
OLED displej |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3,3 V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) alebo SDA (I2C) |
D7 |
5 |
RESETOVAŤ |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Tu použijeme knižnice „ Adafruit _SSD1306.h“ a „ Adafruit_GFX.h “ na prepojenie OLED s NodeMCU. Otvorte Arduino IDE a nainštalujte najnovšiu verziu z Arduino IDE ( Skica> Zahrnúť knižnicu> Správa knižníc alebo Ctrl + Shift_I ).
Pretože veľkosť pixelov nášho OLED displeja je 128 x 64, musíme urobiť zmenu v hlavičkovom súbore Adafruit_SSD1306. Otvorte knižnice Arduino, prejdite na Adafruit_SSD1306 a otvorte jeho hlavičkový súbor ( Adafruit _SSD1306.h ). Komentujte riadok „ #define SSD1306_128_32 “ a odkomentujte riadok „#define SSD1306_128_64 “, ako je to znázornené na nasledujúcom obrázku, a potom súbor uložte. V predvolenom nastavení je táto knižnica dodávaná s „# define SSD1306_128_32 “.
Nakoniec zmeňte čísla pinov v príklade „ ssd1306_128x64_spi “ Adafruit SSD1306 podľa tabuľky zobrazenej vyššie. Teraz, keď spustíte náčrt po správnom prepojení OLED displeja s NodeMCU, uvidíte na OLED displeji logo Adafruit, ktoré je štandardne uložené v knižnici. Po logu Adafruit zobrazuje mnoho ďalších grafík, ako sú čiary, obdĺžniky, trojuholník, kruhy, reťazce, čísla, animácie a bitmapové obrázky. Tu V tomto výučbe sa naučíme, ako zobraziť akýkoľvek obrázok na OLED s NodeMCU ESP8266.
Programovanie NodeMCU pre prepojenie OLED
Pretože vždy je na konci uvedený celý kód, tu sme kód podrobne vysvetlili.
Spustite kód importom potrebných knižníc. Pretože používame protokol SPI, naimportujeme knižnicu „SPI.h“ a tiež importujeme „Adafruit_GFX.h“ a „Adafruit_SSD1306.h“ pre OLED displej.
#include
Naša veľkosť OLED je 128 x 64, takže šírku a výšku obrazovky nastavujeme na 128, respektíve 64. Takže definujte premenné pre OLED piny pripojené k NodeMCU pre komunikáciu SPI.
#define SCREEN_WIDTH 128 // OLED šírka displeja, v pixeloch #define SCREEN_HEIGHT 64 // OLED výška displeja, v pixeloch // Deklarácia pre displej SSD1306 pripojený pomocou softvéru SPI (predvolený prípad): #define OLED_MOSI D7 #define OLED_CLK D5 #define OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 Adafruit_SSD1306 displej (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Inicializujte OLED displej pomocou SSD1306_SWITCHCAPVCC na interné vygenerovanie 3,3 V na inicializáciu displeja.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("alokácia SSD1306 zlyhala")); pre (;;); // Nepokračuj, opakuj navždy }
Zobrazenie OLED obrazovky sa pred zobrazením všetkého vymaže vyvolaním funkcie display.clearDisplay (). Máme -Li nastaviť veľkosť písma na 2 volaním funkcie setTextSize (font-size), a nastaviť farbu textu a pozíciu kurzora pomocou setTextColor a setCursor funkciu . Príkaz Display.display () sa používa na prenos údajov do vnútornej pamäte radiča SSD1306. Po prenose sa na obrazovke zobrazí pixel. Teraz môžeme začať posúvať text rôznymi spôsobmi volaním display.startscrollright (x-pos, y-pos) a display.startscrollleft (x-pos, y-pos) pre čas uvedený vo funkcii oneskorenia. Rolovanie textu je možné zastaviť pomocou funkcie display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // vyprázdni obrazovku OLED displeja.setTextSize (2); // Nakreslite text v 2X mierke display.setTextColor (BIELY); display.setCursor (0, 0); display.println (F ("OKRUH")); display.println (F ("DIGEST")); display.display (); // Zobraziť počiatočné oneskorenie textu (100); // Posúvanie rôznymi smermi a pozastavenie medzi nimi: display.startscrollright (0x00, 0x0F); meškanie (2000); display.stopscroll (); oneskorenie (1 000); display.startscrollleft (0x00, 0x0F); meškanie (2000); display.stopscroll (); oneskorenie (1 000); display.startscrolldiagright (0x00, 0x07); meškanie (2000); display.startscrolldiagleft (0x00, 0x07); meškanie (2000); display.stopscroll (); oneskorenie (1 000); }
Voláme funkciu display.drawBitmap (), ktorá na vykreslenie obrázka na OLED vyžaduje 6 parametrov (súradnica x, súradnica y, bitmapové pole, šírka, výška a farba) . Pretože naša veľkosť displeja je 128 x 64, nastavili sme šírku a výšku na 128, respektíve 64. Tu bitmapové pole obsahuje informácie o pixeloch, ktoré nakreslia pixel na obrazovke a vytvoria obraz. Toto bitmapové pole je možné generovať online, čo je vysvetlené nižšie, alebo je k dispozícii veľa softvéru na prevod obrazu do bitmapového poľa.
konštantný nepodpísaný znak myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xc0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xf8, 0x1e, 0x03, 0x3f, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x3e, 0x03, 0x3f, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3c, 0x03, 0x7f, 0xfe, 0x0, 0x0, 0x0, 0ff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x03, 0xe0, 0x00, 0x0f, 0x00, 0x7e, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x07, 0xc0, 0x3f, 0xff, 0x80, 0x3, 0x80, 0ff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xf9, 0x80, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x80, 0xff, 0xf9, 0x80, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xco 0x06, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x01, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1, 0x1 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x3c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7c, 0x03, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x80, 0x80, 0x80 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xbc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x0, 0x00, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x03, 0ff 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0xff, 0xe0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x3f, 0xe0, 0x00, 0x1f, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe 0x 0, 0 0x7f, 0xc0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x67, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x66, 0x00, 0x1f, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7e, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xfe 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; display.drawBitmap (35, 0, myBitmap, 128, 64, ČIERNA, BIELA); display.display ();
Preveďte obrázok do bitmapových hodnôt
Online bitmapu je možné vygenerovať z adresy http://javl.github.io/image2cpp/. Nahrajte obrazový súbor, ktorý chcete zobraziť na OLED, a nastavte veľkosť ako 128 x 64. Zobrazí sa ukážka obrázka a potom sa vygeneruje bitmapové pole.
Nižšie uvedené snímky obrazovky ukazujú proces generovania bitmapovej hodnoty ľubovoľného obrázka.
Nakoniec nahrajte celý kód do NodeMCU ESP8266 a uvidíte obrázok, ktorý sa zobrazuje na OLED obrazovke. Tu na OLED displeji zobrazujeme logo CircuitDigest.