- OLED-skjerm
- Komponenter kreves
- SPI Pin-tilkoblinger mellom NodeMCU og OLED-skjerm
- Programmering av NodeMCU for grensesnitt OLED
- Konverter bilde til Bitmap-verdier
I denne opplæringen vil vi grensesnitt OLED Display med NodeMCU ESP8266. NodeMCU er en åpen kildekode-IoT-plattform som inkluderer fastvare som kjører på billig Wi-Fi-aktivert ESP8266 Wi-Fi SoC fra Espressif Systems. Den har GPIO-pinner for tilkobling av andre eksterne enheter, og den støtter seriell kommunikasjon ved hjelp av SPI-, I2C- og UART-pinner. Den har også pinner for ADC og PWM. Vi har tidligere koblet OLED til annen mikrokontroller, inkludert kontrolleren til ESP-familien (ESP32):
- Grensesnitt SSD1306 OLED-skjerm med Raspberry Pi
- Grensesnitt SSD1306 OLED-skjerm med Arduino
- Bygg en smart klokke ved å koble OLED-skjerm med Android-telefon ved hjelp av Arduino
- Internett-klokke med ESP32 og OLED-skjerm
I denne opplæringen vil vi bruke SPI-protokoll for å grensesnitt Monokrom 7-pin SSD1306 0,96 OLED-skjerm med NodeMCU og vil lære å vise bilde på OLED-skjerm med NodeMCU ESP8266.
OLED-skjerm
Organisk lysemitterende diode (OLED) er en slags lysemitterende diode der et lysemitterende lag som er laget av organisk forbindelse avgir lys når elektrisk strøm tilføres. Dette laget er plassert mellom to elektroder. Denne teknologien brukes i skjermer som datamaskiner, TV-apparater, smarttelefoner osv. OLED-skjermer har sitt eget lys og trenger ikke noe bakgrunnsbelysning som i LCD, derfor er de energieffektive og brukes med mange mikrokontrollere. En annen fordel med å bruke OLED-skjermer over LCD er å vise større og bedre grafikkvalitet på OLED-skjermer. Lær mer om OLED-skjermteknologi her.
Det finnes forskjellige typer OLED-skjermer tilgjengelig i markedet. Disse skjermene er karakterisert på grunnlag av farge, antall pinner, kontroller-IC og skjermstørrelse. På bakgrunn av farge er OLED-er tilgjengelig i monokromblå, monokrom hvit og gul / blå farge. Og på grunnlag av kommunikasjon er det hovedsakelig to typer OLED-er tilgjengelig - 3pin og 7pin. 3-pin OLED kan brukes i I2C-kommunikasjonsmodus og 7-pin OLED kan brukes i SPI-modus eller i I2C-modus.
I denne opplæringen vil vi bruke “ Monokrom 7-pin SSD1306 0.96 ” OLED-skjerm som er 128 piksler bred og 64 piksler lang. Denne skjermen kan fungere på både SPI- og I2C-kommunikasjonsprotokoller. Vi vil bruke SPI-protokollen i denne opplæringen. SSD1306 IC er tilstede på denne OLED som hjelper til med å vise pikslene på skjermen.
Komponenter kreves
- Monokrom 7-pinners SSD1306 0,96 ”OLED-skjerm
- NodeMCU ESP8266
- Micro USB-kabel
- Brettbrett
- Mann til hann Jumper ledninger
SPI Pin-tilkoblinger mellom NodeMCU og OLED-skjerm
Nedenfor er kretsdiagrammet for tilkobling av 7-pin OLED-skjerm med NodeMCU for å kommunisere ved hjelp av SPI seriell kommunikasjonsprotokoll.
Tabellen nedenfor viser forbindelsene mellom OLED Display og NodeMCU ESP8266. GND-pin går til NodeMCU GND, VDD-pin kan kobles til 3.3V eller 5V, SCK er klokkepinnen på OLED-skjermen som er koblet til D5 av NodeMCU for SPI-klokke. SDA-pinnen som er MOSI-pinne på OLED i SPI-grensesnittet går til D7 i NodeMCU. RESET-pinnen går til D3. DC, datakommandopinnen er koblet til D2 i NodeMCU. Den siste pinnen er at CS går til D8, chip-utvalg av NodeMCU.
Nei. |
Oled-skjerm |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3,3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) eller SDA (I2C) |
D7 |
5 |
NULLSTILLE |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Her vil vi bruke biblioteket " Adafruit _SSD1306.h" og " Adafruit_GFX.h " for å koble OLED til NodeMCU. Åpne Arduino IDE og installer den nyeste versjonen fra Arduino IDE ( Skisse> Inkluder bibliotek> Administrer biblioteker eller Ctrl + Shift_I ).
Siden pikselstørrelsen på OLED-skjerm-ID 128x64, må vi derfor endre endefilen til Adafruit_SSD1306. Åpne Arduino-bibliotekene, gå til Adafruit_SSD1306 og åpne toppteksten ( Adafruit _SSD1306.h ). Kommenter linjen " #define SSD1306_128_32 " og fjern kommentaren til linjen "#define SSD1306_128_64 " som vist på bildet nedenfor, og lagre filen. Som standard kommer dette biblioteket med "# define SSD1306_128_32 ".
Endelig endre pin-tallene i “ ssd1306_128x64_spi ” Adafruit SSD1306 eksempel i henhold til tabellen vist ovenfor. Nå når du kjører skissen etter å ha opprettet riktig tilkobling av OLED Display med NodeMCU, vil du se Adafruits logo på OLED-skjerm, som som standard er lagret i biblioteket. Etter Adafruit-logoen viser den mange andre grafikk som linjer, rektangler, trekant, sirkler, strenger, tall, animasjoner og bitmap. Her i denne opplæringen lærer vi hvordan du viser et hvilket som helst bilde på OLED med NodeMCU ESP8266.
Programmering av NodeMCU for grensesnitt OLED
Som alltid er fullstendig kode gitt på slutten, her har vi forklart koden i detalj.
Start koden ved å importere nødvendige biblioteker. Siden vi bruker SPI-protokoll, vil vi derfor importere "SPI.h" -biblioteket og også importere "Adafruit_GFX.h" og "Adafruit_SSD1306.h" for OLED Display.
#inkludere
Vår OLED-størrelse er 128x64, så vi setter skjermbredde og høyde til henholdsvis 128 og 64. Så definer variablene for OLED-pinner koblet til NodeMCU for SPI-kommunikasjon.
#define SCREEN_WIDTH 128 // OLED skjerm bredde i bildepunkter #define SCREEN_HEIGHT 64 // OLED skjerm høyde i bildepunkter // Dokumentasjon for SSD1306 skjerm som er koblet ved hjelp av programvare SPI (standard bokstaver): #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);
Initialiser OLED-skjermen ved å bruke SSD1306_SWITCHCAPVCC for å generere 3,3 V internt for å initialisere skjermen.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306 allocation failed")); til(;;); // Ikke fortsett, løkk for alltid }
Visningen av OLED-skjermen tømmes før du viser noe ved å ringe funksjonen display.clearDisplay (). Vi setter skriftstørrelsen til 2 ved å ringe funksjonen setTextSize (skriftstørrelse), og setter tekstfarge og markørposisjon ved å bruke setTextColor og setCursor- funksjonen . Display.display () -kommandoen brukes til å overføre data til internminnet til SSD1306-kontrolleren. Etter overføringen vises piksel på skjermen. Nå kan vi begynne å rulle teksten på forskjellige måter ved å ringe display.startscrollright (x-pos, y-pos) og display.startscrollleft (x-pos, y-pos) for tiden gitt i forsinkelsesfunksjon. Rulling av tekst kan stoppes ved hjelp av funksjonsvisning. Stopprull ().
void testscrolltext (void) {display.clearDisplay (); // fjern skjermbildet til OLED-displayet.setTextSize (2); // Tegn 2X-skala tekstvisning.setTextColor (WHITE); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Vis innledende tekstforsinkelse (100); // Bla i forskjellige retninger, og ta en pause i mellom: display.startscrollright (0x00, 0x0F); forsinkelse (2000); display.stopscroll (); forsinkelse (1000); display.startscrollleft (0x00, 0x0F); forsinkelse (2000); display.stopscroll (); forsinkelse (1000); display.startscrolldiagright (0x00, 0x07); forsinkelse (2000); display.startscrolldiagleft (0x00, 0x07); forsinkelse (2000); display.stopscroll (); forsinkelse (1000); }
Vi kaller display.drawBitmap () -funksjonen som tar 6 parametere (x-koordinat, y-koordinat, bitmappematrise, bredde, høyde og farge) for å tegne bildet på OLED. Siden skjermstørrelsen vår er 128x64, setter vi bredden og høyden til henholdsvis 128 og 64. Her inneholder bitmappearrayen pikselinformasjonen for å tegne pikslet på skjermen for å lage bildet. Denne bitmap-matrisen kan genereres online, som forklares nedenfor, eller det er mange programvare tilgjengelig for å konvertere bilde til bitmap-array.
const usignert røye myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x03, 0xff, 0xff, 0xff, 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, 0xff, 0xf0, 0x3e, 0x03, 0x3f, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 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 , 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xf9, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0xff, 0xff, 0xff, 0xff , 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0xff , 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 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, 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 0x0 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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, 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, SVART, HVIT); display.display ();
Konverter bilde til Bitmap-verdier
Online bitmap kan genereres fra http://javl.github.io/image2cpp/. Last opp bildefilen du vil vise på OLED, og sett størrelsen til 128x64. Et forhåndsvisningsbilde vises, og deretter genereres bitmap-array.
Nedenfor viser skjermbilder prosessen for å generere bitmapverdien til et bilde.
Til slutt laster du opp hele koden i NodeMCU ESP8266, og du vil se bildet vises på OLED-skjermen. Her viser vi CircuitDigest-logoen på OLED-skjermen.