- OLED-scherm
- Componenten vereist
- SPI Pin-verbindingen tussen NodeMCU en OLED-display
- NodeMCU programmeren voor het koppelen van OLED
- Converteer afbeelding naar bitmapwaarden
In deze tutorial zullen we OLED-display koppelen aan NodeMCU ESP8266. NodeMCU is een open source IoT-platform dat firmware bevat die draait op de goedkope Wi-Fi ESP8266 Wi-Fi SoC van Espressif Systems. Het heeft GPIO-pinnen voor het aansluiten van andere randapparatuur en ondersteunt seriële communicatie met behulp van SPI-, I2C- en UART-pinnen. Het heeft ook pinnen voor ADC en PWM. We hebben OLED eerder gekoppeld aan andere microcontrollers, waaronder de controller van de ESP-familie (ESP32):
- Koppeling SSD1306 OLED-scherm met Raspberry Pi
- Koppeling SSD1306 OLED-scherm met Arduino
- Bouw een smartwatch door het OLED-display te koppelen aan een Android-telefoon met Arduino
- Internetklok met ESP32 en OLED-display
In deze tutorial zullen we het SPI-protocol gebruiken om een monochroom 7-pins SSD1306 0.96 OLED-scherm te koppelen aan NodeMCU en leren we om afbeeldingen weer te geven op het OLED-scherm met NodeMCU ESP8266.
OLED-scherm
Organic Light Emitting Diode (OLED) is een soort Light Emitting Diode waarbij een lichtgevende laag die is gemaakt van organische verbinding licht uitzendt wanneer elektrische stroom wordt geleverd. Deze laag wordt tussen twee elektroden geplaatst. Deze technologie wordt gebruikt in beeldschermen zoals computers, televisies, smartphones enz. OLED-beeldschermen hebben hun eigen licht en hebben geen achtergrondverlichting nodig, zoals bij lcd-schermen, daarom zijn ze energiezuinig en worden ze met veel microcontrollers gebruikt. Nog een voordeel van het gebruik van OLED-schermen ten opzichte van LCD-schermen is het weergeven van grote en betere grafische afbeeldingen op OLED's. Lees hier meer over OLED-displaytechnologie.
Er zijn verschillende soorten OLED-schermen op de markt. Deze displays worden gekarakteriseerd op basis van kleur, aantal pinnen, controller IC en grootte van het scherm. Op basis van kleur zijn OLED's verkrijgbaar in monochroom blauw, monochroom wit en geel / blauwe kleur. En op basis van communicatie zijn er voornamelijk twee soorten OLED's beschikbaar: 3-pins en 7-pins. 3-pins OLED kan worden gebruikt in de I2C-communicatiemodus en 7-pins OLED kan worden gebruikt in de SPI-modus of in de I2C-modus.
In deze tutorial gebruiken we " Monochrome 7-pins SSD1306 0.96 " OLED-display dat 128 pixels breed en 64 pixels lang is. Dit display kan werken met zowel SPI- als I2C-communicatieprotocollen. We zullen het SPI-protocol gebruiken in deze tutorial. SSD1306 IC is aanwezig op deze OLED die helpt om de pixels op het scherm weer te geven.
Componenten vereist
- Monochroom 7-pins SSD1306 OLED-scherm van 0,96 inch
- NodeMCU ESP8266
- Micro USB-kabel
- Breadboard
- Male naar Male Jumper-draden
SPI Pin-verbindingen tussen NodeMCU en OLED-display
Hieronder vindt u het schakelschema voor het aansluiten van een 7-pins OLED-display met NodeMCU om te communiceren met behulp van het SPI-seriële communicatieprotocol.
Onderstaande tabel toont de verbindingen tussen OLED-scherm en NodeMCU ESP8266. GND-pin gaat naar NodeMCU GND, VDD-pin kan worden aangesloten op 3.3V of 5V, SCK is de klokpin op het OLED-scherm die is verbonden met D5 van NodeMCU voor SPI-klok. De SDA-pin, de MOSI-pin op de OLED of SPI-interface, gaat naar D7 van NodeMCU. De RESET-pin gaat naar D3. DC, de gegevensopdrachtpin is verbonden met D2 van NodeMCU. De laatste pin is CS gaat naar D8, chipselectie van NodeMCU.
Nee. |
Oled-scherm |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3.3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) of SDA (I2C) |
D7 |
5 |
RESET |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Hier gebruiken we de " Adafruit _SSD1306.h" en " Adafruit_GFX.h " -bibliotheek om OLED te koppelen aan NodeMCU. Open Arduino IDE en installeer de nieuwste versie van Arduino IDE ( Sketch> Bibliotheek opnemen> Bibliotheken beheren of Ctrl + Shift_I ).
Aangezien de pixelgrootte van ons OLED-scherm 128x64 is, moeten we daarom een wijziging aanbrengen in het headerbestand van Adafruit_SSD1306. Open de Arduino-bibliotheken, ga naar Adafruit_SSD1306 en open het header-bestand ( Adafruit _SSD1306.h ). Geef commentaar op de regel " #define SSD1306_128_32 " en verwijder commentaar bij de regel "#define SSD1306_128_64 " zoals weergegeven in de onderstaande afbeelding en sla het bestand vervolgens op. Standaard wordt deze bibliotheek geleverd met "# define SSD1306_128_32 ".
Verander tenslotte de pincodes in “ ssd1306_128x64_spi ” Adafruit SSD1306 voorbeeld volgens de bovenstaande tabel. Wanneer u nu de schets uitvoert nadat u de juiste verbinding hebt gemaakt tussen het OLED-scherm en NodeMCU, ziet u het logo van Adafruit op het OLED-scherm dat standaard in de bibliotheek wordt opgeslagen. Na het Adafruit-logo worden vele andere afbeeldingen weergegeven, zoals lijnen, rechthoeken, driehoeken, cirkels, tekenreeksen, getallen, animaties en bitmap. Hier in deze tutorial zullen we leren hoe we een afbeelding op OLED kunnen weergeven met NodeMCU ESP8266.
NodeMCU programmeren voor het koppelen van OLED
Zoals altijd wordt aan het einde de volledige code verstrekt, hier hebben we de code in detail uitgelegd.
Start de code door de benodigde bibliotheken te importeren. Omdat we het SPI-protocol gebruiken, zullen we de "SPI.h" -bibliotheek importeren en ook "Adafruit_GFX.h" en "Adafruit_SSD1306.h" importeren voor OLED-display.
# omvatten
Ons OLED-formaat is 128x64, dus we stellen de schermbreedte en -hoogte in op respectievelijk 128 en 64. Dus definieer de variabelen voor OLED-pinnen die zijn verbonden met NodeMCU voor SPI-communicatie.
#define SCREEN_WIDTH 128 // OLED-schermbreedte, in pixels #define SCREEN_HEIGHT 64 // OLED-schermhoogte, in pixels // Verklaring voor SSD1306-scherm verbonden met software SPI (standaardgeval): #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);
Initialiseer het OLED-scherm door SSD1306_SWITCHCAPVCC te gebruiken om intern 3,3V te genereren om het scherm te initialiseren.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306-toewijzing mislukt")); voor(;;); // Ga niet verder, loop voor altijd }
De weergave van het OLED-scherm wordt gewist voordat iets wordt weergegeven door functiedisplay.clearDisplay () aan te roepen. We stellen de lettergrootte tot 2 door te bellen naar de functie setTextSize (font-size), en stel de tekstkleur en cursor met behulp van SetTextColor en SetCursor functie . De opdracht Display.display () wordt gebruikt om gegevens over te dragen naar het interne geheugen van de SSD1306-controller. Na de overdracht verschijnt pixel op het scherm. Nu kunnen we op verschillende manieren door de tekst scrollen door display.startscrollright (x-pos, y-pos) en display.startscrollleft (x-pos, y-pos) aan te roepen voor de tijd gegeven in de vertragingsfunctie. Het scrollen van tekst kan worden gestopt met de functie display.stopscroll ().
void testscrolltext (void) {display.clearDisplay (); // wis het weergavescherm van het OLED-scherm. setTextSize (2); // Teken tekstweergave op schaal 2X. SetTextColor (WIT); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Toon initiële tekstvertraging (100); // Scroll in verschillende richtingen, tussendoor pauzerend: display.startscrollright (0x00, 0x0F); vertraging (2000); display.stopscroll (); vertraging (1000); display.startscrollleft (0x00, 0x0F); vertraging (2000); display.stopscroll (); vertraging (1000); display.startscrolldiagright (0x00, 0x07); vertraging (2000); display.startscrolldiagleft (0x00, 0x07); vertraging (2000); display.stopscroll (); vertraging (1000); }
We noemen de functie display.drawBitmap () die 6 parameters (x-coördinaat, y-coördinaat, bitmap-array, breedte, hoogte en kleur) nodig heeft om de afbeelding op OLED te tekenen. Omdat onze weergavegrootte 128x64 is, stellen we de breedte en hoogte in op respectievelijk 128 en 64. Hier bevat de bitmap-array de pixelinformatie om de pixel op het scherm te tekenen om de afbeelding te maken. Deze bitmap-array kan online worden gegenereerd, wat hieronder wordt uitgelegd, of er is veel software beschikbaar om afbeeldingen om te zetten in een bitmap-array.
const unsigned char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7 0x00xc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xc0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xffx, 0xff, 0xffx, 0xff, 0xffx, 0xff, 0xffx, 0xff, 0xff, 0xff, 0xc7, 0x80, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x01, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xffx, 0xff, 0xffx, 0xff , 0xffx, 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, 0x07, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7c, 0x03, 0xf0, 0x3f, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80x, 0xff, 0x80x 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 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, 0xfc, 0x01, 0xfc, 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, 0xff80, 0xffx, 0xff80, 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, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0xe0, 0x00, 0xe0 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, 0x00, 0x0 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80 0x0f, 0x80, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0x00, 0x80, 0x00, 0x00, 0xff01, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1, 0x00, 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, 0xff03, 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, 0x 0xf8, 0x01, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xffx00, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00x, 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, 0x00x, 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 0x03, 0xb0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x03, 0xbc, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x, 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, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0f, 0xff, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0x 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, 0xff00, 0x1ff, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x0e, 0x30, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x, 0x07, 0x70, 0x00, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 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, 0xff00, 0xff1f, 0xff 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7e, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x, 0x00, 0x00, 0x3c, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0xff03, 0xff, 0xff, 0xff, 0x, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x 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, ZWART, WIT); display.display ();
Converteer afbeelding naar bitmapwaarden
Een online bitmap kan worden gegenereerd vanaf http://javl.github.io/image2cpp/. Upload het afbeeldingsbestand dat u op de OLED wilt weergeven en stel de grootte in op 128x64. Een voorbeeldafbeelding wordt weergegeven en vervolgens wordt een bitmap-array gegenereerd.
Onderstaande schermafbeeldingen tonen het proces om de bitmapwaarde van een afbeelding te genereren.
Upload ten slotte de volledige code naar NodeMCU ESP8266 en u ziet de afbeelding op het OLED-scherm. Hier geven we het CircuitDigest-logo weer op het OLED-scherm.