/SSD1306_OLED_2_Displays.ino Secret
Created
April 10, 2021 14:08
Star
You must be signed in to star a gist
OLED-Diplays mit SSD1306-Chipsatz am ESP32 (Beispielprogramme; siehe https://unsinnsbasis.de/oled-display-ssd1306/)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* SSD1306 OLED-Display 128*64 Pixel | |
* und | |
* SD1306 OLED-Display 128*32 Pixel | |
* gleichzeitig ansprechen | |
* | |
* 2020-11-15 Heiko (unsinnsbasis.de) | |
*/ | |
// Bibliothek für das Display | |
// bindet auch <Adafruit_GFX.h>, <SPI.h>, <Wire.h> ein | |
#include <Adafruit_SSD1306.h> | |
// großes Display am Standard-I2C-Interface | |
// (SDA Pin 21, SCL Pin 22) | |
// I2C-Adresse des Displays (0x3C oder 0x3D) | |
#define DISPLAY_1_I2C_ADDRESS 0x3C | |
// Auflösung des SSD1306-OLED-Displays | |
#define DISPLAY_1_WIDTH 128 // Breite in Pixeln | |
#define DISPLAY_1_HEIGHT 64 // Höhe in Pixeln | |
// kleines Display am zweiten I2C-Interface | |
// (SDA Pin 17, SCL Pin 16) | |
#define I2C_2_SDA 17 | |
#define I2C_2_SCL 16 | |
// I2C-Adresse des Displays (0x3C oder 0x3D) | |
#define DISPLAY_2_I2C_ADDRESS 0x3C | |
// Auflösung des SSD1306-OLED-Displays | |
#define DISPLAY_2_WIDTH 128 // Breite in Pixeln | |
#define DISPLAY_2_HEIGHT 32 // Höhe in Pixeln | |
// je I2C-Kanal ein Interface definieren | |
TwoWire I2C_1 = TwoWire(0); | |
TwoWire I2C_2 = TwoWire(1); | |
// Datenstrukturen für die Displays | |
// (-1 -> Display hat keinen Reset-Pin) | |
Adafruit_SSD1306 display1(DISPLAY_1_WIDTH, DISPLAY_1_HEIGHT, &I2C_1, -1); | |
Adafruit_SSD1306 display2(DISPLAY_2_WIDTH, DISPLAY_2_HEIGHT, &I2C_2, -1); | |
// Bitrate für die Datenübertragung zum seriellen Monitor | |
// (ESP: z.B. 115200, Arduino: zwingend 9600) | |
#define BITRATE 115200 // Arduino: 9600 | |
void setup() { | |
bool status1, status2; | |
// Übertragungsrate zum seriellen Monitor setzen | |
Serial.begin(BITRATE); | |
Serial.println("Test mit 2 OLED-Displays"); | |
// beide I2C-Interfaces nutzen | |
I2C_1.begin(); // Standard-Interface | |
I2C_2.begin(I2C_2_SDA, I2C_2_SCL); // 2. Interface | |
// Displays initialisieren | |
// im Fehlerfall Meldung ausgeben und Programm nicht | |
// fortsetzen (leere Dauerschleife)) | |
status1 = display1.begin(SSD1306_SWITCHCAPVCC, DISPLAY_1_I2C_ADDRESS); | |
status2 = display2.begin(SSD1306_SWITCHCAPVCC, DISPLAY_2_I2C_ADDRESS); | |
if (!(status1 & status2)) { | |
Serial.println("Fehler beim Initialisieren der Displays"); | |
Serial.print("Status Display 1: "); | |
Serial.print(status1); | |
Serial.print(" - Status Display 2: "); | |
Serial.print(status2); | |
Serial.println(" (1=OK)"); | |
for (;;) ; | |
} | |
display1.clearDisplay(); | |
display1.setTextSize(2); // große Schrift | |
display1.setTextColor(SSD1306_WHITE); // helle Schrift auf dunklem Grund | |
display1.setCursor(0, 0); | |
display1.print(" Grosse\nBuchstaben\n in vier\n Zeilen"); | |
display1.display(); | |
display2.clearDisplay(); | |
display2.setTextSize(1); // kleine bzw. Standard-Schrift | |
display2.setTextColor(SSD1306_WHITE); // helle Schrift auf dunklem Grund | |
display2.setCursor(0, 0); | |
display2.println("Mit dem Unsinn lebt"); | |
display2.println("es sich leichter als"); | |
display2.println("mit der Sinnlosigkeit"); | |
display2.print("(Ernst Reinhardt)"); | |
display2.display(); | |
} | |
void loop() { | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* SSD1306 OLED-Display 128*64 Pixel | |
* | |
* Anzeige der darstellbaren Zeichen | |
* | |
* 2020-11-15 Heiko (unsinnsbasis.de) | |
*/ | |
// Bibliothek für das Display | |
// bindet auch <Adafruit_GFX.h>, <SPI.h>, <Wire.h> ein | |
#include <Adafruit_SSD1306.h> | |
// I2C-Adresse des Displays (0x3C oder 0x3D) | |
#define DISPLAY_I2C_ADDRESS 0x3C | |
// Auflösung des SSD1306-OLED-Displays | |
#define DISPLAY_WIDTH 128 // Breite in Pixeln | |
#define DISPLAY_HEIGHT 64 // Höhe in Pixeln | |
// Datenstruktur für das Display | |
// - Verbindung per I2C (Standard-Pins SCL, SDA) | |
// - Display hat keinen Reset-Pin | |
Adafruit_SSD1306 display(DISPLAY_WIDTH, DISPLAY_HEIGHT, &Wire, -1); | |
// Bitrate für die Datenübertragung zum seriellen Monitor | |
// (ESP: z.B. 115200, Arduino: zwingend 9600) | |
#define BITRATE 115200 // Arduino: 9600 | |
int16_t i, j; | |
void setup() { | |
// Übertragungsrate zum seriellen Monitor setzen | |
Serial.begin(BITRATE); | |
// Display initialisieren | |
// im Fehlerfall Meldung ausgeben und Programm nicht | |
// fortsetzen (leere Dauerschleife)) | |
if (!display.begin(SSD1306_SWITCHCAPVCC, DISPLAY_I2C_ADDRESS)) { | |
Serial.println("SSD1306 nicht gefunden"); | |
for (;;) ; | |
} | |
} | |
void loop() { | |
display.clearDisplay(); // Display(buffer) löschen | |
display.setTextSize(1); // kleine Schriftgröße (Höhe 8px) | |
display.setTextColor(SSD1306_WHITE); // helle Schrift, dunkler Grund) | |
display.setCursor(0, 0); // links oben anfangen | |
display.cp437(true); // Zeichensatz der Codepage 437 verwenden | |
// erste Hälfte der Codepage (Zeichen 0-127) | |
for (i=0; i<8; i++) { | |
if (i == 0) { | |
display.print("00 "); | |
} else { | |
display.print(i<<4, HEX); | |
display.write(" "); | |
} | |
for (j=0; j<16; j++) { | |
if (i*16+j == '\n') | |
display.write(" "); | |
else | |
display.write(i*16+j); | |
} | |
display.write("\n"); // neue Zeile | |
} | |
display.display(); | |
delay(5000); | |
display.clearDisplay(); | |
display.setCursor(0, 0); | |
// zweite Hälfte der Codepage (Zeichen 128-255) | |
for (i=8; i<16; i++) { | |
display.print(i<<4, HEX); | |
display.write(" "); | |
for (j=0; j<16; j++) { | |
display.write(i*16+j); | |
} | |
display.write("\n"); // neue Zeile | |
} | |
display.display(); | |
delay(5000); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Messung von Sensorwerten: DHT11 | |
* (Temperatur und rel. Luftfeuchtigkeit) | |
* | |
* Anzeige der Messwerte auf OLED-Display | |
* Typ SSD1306 128*32 Pixel | |
* | |
* 2020-11-15 Heiko (unsinnsbasis.de) | |
*/ | |
// Bibliotheken für den DHT11/22-Sensor | |
#include <Adafruit_Sensor.h> | |
#include <DHT.h> | |
#define DHTPIN 4 // Pin für Sensor-DATA | |
// Sensor-Typ: DHT11, DHT21 (AM2301) oder DHT22 (AM2302) | |
#define DHTTYPE DHT11 | |
DHT dht(DHTPIN, DHTTYPE); // Datenstruktur für den Sensor | |
// Bibliotheken für das Display | |
#include <SPI.h> | |
#include <Wire.h> | |
#include <Adafruit_GFX.h> | |
#include <Adafruit_SSD1306.h> | |
// I2C-Adresse des Displays (0x3C oder 0x3D) | |
#define DISPLAY_I2C_ADDRESS 0x3C | |
// Auflösung des SSD1306-OLED-Displays | |
#define DISPLAY_WIDTH 128 // Breite in Pixeln | |
#define DISPLAY_HEIGHT 32 // Höhe in Pixeln | |
// Datenstruktur für das Display | |
// - Verbindung per I2C (Standard-Pins SCL, SDA) | |
// - Display hat keinen Reset-Pin (-1) | |
Adafruit_SSD1306 display(DISPLAY_WIDTH, DISPLAY_HEIGHT, &Wire, -1); | |
// Bitrate für die Datenübertragung zum seriellen Monitor | |
// (ESP: z.B. 115200, Arduino: zwingend 9600) | |
#define BITRATE 9600 // Arduino: 9600 | |
float temp, hum; // Variablen für Temperatur und Luftfeuchtigkeit | |
void setup() { | |
// Übertragungsrate zum seriellen Monitor setzen | |
Serial.begin(BITRATE); | |
dht.begin(); // Sensor initialisieren | |
// Display initialisieren | |
// im Fehlerfall Meldung ausgeben und Programm nicht | |
// fortsetzen (leere Dauerschleife)) | |
if(!display.begin(SSD1306_SWITCHCAPVCC, DISPLAY_I2C_ADDRESS)) { | |
Serial.println("SSD1306 nicht gefunden"); | |
for(;;); | |
} | |
} | |
void loop() { | |
temp = dht.readTemperature(); | |
hum = dht.readHumidity(); | |
display.clearDisplay(); // Display(puffer) löschen | |
display.setTextSize(1); // kleine Schriftgröße (Höhe 8px) | |
display.setTextColor(WHITE); // helle Schrift, dunkler Grund) | |
display.setCursor(0, 0); // links oben anfangen | |
if (isnan(temp)) { | |
Serial.println("Fehler beim Auslesen des DHT-Sensors."); | |
} else { | |
display.print("Temperatur: "); | |
display.print(temp, 1); | |
display.print("\xF7"); // Grad-Symbol ° in Codepage 437 | |
display.println("C"); | |
} | |
// gleiches Vorgehen für die Luftfeuchtigkeit | |
if (isnan(hum)) { | |
Serial.println("Fehler beim Auslesen des DHT-Sensors."); | |
} else { | |
display.print("rel. Feuchte: "); | |
display.print(hum, 1); | |
display.println("%"); | |
} | |
// alle bisher nur in den Puffer geschriebenen Daten anzeigen | |
display.display(); | |
delay(5000); // vor der nächsten Messung etwas warten | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment