Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Bonjour, 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.
Étape 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-URL:"
ein (Bild 2). Damit bekommen wir den benötigten Zugang zu dem passenden Boardtreiber.
Jetzt können wir den Passenden Boardtreiber installieren
(Conseil Werkzeuge: 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)
Étape 2: I2C Schnittstelle Scannen
Um zu sehen an welche PINs das OLED-Display angeschlossen wurde, scannen wir zuerst die I2C-Schnittstelle. Donc können 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 könnt Ihr dann sehen, welches Device wo gefunden wurde. (Bild 2 - Numérisation du code PIN numérique)
Das Ergebnis merken.
En diesem Fall: SDA = D1: SCL = D2 bei Adresse 0x3c
Étape 3: Demo-Sketch Anpassen Und Auf Den ESP Hochladen
Das ist der Code für das OLED-Display DEMO
Im 5. Abschnitt findet Ihr die Stelle an der der Code ggf. modifiziert werden muss.
Die Konfiguration für die I2C-Schnittstelle.
Aus diesem Code könnt Ihr euch auch viele Infos über die Benutzung eines OLEDs ableiten.
/** * La licence MIT (MIT) * * Copyright (c) 2016 par Daniel Eichhorn * * L'autorisation est par la présente accordée, à titre gratuit, à toute personne obtenant une copie * de ce logiciel et des fichiers de documentation associés (le "Logiciel"), de traiter * dans le logiciel sans restriction, y compris, sans limitation, les droits * d'utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier et/ou vendre * des copies du logiciel, et d'autoriser les personnes à qui le logiciel est * fourni pour ce faire, sous réserve des conditions suivantes: * * L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les * copies ou parties substantielles du logiciel. * * LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU * IMPLICITE, Y COMPRIS MAIS SANS S'Y LIMITER LES GARANTIES DE QUALITÉ MARCHANDE, * D'ADAPTATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS LES * AUTEURS OU TITULAIRES DE DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE * RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION DE CONTRAT, DÉLIT OU AUTRE, DÉCOULANT DE, * DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU AUTRE AFFAIRES DANS LE * LOGICIEL. * *
/ Inclure la bibliothèque d'affichage correcte
// Pour une connexion via I2C en utilisant Wire, incluez #include // pour I2C Wire #include "SSD1306.h" // alias pour `#include "SSD1306Wire.h"`
// Inclure des images personnalisées
#include "images.h"
// Initialiser l'affichage OLED en utilisant brzo_i2c
// D3 -> SDA // D5 -> SCL // Affichage SSD1306 (0x3c, D1, D2); ou affichage SSD1306 (0x3c, 5, 4); ou affichage SSD1306 (0x3c, GPIO5, GPIO4);
**************************************************************************************************
An der folgenden Stelle werden dann die PINs für die I2C Schnittstelle konfiguriert
// Initialiser l'affichage OLED à l'aide de la bibliothèque Wire
Affichage SSD1306 (0x3c, D1, D2);
***************************************************************************************************
#define DEMO_DURATION 3000
typedef void (*Demo)(void);
int demoMode = 0;
compteur int = 1;
void setup() {
Serial.begin(9600); Serial.println("OLED_DEMO"); Serial.println("Démarrer la DEMO");
// L'initialisation de l'interface utilisateur initialise également l'affichage.
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
}
void drawFontFaceDemo() {
// Font Demo1 Serial.println("Font DEMO 1"); // créer plus de polices sur 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, "Les robots sont \n le futur, et le futur, c'est maintenant. Mais n'oubliez pas la nature"); }
void drawTextAlignmentDemo() {
Serial.println("drawTextAlignmentDemo"); // Démo d'alignement de texte display.setFont(ArialMT_Plain_10); // Schriftart und -größe einstellen
// Les coordonnées définissent le point de départ gauche du texte
display.setTextAlignment(TEXT_ALIGN_LEFT); // Text_Ausrichtung einstellen display.drawString(0, 10, "Aligné à gauche (0, 10)");
// Les coordonnées définissent le centre du texte
display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 22, "Centre aligné (64, 22)");
// Les coordonnées définissent l'extrémité droite du texte
display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(128, 33, "Aligné à droite (128, 33)"); }
void drawRectDemo() {
Serial.println("drawRectDemo"); // Dessine un pixel à une position donnée pour (int i = 0; i < 10; i++) { display.setPixel(i, i); display.setPixel(10 - i, i); } display.drawRect(12, 12, 20, 20);
// Remplir le rectangle
display.fillRect(14, 14, 17, 17);
// Trace une ligne horizontalement
display.drawHorizontalLine (0, 40, 20);
// Trace une ligne horizontalement
display.drawVerticalLine (40, 0, 20); }
void drawCircleDemo() {
Serial.println("drawCircleDemo"); for (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 progression = (compteur / 5) % 100; // dessine la barre de progression display.drawProgressBar(0, 32, 120, 10, progress);
// dessine le pourcentage sous forme de chaîne
display.setTextAlignment(TEXT_ALIGN_CENTER); display.drawString(64, 15, String(progress) + "%"); }
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"); // voir https://blog.squix.org/2015/05/esp8266-nodemcu-how… // sur la façon de créer des fichiers xbm 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)); long timeSinceLastModeSwitch = 0;
boucle vide() {
// efface l'affichage display.clear(); // dessine la méthode de démonstration actuelle demos[demoMode]();
display.setTextAlignment(TEXT_ALIGN_RIGHT);
display.drawString(10, 128, String(millis())); // écrit le tampon sur l'affichage display.display();
if (millis() - timeSinceLastModeSwitch > DEMO_DURATION) {
demoMode = (demoMode + 1) % demoLength; timeSinceLastModeSwitch = millis(); } compteur++; retard(10); }
Étape 4: Outils, liens et 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