- Pantalla OLED
- Components necessaris
- Connexions de pin SPI entre NodeMCU i pantalla OLED
- Programació de NodeMCU per a la interfície OLED
- Converteix la imatge en valors de mapa de bits
En aquest tutorial farem una interfície de pantalla OLED amb NodeMCU ESP8266. NodeMCU és una plataforma IoT de codi obert que inclou microprogramari que funciona amb el SoC Wi-Fi ESP8266 habilitat per Wi-Fi de baix cost d'Espressif Systems. Té pins GPIO per connectar altres perifèrics i admet la comunicació en sèrie mitjançant pins SPI, I2C i UART. També té pins per ADC i PWM. Prèviament hem interficat OLED amb altres microcontroladors, inclòs el controlador de la família ESP (ESP32):
- Interfície de la pantalla OLED SSD1306 amb Raspberry Pi
- Interfície de la pantalla OLED SSD1306 amb Arduino
- Construeix un rellotge intel·ligent mitjançant la interfície de la pantalla OLED amb el telèfon Android mitjançant Arduino
- Rellotge d'Internet mitjançant ESP32 i pantalla OLED
En aquest tutorial utilitzarem el protocol SPI per connectar la pantalla OLED SSD1306 0,96 monocroma de 7 pins amb NodeMCU i aprendrem a mostrar la imatge a la pantalla OLED amb NodeMCU ESP8266.
Pantalla OLED
El díode emissor de llum orgànic (OLED) és un tipus de díode emissor de llum en què una capa emissora de llum, que es compon de compost orgànic, emet llum quan es subministra corrent elèctric. Aquesta capa es col·loca entre dos elèctrodes. Aquesta tecnologia s'utilitza en pantalles de visualització com ara ordinadors, televisors, telèfons intel·ligents, etc. Les pantalles OLED tenen llum pròpia i no necessiten cap retroil·luminació com a la pantalla LCD, per tant són eficients en termes de consum i s'utilitzen amb molts microcontroladors. Un avantatge més d’utilitzar pantalles OLED sobre LCD és mostrar gràfics grans i de millor qualitat als OLED. Obteniu més informació sobre la tecnologia de visualització OLED aquí.
Hi ha diversos tipus de pantalles OLED disponibles al mercat. Aquestes pantalles es caracteritzen segons el color, el nombre de pins, el controlador IC i la mida de la pantalla. En funció del color, els OLED estan disponibles en color blau monocrom, blanc monocrom i groc / blau. I, sobre la base de la comunicació, hi ha disponibles principalment dos tipus d’OLED: 3pin i 7pin. El OLED de 3 pins es pot utilitzar en mode de comunicació I2C i el OLED de 7 pins es pot utilitzar en mode SPI o en mode I2C.
En aquest tutorial utilitzarem una pantalla OLED " monocroma de 7 pins SSD1306 0,96 " que té 128 píxels d'ample i 64 píxels de llarg. Aquesta pantalla pot funcionar tant en protocols de comunicació SPI com en I2C. Utilitzarem el protocol SPI en aquest tutorial. SSD1306 IC està present en aquest OLED, que ajuda a mostrar els píxels a la pantalla.
Components necessaris
- Pantalla OLED SSD1306 de 7 pins monocroma
- NodeMCU ESP8266
- Cable micro USB
- Taula de pa
- Filferros de pont masculí a masculí
Connexions de pin SPI entre NodeMCU i pantalla OLED
A continuació es mostra el diagrama de circuits per connectar la pantalla OLED de 7 pins amb NodeMCU per comunicar-se mitjançant el protocol de comunicació serial SPI.

A la taula següent es mostren les connexions entre la pantalla OLED i el NodeMCU ESP8266. El pin GND va a NodeMCU GND, el pin VDD es pot connectar a 3,3V o 5V, SCK és el pin de rellotge de la pantalla OLED que està connectat a D5 de NodeMCU per al rellotge SPI. El pin SDA que és el pin MOSI a la interfície OLED de SPI va a D7 de NodeMCU. El pin RESET va a D3. CC, el pin d'ordres de dades està connectat a D2 de NodeMCU. L'últim pin és que CS va a D8, selecció de xip de NodeMCU.
|
No. |
Pantalla Oled |
NodeMCU |
|
1 |
GND |
GND |
|
2 |
VDD |
3,3V |
|
3 |
SCK |
D5 |
|
4 |
MOSI (SPI) o SDA (I2C) |
D7 |
|
5 |
RESTABLEIX |
D3 |
|
6 |
DC |
D2 |
|
7 |
CS |
D8 |
Aquí utilitzarem la biblioteca " Adafruit _SSD1306.h" i " Adafruit_GFX.h " per a la interfície OLED amb NodeMCU. Obriu Arduino IDE i instal·leu la versió més recent d'Arduino IDE ( Sketch> Inclou biblioteca> Gestiona biblioteques o Ctrl + Shift_I ).

Com que la mida de píxels de la nostra pantalla OLED és de 128x64, per tant hem de fer un canvi al fitxer de capçalera d'Adafruit_SSD1306. Obriu les biblioteques Arduino, aneu a Adafruit_SSD1306 i obriu el fitxer de capçalera ( Adafruit _SSD1306.h ). Comenteu la línia " #define SSD1306_128_32 " i descomenteu la línia "#define SSD1306_128_64 " tal com es mostra a la imatge següent i deseu el fitxer. Per defecte, aquesta biblioteca inclou "# define SSD1306_128_32 ".

Finalment, canvieu els números de pin de l' exemple Adafruit SSD1306 " ssd1306_128x64_spi " segons la taula que es mostra a la part superior. Ara, quan executeu l’esbós després de fer una connexió adequada de la pantalla OLED amb NodeMCU, veureu el logotip d’Adafruit a la pantalla OLED que, per defecte, es guarda a la biblioteca. Després del logotip d'Adafruit mostra molts altres gràfics com ara línies, rectangles, triangles, cercles, cadenes, números, animacions i mapa de bits. Aquí En aquest tutorial aprendrem com mostrar qualsevol imatge en OLED amb NodeMCU ESP8266.

Programació de NodeMCU per a la interfície OLED
Com sempre es proporciona un codi complet al final, aquí hem explicat el codi amb detall.
Comenceu el codi important les biblioteques necessàries. Com que fem servir el protocol SPI, importarem la biblioteca "SPI.h" i també importarem "Adafruit_GFX.h" i "Adafruit_SSD1306.h" per a la pantalla OLED.
#incloure
La nostra mida OLED és de 128x64, de manera que configurem l'amplada i l'alçada de la pantalla com a 128 i 64 respectivament. Definiu, doncs, les variables dels pins OLED connectats a NodeMCU per a la comunicació SPI.
#define SCREEN_WIDTH 128 // OLED ample de la pantalla, en píxels #define SCREEN_HEIGHT 64 // OLED alçada de la pantalla, en píxels // Declaració per a la visualització SSD1306 connectat usant SCI programari (cas per defecte): #define OLED_MOSI D7 #define OLED_CLK D5 #define OLED_DC D2 #define OLED_CS D8 #define OLED_RESET D3 Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Inicialitzeu la pantalla OLED mitjançant SSD1306_SWITCHCAPVCC per generar 3.3V internament per inicialitzar la pantalla.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("Ha fallat l'assignació SSD1306")); per (;;); // No continueu, bucleu per sempre }
La visualització de la pantalla OLED s’esborra abans de mostrar res trucant a la funció display.clearDisplay (). Ens fixem la mida de la font a 2 cridant a la funció SetTextSize (font-size), i establim el color de el text i la posició de l'indicador mitjançant l'ús de SetTextColor i setCursor funció . L' ordre Display.display () s'utilitza per transferir dades a la memòria interna del controlador SSD1306. Després de la transferència, el píxel apareix a la pantalla. Ara podem començar a desplaçar-nos pel text de diverses maneres trucant a display.startscrollright (x-pos, y-pos) i display.startscrollleft (x-pos, y-pos) pel temps donat en funció de retard. Es pot aturar el desplaçament del text mitjançant la funció display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // esborreu la pantalla de visualització OLED display.setTextSize (2); // Dibuixa text a escala 2X display.setTextColor (BLANC); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Mostra el retard inicial del text (100); // Desplaceu-vos en diverses direccions, fent una pausa entre: display.startscrollright (0x00, 0x0F); endarreriment (2000); display.stopscroll (); retard (1000); display.startscrollleft (0x00, 0x0F); endarreriment (2000); display.stopscroll (); retard (1000); display.startscrolldiagright (0x00, 0x07); endarreriment (2000); display.startscrolldiagleft (0x00, 0x07); endarreriment (2000); display.stopscroll (); retard (1000); }
Anomenem la funció display.drawBitmap () que pren 6 paràmetres (coordenada x, coordenada y, matriu de mapa de bits, amplada, alçada i color) per dibuixar la imatge en OLED. Com que la mida de la nostra pantalla és de 128x64, per tant, establim l'amplada i l'alçada de 128 i 64 respectivament. Aquí la matriu de mapa de bits conté la informació de píxels per dibuixar el píxel a la pantalla per crear la imatge. Aquesta matriu de mapes de bits es pot generar en línia, cosa que s’explica a continuació o hi ha molts programes disponibles per convertir la imatge en matriu de mapes de bits.
const unsigned char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 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, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xcx, 0x 0x,, 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, 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, 0xfe, 0xfe 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 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, 0xfx, 0x0, 0x0 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, 0xff, 0x80 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, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00 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, 0x00, 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, 0x0, 0x0 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, 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, 0x00, 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 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, 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, 0xff 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0x, 0x03, 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, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 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, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 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, 0x1, 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, 0xff, 0xff, 0xff, 0xff 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, NEGRE, BLANC); display.display ();
Converteix la imatge en valors de mapa de bits
El mapa de bits en línia es pot generar des de http://javl.github.io/image2cpp/. Pengeu el fitxer d'imatge que vulgueu mostrar a l'OLED i configureu la mida com a 128x64. Es mostrarà una imatge de vista prèvia i es generarà una matriu de mapes de bits.
A sota de les captures de pantalla es mostra el procés per generar el valor del mapa de bits de qualsevol imatge.


Finalment, pengeu el codi complet a NodeMCU ESP8266 i veureu la imatge que es mostra a la pantalla OLED. Aquí mostrem el logotip de CircuitDigest a la pantalla OLED.

