- OLED-Anzeige
- Erforderliche Komponenten
- SPI-Pin-Verbindungen zwischen NodeMCU und OLED-Display
- Programmieren von NodeMCU für die Schnittstelle von OLED
- Bild in Bitmap-Werte konvertieren
In diesem Tutorial werden wir OLED Display mit NodeMCU ESP8266 verbinden. NodeMCU ist eine Open Source IoT-Plattform, die Firmware enthält, die auf dem kostengünstigen Wi-Fi-fähigen ESP8266 Wi-Fi SoC von Espressif Systems ausgeführt wird. Es verfügt über GPIO-Pins zum Anschließen anderer Peripheriegeräte und unterstützt die serielle Kommunikation über SPI-, I2C- und UART-Pins. Es hat auch Pins für ADC und PWM. Wir haben OLED zuvor mit anderen Mikrocontrollern verbunden, einschließlich dem Controller der ESP-Familie (ESP32):
- Schnittstelle zwischen SSD1306 OLED-Display und Raspberry Pi
- Verbindung des SSD1306 OLED-Displays mit Arduino
- Erstellen Sie eine Smart Watch, indem Sie das OLED-Display mit Arduino mit dem Android Phone verbinden
- Internetuhr mit ESP32 und OLED-Display
In diesem Tutorial verwenden wir das SPI-Protokoll, um das monochrome 7-polige SSD1306 0.96 OLED-Display mit NodeMCU zu verbinden, und lernen, das Bild mit NodeMCU ESP8266 auf dem OLED-Bildschirm anzuzeigen.
OLED-Anzeige
Die organische Leuchtdiode (OLED) ist eine Art Leuchtdiode, bei der eine aus einer organischen Verbindung bestehende Licht emittierende Schicht Licht emittiert, wenn elektrischer Strom zugeführt wird. Diese Schicht ist zwischen zwei Elektroden angeordnet. Diese Technologie wird in Bildschirmen wie Computern, Fernsehgeräten, Smartphones usw. verwendet. OLED-Displays verfügen über ein eigenes Licht und benötigen keine Hintergrundbeleuchtung wie bei LCD-Bildschirmen. Daher sind sie energieeffizient und werden mit vielen Mikrocontrollern verwendet. Ein weiterer Vorteil der Verwendung von OLED-Displays gegenüber LCD besteht darin, dass auf OLEDs eine große und bessere Grafikqualität angezeigt wird. Erfahren Sie hier mehr über die OLED-Display-Technologie.
Es gibt verschiedene Arten von OLED-Displays auf dem Markt. Diese Anzeigen werden anhand der Farbe, der Anzahl der Pins, des Controller-IC und der Größe des Bildschirms charakterisiert. Aufgrund der Farbe sind OLEDs in den Farben Monochromblau, Monochromweiß und Gelb / Blau erhältlich. Auf der Grundlage der Kommunikation stehen hauptsächlich zwei Arten von OLEDs zur Verfügung - 3-Pin und 7-Pin. Die 3-polige OLED kann im I2C-Kommunikationsmodus und die 7-polige OLED entweder im SPI-Modus oder im I2C-Modus verwendet werden.
In diesem Tutorial verwenden wir das OLED-Display „ Monochrome 7-Pin SSD1306 0.96 “ mit einer Breite von 128 Pixel und einer Länge von 64 Pixel. Diese Anzeige kann sowohl mit SPI- als auch mit I2C-Kommunikationsprotokollen verwendet werden. In diesem Tutorial wird das SPI-Protokoll verwendet. Auf dieser OLED befindet sich ein SSD1306-IC, mit dessen Hilfe die Pixel auf dem Bildschirm angezeigt werden können.
Erforderliche Komponenten
- Monochromes 7-poliges SSD1306 0,96-Zoll-OLED-Display
- NodeMCU ESP8266
- Micro-USB-Kabel
- Steckbrett
- Überbrückungsdrähte von Stecker zu Stecker
SPI-Pin-Verbindungen zwischen NodeMCU und OLED-Display
Unten finden Sie den Schaltplan für die Verbindung des 7-poligen OLED-Displays mit der NodeMCU zur Kommunikation über das serielle SPI-Kommunikationsprotokoll.
Die folgende Tabelle zeigt die Verbindungen zwischen OLED Display und NodeMCU ESP8266. GND-Pin geht an NodeMCU GND, VDD-Pin kann an 3,3 V oder 5 V angeschlossen werden, SCK ist der Clock-Pin auf dem OLED-Display, der für SPI-Clock an D5 von NodeMCU angeschlossen ist. Der SDA-Pin, der der MOSI-Pin an der OLED der SPI-Schnittstelle ist, geht an D7 der NodeMCU. Der RESET-Pin geht auf D3. DC ist der Datenbefehlspin mit D2 der NodeMCU verbunden. Der letzte Pin ist CS geht zu D8, Chipauswahl von NodeMCU.
Nein. |
Oled Anzeige |
NodeMCU |
1 |
GND |
GND |
2 |
VDD |
3,3V |
3 |
SCK |
D5 |
4 |
MOSI (SPI) oder SDA (I2C) |
D7 |
5 |
RESET |
D3 |
6 |
DC |
D2 |
7 |
CS |
D8 |
Hier verwenden wir die Bibliotheken " Adafruit _SSD1306.h" und " Adafruit_GFX.h " für die Verbindung von OLED mit NodeMCU. Öffnen Sie die Arduino IDE und installieren Sie die neueste Version der Arduino IDE ( Skizze> Bibliothek einschließen> Bibliotheken verwalten oder Strg + Umschalttaste ).
Da die Pixelgröße unserer OLED-Anzeige-ID 128 x 64 beträgt, müssen wir die Header-Datei von Adafruit_SSD1306 ändern. Öffnen Sie die Arduino-Bibliotheken, gehen Sie zu Adafruit_SSD1306 und öffnen Sie die Header-Datei ( Adafruit _SSD1306.h ). Kommentieren Sie die Zeile " #define SSD1306_128_32 " aus und kommentieren Sie die Zeile "#define SSD1306_128_64 " aus, wie in der folgenden Abbildung gezeigt, und speichern Sie die Datei. Standardmäßig enthält diese Bibliothek "# define SSD1306_128_32 ".
Ändern Sie abschließend die Pin-Nummern im Beispiel " ssd1306_128x64_spi " Adafruit SSD1306 gemäß der oben gezeigten Tabelle. Wenn Sie nun die Skizze ausführen, nachdem Sie das OLED-Display ordnungsgemäß mit NodeMCU verbunden haben, wird das Adafruit-Logo auf dem OLED-Display angezeigt, das standardmäßig in der Bibliothek gespeichert ist. Nach dem Adafruit-Logo werden viele andere Grafiken wie Linien, Rechtecke, Dreiecke, Kreise, Zeichenfolgen, Zahlen, Animationen und Bitmaps angezeigt. Hier In diesem Tutorial erfahren Sie, wie Sie mit NodeMCU ESP8266 ein Bild auf OLED anzeigen.
Programmieren von NodeMCU für die Schnittstelle von OLED
Da am Ende immer vollständiger Code angegeben ist, haben wir den Code hier ausführlich erläutert.
Starten Sie den Code, indem Sie die erforderlichen Bibliotheken importieren. Da wir das SPI-Protokoll verwenden, importieren wir daher die Bibliothek "SPI.h" sowie "Adafruit_GFX.h" und "Adafruit_SSD1306.h" für OLED Display.
#einschließen
Unsere OLED-Größe beträgt 128 x 64, daher stellen wir die Bildschirmbreite und -höhe auf 128 bzw. 64 ein. Definieren Sie daher die Variablen für OLED-Pins, die für die SPI-Kommunikation mit NodeMCU verbunden sind.
#define SCREEN_WIDTH 128 // OLED-Anzeigebreite in Pixel #define SCREEN_HEIGHT 64 // OLED-Anzeigehöhe in Pixel // Deklaration für SSD1306-Anzeige, die mit Software-SPI verbunden ist (Standardfall): #define OLED_MOSI D7 #define OLED_CLK D5 #define OLED_DC D2 # OLED_CS definieren D8 # OLED_RESET definieren D3 Adafruit_SSD1306-Anzeige (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Initialisieren Sie die OLED-Anzeige mithilfe von SSD1306_SWITCHCAPVCC, um intern 3,3 V zu generieren und die Anzeige zu initialisieren.
if (! display.begin (SSD1306_SWITCHCAPVCC)) { Serial.println (F ("SSD1306-Zuordnung fehlgeschlagen")); zum(;;); // Nicht fortfahren, für immer schleifen }
Die Anzeige des OLED-Bildschirms wird gelöscht, bevor etwas angezeigt wird, indem die Funktion display.clearDisplay () aufgerufen wird. Wir setzen die Schriftgröße auf 2 durch Aufruf der Funktion SetTextSize (font-size), und stellen Sie die Textfarbe und die Cursorposition durch die Verwendung SetTextColor und setCursor Funktion . Der Befehl Display.display () wird verwendet, um Daten in den internen Speicher des SSD1306-Controllers zu übertragen. Nach der Übertragung wird das Pixel auf dem Bildschirm angezeigt. Jetzt können wir den Text auf verschiedene Arten scrollen, indem wir display.startscrollright (x-pos, y-pos) und display.startscrollleft (x-pos, y-pos) aufrufen. für die in der Verzögerungsfunktion angegebene Zeit. Das Scrollen von Text kann mit der Funktion display.stopscroll () gestoppt werden.
void testscrolltext (void) {display.clearDisplay (); // lösche den Anzeigebildschirm der OLED display.setTextSize (2); // Text im 2X-Maßstab zeichnen display.setTextColor (WHITE); display.setCursor (0, 0); display.println (F ("CIRCUIT")); display.println (F ("DIGEST")); display.display (); // Anfängliche Textverzögerung anzeigen (100); // In verschiedene Richtungen scrollen und dazwischen pausieren: display.startscrollright (0x00, 0x0F); Verzögerung (2000); display.stopscroll (); Verzögerung (1000); display.startscrollleft (0x00, 0x0F); Verzögerung (2000); display.stopscroll (); Verzögerung (1000); display.startscrolldiagright (0x00, 0x07); Verzögerung (2000); display.startscrolldiagleft (0x00, 0x07); Verzögerung (2000); display.stopscroll (); Verzögerung (1000); }}
Wir rufen die Funktion display.drawBitmap () auf , die 6 Parameter (x-Koordinate, y-Koordinate, Bitmap-Array, Breite, Höhe und Farbe) verwendet, um das Bild auf OLED zu zeichnen. Da unsere Anzeigegröße 128x64 beträgt, setzen wir die Breite und Höhe auf 128 bzw. 64. Hier enthält das Bitmap-Array die Pixelinformationen zum Zeichnen des Pixels auf dem Bildschirm, um das Bild zu erstellen. Dieses Bitmap-Array kann online generiert werden, was weiter unten erläutert wird, oder es steht eine Vielzahl von Software zur Verfügung, um Bilder in Bitmap-Arrays zu konvertieren.
const unsigned char myBitmap PROGMEM = { 0xff, 0xff, 0xff, 0xe0, 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, 0xf7, 0xc0, 0x00, 0x1f, 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, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0f, 0x03, 0xff, 0xc0, 0x7f, 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, 0x3 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7C, 0x03, 0xF0, 0x3F, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x78, 0x00, 0xc0, 0x0f, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xe0, 0xff, 0x0 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xf0, 0x00, 0x00, 0x03, 0xf8, 0x7f, 0xff, 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, 0xf 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, 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, 0x01, 0xf0, 0x1f, 0x80, 0x00, 0x07, 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, 0xc0, 0x00, 0x07, 0xc0, 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, 0x80, 0x00, 0x1e, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0x00, 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, 0x00, 0x00, 0x7c, 0x03, 0x3f, 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, 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, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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 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, 0x80, 0x00, 0x03, 0xbc, 0x07, 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, 0xf0, 0x00, 0x1f, 0xff, 0x00, 0x1 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, 0x80, 0x03, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xc0, 0x00, 0x00, 0x0 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf 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, 0xf 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, 0x80, 0x03, 0xe0, 0x1b, 0xfc, 0x01, 0xff, 0xf 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x7f, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 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, 0x00 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, 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, 0xf0, 0x00, 0x00, 0x1f, 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, SCHWARZ, WEISS); display.display ();
Bild in Bitmap-Werte konvertieren
Online-Bitmap kann von http://javl.github.io/image2cpp/ generiert werden. Laden Sie die Bilddatei hoch, die auf der OLED angezeigt werden soll, und stellen Sie die Größe auf 128 x 64 ein. Ein Vorschaubild wird angezeigt und anschließend ein Bitmap-Array generiert.
Die folgenden Screenshots zeigen den Prozess zum Generieren des Bitmap-Werts eines beliebigen Bildes.
Laden Sie zum Schluss den vollständigen Code in NodeMCU ESP8266 hoch und Sie sehen das Bild auf dem OLED-Bildschirm. Hier zeigen wir das CircuitDigest-Logo auf dem OLED-Display an.