- OLED displej
- Požadované komponenty
- SPI Pin připojení mezi NodeMCU a OLED displejem
- Programování NodeMCU pro propojení OLED
- Převeďte obrázek na hodnoty bitmapy
V tomto tutoriálu propojíme OLED displej s NodeMCU ESP8266. NodeMCU je open source platforma IoT, která obsahuje firmware, který běží na nízkonákladovém Wi-Fi s podporou Wi-Fi ESP8266 Wi-Fi SoC od společnosti Espressif Systems. Má piny GPIO pro připojení dalších periferií a podporuje sériovou komunikaci pomocí pinů SPI, I2C a UART. Má také piny pro ADC a PWM. Dříve jsme propojili OLED s jiným mikrokontrolérem včetně řadiče rodiny ESP (ESP32):
- Propojení OLED displeje SSD1306 s Raspberry Pi
- Propojení OLED displeje SSD1306 s Arduino
- Vybudujte si chytré hodinky propojením OLED displeje s telefonem Android pomocí Arduina
- Internetové hodiny využívající ESP32 a OLED displej
V tomto tutoriálu použijeme protokol SPI k propojení Monochrome 7-pin SSD1306 0,96 OLED displeje s NodeMCU a naučíme se zobrazovat obraz na OLED obrazovce s NodeMCU ESP8266.
OLED displej
Organic Light Emitting Diode (OLED) je druh světelné diody, kde vrstva emitující světlo, která je vyrobena z organické sloučeniny, emituje světlo, když je dodáván elektrický proud. Tato vrstva je umístěna mezi dvě elektrody. Tato technologie se používá na obrazovkách, jako jsou počítače, televizory, smartphony atd. OLED displeje mají své vlastní světlo a nepotřebují žádné podsvícení jako na LCD, proto jsou energeticky účinné a používají se u mnoha mikrokontrolérů. Další výhodou používání OLED displejů oproti LCD je zobrazování velké a lepší kvality grafiky na OLED. Další informace o technologii OLED Display najdete zde.
Na trhu jsou k dispozici různé druhy OLED displejů. Tyto displeje jsou charakterizovány na základě barvy, počtu pinů, IC řadiče a velikosti obrazovky. Na základě barev jsou OLED k dispozici v monochromatické modré, monochromatické bílé a žluté / modré barvě. A na základě komunikace jsou k dispozici hlavně dva typy OLED - 3pin a 7pin. 3kolíkový OLED lze použít v režimu komunikace I2C a 7kolíkový OLED lze použít buď v režimu SPI, nebo v režimu I2C.
V tomto tutoriálu použijeme OLED displej „ Monochrome 7-pin SSD1306 0,96 “, který je 128 pixelů široký a 64 pixelů dlouhý. Tento displej může fungovat na komunikačních protokolech SPI i I2C. V tomto kurzu použijeme protokol SPI. Na této OLED je přítomna jednotka SSD1306 IC, která pomáhá zobrazovat pixely na obrazovce.
Požadované komponenty
- Monochromatický 7pinový SSD1306 0,96 ”OLED displej
- NodeMCU ESP8266
- Kabel micro USB
- Nepájivá deska
- Propojovací vodiče mezi mužem a mužem
SPI Pin připojení mezi NodeMCU a OLED displejem
Níže je schéma zapojení 7 pinového OLED displeje s NodeMCU pro komunikaci pomocí sériového komunikačního protokolu SPI.
Níže uvedená tabulka ukazuje připojení mezi OLED displejem a NodeMCU ESP8266. Pin GND jde na NodeMCU GND, pin VDD lze připojit na 3,3 V nebo 5 V, SCK je pin hodin na OLED displeji, který je připojen k D5 NodeMCU pro hodiny SPI. Pin SDA, který je pinem MOSI na OLED rozhraní SPI, jde do D7 NodeMCU. Pin RESET přejde na D3. DC, datový příkazový kolík je připojen k D2 NodeMCU. Poslední pin je CS jde na D8, chip select z NodeMCU.
Ne. |
OLED displej |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3,3 V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) nebo SDA (I2C) |
D7 |
5 |
RESETOVAT |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Zde použijeme pro propojení OLED s NodeMCU knihovnu „ Adafruit _SSD1306.h“ a „ Adafruit_GFX.h “. Otevřete Arduino IDE a nainstalujte nejnovější verzi z Arduino IDE ( Skica> Zahrnout knihovnu> Spravovat knihovny nebo Ctrl + Shift_I ).
Protože velikost pixelu našeho OLED displeje je 128x64, musíme provést změnu v hlavičkovém souboru Adafruit_SSD1306. Otevřete knihovny Arduino, přejděte na Adafruit_SSD1306 a otevřete jeho záhlaví ( Adafruit _SSD1306.h ). Komentujte řádek „ #define SSD1306_128_32 “ a vložte řádek „#define SSD1306_128_64 “, jak je znázorněno na následujícím obrázku, a poté soubor uložte. Ve výchozím nastavení je tato knihovna dodávána s „# define SSD1306_128_32 “.
Nakonec změňte čísla pinů v příkladu „ ssd1306_128x64_spi “ Adafruit SSD1306 podle výše uvedené tabulky. Nyní, když spustíte náčrt po správném propojení OLED displeje s NodeMCU, uvidíte na OLED displeji logo Adafruit, které je ve výchozím nastavení uloženo v knihovně. Po logu Adafruit zobrazuje mnoho dalších grafik, jako jsou čáry, obdélníky, trojúhelníky, kruhy, řetězce, čísla, animace a bitmapy. Zde V tomto tutoriálu se naučíme, jak zobrazit jakýkoli obrázek na OLED s NodeMCU ESP8266.
Programování NodeMCU pro propojení OLED
Jako vždy je na konci uveden kompletní kód, zde jsme kód podrobně vysvětlili.
Spusťte kód importem potřebných knihoven. Protože používáme protokol SPI, importujeme knihovnu „SPI.h“ a také import „Adafruit_GFX.h“ a „Adafruit_SSD1306.h“ pro OLED displej.
#zahrnout
Naše velikost OLED je 128 x 64, takže nastavujeme šířku a výšku obrazovky na 128, respektive 64. Definujte tedy proměnné pro piny OLED připojené k NodeMCU pro komunikaci SPI.
#define SCREEN_WIDTH 128 // šířka displeje OLED, v pixelech #define SCREEN_HEIGHT 64 // výška displeje OLED, v pixelech // deklarace pro displej SSD1306 připojený pomocí softwaru SPI (výchozí pří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 pomocí SSD1306_SWITCHCAPVCC pro interní vygenerování 3,3 V pro inicializaci displeje.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("alokace SSD1306 selhala")); pro(;;); // Nepokračujte, smyčka navždy }
Displej OLED obrazovky je před zobrazením cokoli vymazán voláním funkce display.clearDisplay (). Máme -li nastavit velikost písma na 2 voláním funkce setTextSize (font-size), a nastavit barvu textu a pozici kurzoru pomocí setTextColor a setCursor funkci . Příkaz Display.display () se používá k přenosu dat do vnitřní paměti řadiče SSD1306. Po přenosu se na obrazovce zobrazí pixel. Nyní můžeme začít posouvat text různými způsoby voláním display.startscrollright (x-pos, y-pos) a display.startscrollleft (x-pos, y-pos) po dobu uvedenou ve funkci zpoždění. Rolování textu lze zastavit pomocí funkce display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // vymaže obrazovku OLED displeje. setTextSize (2); // Nakreslete text v 2X měřítku. SetTextColor (WHITE); display.setCursor (0, 0); display.println (F ("OKRUH")); display.println (F ("DIGEST")); display.display (); // Zobrazit počáteční zpoždění textu (100); // Rolování v různých směrech, pauza mezi nimi: display.startscrollright (0x00, 0x0F); zpoždění (2000); display.stopscroll (); zpoždění (1000); display.startscrollleft (0x00, 0x0F); zpoždění (2000); display.stopscroll (); zpoždění (1000); display.startscrolldiagright (0x00, 0x07); zpoždění (2000); display.startscrolldiagleft (0x00, 0x07); zpoždění (2000); display.stopscroll (); zpoždění (1000); }
Říkáme funkci display.drawBitmap (), která bere 6 parametrů (souřadnice x, souřadnice y, bitmapové pole, šířka, výška a barva) k nakreslení obrázku na OLED. Protože naše velikost displeje je 128x64, nastavili jsme šířku a výšku 128, respektive 64. Zde bitmapové pole obsahuje informace o pixelech, které nakreslí pixel na obrazovku a vytvoří obraz. Toto bitmapové pole lze generovat online, což je vysvětleno níže, nebo je k dispozici mnoho softwaru pro převod obrazu do bitmapového pole.
const nepodepsaný 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, 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, 0ff0, 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 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 0f 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, 0fff 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 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, 0xc0, 0x0, 0x0, 0x0, 0x00, 0x0 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 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, 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, 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, 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, 0x3 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, 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, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0x, 0xe0 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 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, BLACK, WHITE); display.display ();
Převeďte obrázek na hodnoty bitmapy
Online bitmapu lze vygenerovat z adresy http://javl.github.io/image2cpp/. Nahrajte obrazový soubor, který chcete zobrazit na OLED, a nastavte velikost 128x64. Zobrazí se náhled obrázku a poté se vygeneruje bitmapové pole.
Níže uvedené snímky obrazovky ukazují proces generování hodnoty bitmapy libovolného obrázku.
Nakonec nahrajte kompletní kód do NodeMCU ESP8266 a uvidíte obrázek zobrazený na OLED obrazovce. Zde zobrazujeme logo CircuitDigest na OLED displeji.