Ein 0,96 Zoll OLED Display I²C mit 128×64 Pixel und ein Arduino

Passend zum gerade vorgestellten OLED-Display schliessen wir in diesem Tutorial selbiges an einen Arduino an und lassen eine kleine Grafikdemonstration darauf laufen.

Ein 0,96 Zoll OLED Display I²C mit 128x64 Pixel und ein Arduino - blog.simtronyx.de

Ein 0,96 Zoll OLED Display I2C mit 128×64 Pixel und ein Arduino – blog.simtronyx.de

Schaltplan:

Die Verkabelung zwischen unserem OLED-Display und dem Arduino ist, mit lediglich 4 Kabeln, denkbar einfach und geschieht nach folgendem Schema:

Arduino (Uno, Nano, Pro Mini) 0,96 OLED Display I²C
A4 (SDA) SDA
A5 (SCL) SCL
5V VCC
GND GND

Sourcecode (Sketch):

Bevor wir den Sketch auf unseren Arduino aufspielen müssen wir noch 2 Bibliotheken installieren. Das wäre einserseits die Adafruit_SSD1306-Bibliothek zur Ansteuerung des Displaytreibers und dann noch die Adafruit_GFX-Bibliothek für die Grafikausgaben.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4 // not used / nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);

void setup()   {                

	// initialize with the I2C addr 0x3C / mit I2C-Adresse 0x3c initialisieren
	display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
	
	// random start seed / zufälligen Startwert für Random-Funtionen initialisieren
	randomSeed(analogRead(0));
}

#define DRAW_DELAY 118
#define D_NUM 47

int i;

void loop() {
  
	display.clearDisplay();
	
	// set text color / Textfarbe setzen
	display.setTextColor(WHITE);
	// set text size / Textgroesse setzen
	display.setTextSize(1);
	// set text cursor position / Textstartposition einstellen
	display.setCursor(1,0);
	// show text / Text anzeigen
	display.println("OLED - Display - Test");
	display.setCursor(14,56);
	display.println("blog.simtronyx.de");
	display.setTextSize(2);
	display.setCursor(34,15);
	display.println("Hello");
	display.setCursor(30,34);
	display.println("World!");
	display.display();
	delay(8000);
	display.clearDisplay();
	
	// invert the display / Display invertieren
	display.invertDisplay(true);
	delay(2000); 
	display.invertDisplay(false);
	delay(1000); 
  
	// draw some random pixel / zufaellige Pixel anzeigen
	for(i=0;i<380;i++){
		display.drawPixel(random(128),random(64), WHITE);
		display.display();
	}
	delay(DRAW_DELAY);
	display.clearDisplay();

	// draw some random lines / zufaellige Linien anzeigen
	for(i=0;i<D_NUM;i++){
		display.drawLine(random(128),random(64),random(128),random(64), WHITE);
		display.display();
		delay(DRAW_DELAY);
		display.clearDisplay();		
	}

	// draw some random triangles / zufaellige Dreiecke anzeigen
	for(i=0;i<D_NUM;i++){
		if(random(2))display.drawTriangle(random(128),random(64),random(128),random(64), random(128),random(64), WHITE); // normal
		else display.fillTriangle(random(128),random(64),random(128),random(64), random(128),random(64), WHITE);		 // filled / ausgefuellt
		display.display();
		delay(DRAW_DELAY);
		display.clearDisplay();		
	}

	// draw some random rectangles / zufaellige Rechtecke anzeigen
	for(i=0;i<D_NUM;i++){
		int rnd=random(4);
		if(rnd==0)display.drawRect(random(88),random(44),random(40),random(20), WHITE); 							// normal
		else if(rnd==1)display.fillRect(random(88),random(44),random(40),random(20), WHITE);						// filled / ausgefuellt
		else if(rnd==2)display.drawRoundRect(random(88),random(44),random(30)+10,random(15)+5,random(5), WHITE);	// normal with rounded edges / normal mit abgerundeten Ecken
		else display.fillRoundRect(random(88),random(44),random(30)+10,random(15)+5,random(5), WHITE);				// filled with rounded edges / ausgefuellt mit  mit abgerundeten Ecken
		display.display();
		delay(DRAW_DELAY);
		display.clearDisplay();		
	}

	// draw some random circles / zufaellige Kreise anzeigen
	for(i=0;i<D_NUM;i++){
		if(random(2))display.drawCircle(random(88)+20,random(44)+20,random(10), WHITE);	// normal
		else display.fillCircle(random(88)+20,random(44)+20,random(10), WHITE);			// filled / ausgefuellt
		display.display();
		delay(DRAW_DELAY);
		display.clearDisplay();		
	}

}


Download Source Code

Wie man sieht, würde es sich von der Größe her beispielsweise perfekt als Anzeige für einen Radiowecker oder ähnliches eignen.

Bauteile (Bezugsquellen):

eBay: 0.96 Zoll OLED Display I2C
Arduino
Arduino Uno
Breadboard
Breadboard Kabel
Amazon: 0.96 Zoll OLED Display I2C
Arduino
Arduino Uno
Breadboard
Breadboard Kabel

Gut?

Facebooktwittergoogle_plusredditpinterestlinkedinmailFacebooktwittergoogle_plusredditpinterestlinkedinmail