- OLED-skærm
- Komponenter, der kræves
- SPI-pin-forbindelser mellem NodeMCU og OLED-skærm
- Programmering af NodeMCU til interface OLED
- Konverter billede til bitmapværdier
I denne vejledning interagerer vi OLED Display med NodeMCU ESP8266. NodeMCU er en open source IoT-platform, der inkluderer firmware, der kører på billig Wi-Fi-aktiveret ESP8266 Wi-Fi SoC fra Espressif Systems. Den har GPIO-ben til tilslutning af andet perifert udstyr og understøtter seriel kommunikation ved hjælp af SPI-, I2C- og UART-ben. Det har også ben til ADC og PWM. Vi har tidligere interfacet OLED med anden mikrocontroller, herunder controlleren til ESP-familien (ESP32):
- Interfacing SSD1306 OLED-skærm med Raspberry Pi
- Interfacing SSD1306 OLED-skærm med Arduino
- Byg et smart ur ved at interfacere OLED-skærm med Android-telefon ved hjælp af Arduino
- Internetur ved hjælp af ESP32 og OLED Display
I denne vejledning bruger vi SPI-protokol til at grænseflade Monokrom 7-pin SSD1306 0,96 OLED-skærm med NodeMCU og lærer at vise billede på OLED-skærm med NodeMCU ESP8266.
OLED-skærm
Organisk lysemitterende diode (OLED) er en slags lysemitterende diode, hvor et lysemitterende lag, der er lavet af organisk forbindelse, udsender lys, når der leveres elektrisk strøm. Dette lag er placeret mellem to elektroder. Denne teknologi bruges i displayskærme som computere, fjernsyn, smartphones osv. OLED-skærme har deres eget lys og har ikke brug for nogen baggrundsbelysning som i LCD, derfor er de strømbesparende og bruges sammen med mange mikrokontroller. En yderligere fordel ved at bruge OLED-skærme over LCD er at vise større og bedre grafikkvalitet på OLED'er. Lær mere om OLED-skærmteknologi her.
Der findes forskellige slags OLED-skærme på markedet. Disse skærme er karakteriseret på baggrund af farve, antal ben, controller IC og skærmens størrelse. På baggrund af farve fås OLED'er i monokromblå, monokrom hvid og gul / blå farve. Og på basis af kommunikation er der hovedsagelig to typer OLED'er tilgængelige - 3pin og 7pin. 3-pin OLED kan bruges i I2C-kommunikationstilstand og 7-pin OLED kan bruges enten i SPI-tilstand eller i I2C-tilstand.
I denne vejledning bruger vi “ Monochrome 7-pin SSD1306 0.96 ” OLED-skærm, der er 128 pixels bred og 64 pixels lang. Dette display kan fungere på både SPI- og I2C-kommunikationsprotokoller. Vi bruger SPI-protokol i denne vejledning. SSD1306 IC er til stede på denne OLED, som hjælper med at vise pixels på skærmen.
Komponenter, der kræves
- Monokrom 7-polet SSD1306 0,96 ”OLED-skærm
- NodeMCU ESP8266
- Micro USB-kabel
- Brødbræt
- Mandlige til mandlige jumpertråde
SPI-pin-forbindelser mellem NodeMCU og OLED-skærm
Nedenfor er kredsløbsdiagrammet til tilslutning af 7-polet OLED-skærm med NodeMCU for at kommunikere ved hjælp af SPI seriel kommunikationsprotokol.
Nedenstående tabel viser forbindelserne mellem OLED Display og NodeMCU ESP8266. GND-pin går til NodeMCU GND, VDD-pin kan tilsluttes til 3,3 V eller 5 V, SCK er urstiften på OLED-skærm, der er forbundet til D5 i NodeMCU til SPI-ur. SDA-stiften, som er MOSI-stift på OLED i SPI-grænsefladen, går til D7 i NodeMCU. RESET-stiften går til D3. DC, datakommandotappen er forbundet til D2 i NodeMCU. Den sidste pin er CS går til D8, chipvalg af NodeMCU.
Ingen. |
Oled-skærm |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3.3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) eller SDA (I2C) |
D7 |
5 |
NULSTIL |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Her vil vi bruge biblioteket " Adafruit _SSD1306.h" og " Adafruit_GFX.h " til at interfacere OLED med NodeMCU. Åbn Arduino IDE, og installer den nyeste version fra Arduino IDE ( Skitse> Inkluder bibliotek> Administrer biblioteker eller Ctrl + Shift_I ).
Da pixelstørrelsen på vores OLED-skærm-id 128x64 er vi derfor nødt til at foretage en ændring i headerfilen til Adafruit_SSD1306. Åbn Arduino-bibliotekerne, gå til Adafruit_SSD1306, og åbn dens headerfil ( Adafruit _SSD1306.h ). Kommenter linjen " #definer SSD1306_128_32 " og fjern kommentar til linjen "#definer SSD1306_128_64 " som vist i nedenstående billede, og gem derefter filen. Som standard leveres dette bibliotek med "# define SSD1306_128_32 ".
Til sidst skal du ændre pin-numrene i “ ssd1306_128x64_spi ” Adafruit SSD1306 eksempel i henhold til tabellen vist ovenfor. Nu når du kører skitsen efter korrekt tilslutning af OLED-skærm med NodeMCU, vil du se Adafruit's logo på OLED-skærm, som som standard er gemt i biblioteket. Efter Adafruit-logoet viser det mange andre grafik som linjer, rektangler, trekant, cirkler, strenge, tal, animationer og bitmap. Her i denne vejledning lærer vi, hvordan man viser ethvert billede på OLED med NodeMCU ESP8266.
Programmering af NodeMCU til interface OLED
Som altid gives komplet kode i slutningen, her har vi forklaret koden i detaljer.
Start koden ved at importere nødvendige biblioteker. Da vi bruger SPI-protokol, vil vi derfor importere "SPI.h" -biblioteket og også importere "Adafruit_GFX.h" og "Adafruit_SSD1306.h" til OLED Display.
#omfatte
Vores OLED-størrelse er 128x64, så vi indstiller skærmbredde og højde til henholdsvis 128 og 64. Så definer variablerne for OLED-pins forbundet til NodeMCU til SPI-kommunikation.
#define SCREEN_WIDTH 128 // OLED-skærmbredde, i pixels #define SCREEN_HEIGHT 64 // OLED-skærmhøjde, i pixels // Erklæring til SSD1306-skærm forbundet med software SPI (standardtilstand): #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-skærmen ved at bruge SSD1306_SWITCHCAPVCC til at generere 3,3 V internt for at initialisere skærmen.
hvis (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306 allokering mislykkedes")); til(;;); // Fortsæt ikke, loop for evigt }
Visningen af OLED-skærmen ryddes, inden der vises noget ved at kalde funktionen display.clearDisplay (). Vi indstiller skriftstørrelsen til 2 ved at kalde funktionen setTextSize (skriftstørrelse) og indstille tekstfarven og markørpositionen ved hjælp af setTextColor og setCursor- funktionen . Display.display () -kommandoen bruges til at overføre data til den interne hukommelse på SSD1306-controlleren. Efter overførslen vises pixel på skærmen. Nu kan vi begynde at rulle teksten på forskellige måder ved at kalde display.startscrollright (x-pos, y-pos) og display.startscrollleft (x-pos, y-pos) for den tid, der er angivet i forsinkelsesfunktionen. Rulning af tekst kan stoppes ved hjælp af funktionsvisning. Stopscroll ().
ugyldig testscrolltext (ugyldig) {display.clearDisplay (); // ryd skærmbilledet for OLED display.setTextSize (2); // Tegn 2X-skala tekst display.setTextColor (HVID); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Vis indledende tekstforsinkelse (100); // Rul i forskellige retninger, hold pause imellem: 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 kalder display.drawBitmap () -funktionen, der tager 6 parametre (x-koordinat, y-koordinat, bitmap-array, bredde, højde og farve) for at tegne billedet på OLED. Da vores skærmstørrelse er 128x64, indstiller vi bredden og højden til henholdsvis 128 og 64. Her indeholder bitmap-arrayet pixelinformationen til at tegne pixel på skærmen for at oprette billedet. Dette bitmap-array kan genereres online, hvilket forklares nedenfor, eller der er mange tilgængelige software til at konvertere billede til bitmap-array.
const usigneret char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 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, 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, 0xff, 0x0f, 0x03, 0xff, 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, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 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, 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, 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, 0xf, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 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, 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, 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, 0xff, 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, 0xff, 0xff, 0xff , 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xE0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x03, 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, 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, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 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, 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, 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, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xfc, 0x00, 0x00, 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, 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, 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, 0xfe, 0x00, 0x0e, 0x30, 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, 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, 0x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7, 0xff, 0xff, 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, 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, 0xff }; display.drawBitmap (35, 0, myBitmap, 128, 64, BLACK, WHITE); display.display ();
Konverter billede til bitmapværdier
Online bitmap kan genereres fra http://javl.github.io/image2cpp/. Upload den billedfil, du vil have vist på OLED, og indstil størrelsen til 128x64. Et eksempelbillede vises, og derefter genereres bitmap-array.
Nedenfor viser skærmbilleder processen til at generere bitmapværdien for ethvert billede.
Endelig upload den komplette kode til NodeMCU ESP8266, og du vil se billedet vises på OLED-skærmen. Her viser vi CircuitDigest-logoet på OLED-skærmen.