Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Hallo, Hier möchte ich Euch zeigen wie Ihr das mit auf der Hauptplatine verbaute OLED Display benutzen/ansteuern könnt. Um es möglichst einfach zu halten, benutze ich die ARDUINO GUI zum Schreiben des CODEs und zum Hochladen der Firmware.
Schritt 1: Einstellen / Einrichten Der ARDUINO GUI
Als erstes muss das ESP8266 Board in der ARDUINO GUI verfügbar gemacht werden.
Dazu gehen wir in die Einstellungen (Datei Einstellungen / Bild 1) der GUI und tragen unter
"Zusätzliche Boardverwalter-URLs:"
ein (Bild 2). Damit bekommen wir den benötigten Zugang zu dem passenden Boardtreiber.
Jetzt können wir den Passenden Boardtreiber installieren
(Werkzeuge Board: Boardverwaltung / Bild 3)
- Dort im Suchfeld "esp8266" eintragen
- Dann "esp8266 by ESP8266 Community" auswählen und die aktuellste Version installieren (Bild 4)
- Die ARDUINO GUI neu starten
- Danach das passende Board auswählen (z. B.: WeMos D1 R2 & mini)
Schritt 2: I2C Schnittstelle Scannen
Um zu sehen, welche PINs das OLED-Display angeschlossen wurde, scannen wir zuerst die I2C-Schnittstelle. So can wir auch sehen ob noch weitere I2C-Parts angeschlossen sind.
Den Sketch (Bild 1) auf den ESP Hochladen, den "Seriellen-Monitor" öffnen und auf die Ausgabe warten. Dort kannst du dann sehen, welches Gerät wo gefunden wurde. (Bild 2 - DigitalPIN-Scan)
Das Ergebnis merken.
In diesem Fall: SDA = D1: SCL = D2 bei Adresse 0x3c
Schritt 3: Demo-Sketch Anpassen Und Auf Den ESP Hochladen
Das ist der Code für das OLED-Display DEMO
Im 5. Abschnitt findet Ihr sterben Stelle an der Code ggf. modifiziert werden muss.
Auch die Konfiguration für die I2C-Schnittstelle.
Aus diesem Code können Sie auch viele Infos über die Benutzung eines OLEDs ableiten.
/** * Die MIT-Lizenz (MIT) * * Copyright (c) 2016 by Daniel Eichhorn * * Hiermit wird jeder Person, die eine Kopie * dieser Software und der zugehörigen Dokumentationsdateien (die "Software"), ohne Einschränkung * mit der Software zu handeln, einschließlich und ohne Einschränkung der Rechte * zur Nutzung, zum Kopieren, Modifizieren, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und/oder Verkaufen * von Kopien der Software, und Personen zu gestatten, denen die Software wird * dazu bereitgestellt, vorbehaltlich der folgenden Bedingungen: * * Der obige Copyright-Hinweis und dieser Erlaubnishinweis müssen in alle * Kopien oder wesentlichen Teile der Software aufgenommen werden. * * DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER * STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTFÄHIGKEIT, * EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG DER GEWÄHRLEISTUNG. IN KEINEM FALL HAFTET DIE * AUTOREN ODER URHEBERRECHTSINHABER FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE * HAFTUNG, OB AUS VERTRAGLICHEM, SCHLECHTER ODER ANDERWEITIGEN, * AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREM HANDELN IN DER * SOFTWARE. * *
/ Fügen Sie die richtige Anzeigebibliothek hinzu
// Für eine Verbindung über I2C mit Wire include #include // für I2C Wire #include "SSD1306.h" // Alias für `#include "SSD1306Wire.h"`
// Benutzerdefinierte Bilder einfügen
#include "images.h"
// Initialisieren Sie das OLED-Display mit brzo_i2c
// D3 -> SDA // D5 -> SCL // SSD1306-Anzeige (0x3c, D1, D2); oder SSD1306-Anzeige (0x3c, 5, 4); oder SSD1306-Anzeige (0x3c, GPIO5, GPIO4);
**************************************************************************************************
An der following Stelle Werden Dann sterben PINs für die I2C Schnittstelle konfiguriert
// Initialisieren Sie das OLED-Display mit der Wire-Bibliothek
SSD1306-Anzeige (0x3c, D1, D2);
***************************************************************************************************
#define DEMO_DURATION 3000
typedef void (*Demo)(void);
int DemoMode = 0;
int-Zähler = 1;
Leere Einrichtung () {
Serial.begin (9600); Serial.println("OLED_DEMO"); Serial.println ("Starte die DEMO");
// Durch Initialisieren der Benutzeroberfläche wird auch die Anzeige initialisiert.
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
}
void drawFontFaceDemo() {
// Schriftart Demo1 Serial.println ("Schrift DEMO 1"); // weitere Schriftarten erstellen unter https://oleddisplay.squix.ch/ display.setTextAlignment(TEXT_ALIGN_LEFT); display.setFont(ArialMT_Plain_10); display.drawString(0, 0, "ProMoScout"); display.setFont(ArialMT_Plain_16); display.drawString(0, 10, "ProMoScout"); display.setFont(ArialMT_Plain_24); display.drawString(0, 26, "ProMoScout"); }
void drawTextFlowDemo() {
Serial.println ("drawTextFlowDemo"); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawStringMaxWidth(0, 0, 128, "Roboter sind \n die Zukunft, und die Zukunft ist jetzt. Aber vergiss die Natur nicht"); }
void drawTextAlignmentDemo() {
Serial.println ("drawTextAlignmentDemo"); // Demo zur Textausrichtung display.setFont(ArialMT_Plain_10); // Schriftart und -größe einstellen
// Die Koordinaten definieren den linken Anfangspunkt des Textes
display.setTextAlignment(TEXT_ALIGN_LEFT); // Text_Ausrichtung einstellen display.drawString(0, 10, "linksbündig (0, 10)");
// Die Koordinaten definieren den Mittelpunkt des Textes
display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 22, "Mittig ausgerichtet (64, 22)");
// Die Koordinaten definieren das rechte Ende des Textes
display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(128, 33, "Rechtsbündig (128, 33)"); }
void drawRectDemo() {
Serial.println ("drawRectDemo"); // Zeichnen Sie ein Pixel an einer bestimmten Position für (int i = 0; i < 10; i++) { display.setPixel(i, i); display.setPixel(10 - i, i); } display.drawRect(12, 12, 20, 20);
// Fülle das Rechteck aus
display.fillRect(14, 14, 17, 17);
// Ziehe eine Linie horizontal
display.drawHorizontalLine(0, 40, 20);
// Ziehe eine Linie horizontal
display.drawVerticalLine(40, 0, 20); }
void drawCircleDemo() {
Serial.println ("drawCircleDemo"); für (int i=1; i <8; i++) { display.setColor (WHITE); display.drawCircle(32, 32, i*3); if (i % 2 == 0) { display.setColor (BLACK); } display.fillCircle(96, 32, 32 - i* 3); } }
void drawProgressBarDemo() {
Serial.println ("drawProgressBarDemo"); int progress = (Zähler / 5) % 100; // den Fortschrittsbalken zeichnen display.drawProgressBar(0, 32, 120, 10, progress);
// Zeichne den Prozentsatz als String
display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 15, String(Fortschritt) + "%"); }
Der folgende Link im Kommentar kann helfen ein Bild oder Logo so umzuwandeln, das es auf dem Display angezeigt werden kann …
void drawImageDemo() {
Serial.println ("drawImageDemo"); // siehe https://blog.squix.org/2015/05/esp8266-nodemcu-how… // zum Erstellen von xbm-Dateien display.drawXbm(34, 0, Logo_width, Logo_height, Logo_bits); }
Demo demos = {drawFontFaceDemo, drawTextFlowDemo, drawTextAlignmentDemo, drawRectDemo, drawCircleDemo, drawProgressBarDemo, drawImageDemo};
int demoLength = (sizeof(Demos) / sizeof(Demo)); langes timeSinceLastModeSwitch = 0;
Leere Schleife () {
// Anzeige löschen display.clear(); // Zeichne die aktuelle Demo-Methode demos[demoMode]();
display.setTextAlignment(TEXT_ALIGN_RIGHT);
display.drawString(10, 128, String(millis())); // den Puffer in das Display schreiben display.display();
if (millis() - timeSinceLastModeSwitch > DEMO_DURATION) {
demoMode = (demoMode + 1) % demoLength; timeSinceLastModeSwitch = millis(); } Zähler++; Verzögerung(10); }
Schritt 4: Tools, Links und Herkunft/Literaturhinweis
Ich möchte mich bei allen bedanken, die an dem ein oder anderen Code mit gewirkt haben.
Die Grundlagen für diese Anleitung habe ich gefunden unter:
www.instructables.com/id/ESP8266-I2C-PORT-…
github.com/ThingPulse/esp8266-oled-ssd1306…
Viele Grüße
McUtty