Arduino kod i video za SSD1306 OLED 128 x 32 ekran sa I2C
U ovom tutorijalu ćemo istražiti kako koristiti SSD1306 OLED 128 x 32 displej sa I2C komunikacijom na Arduinu. Cilj je prikazati različite elemente kao što su tekst, pravougaonici i dinamičke vrijednosti poput napona i temperature na ekranu. Ova postavka je idealna za projekte koji zahtijevaju kompaktno i efikasno rješenje za prikaz.

Proći ćemo kroz potrebne hardverske komponente, upute za povezivanje i Arduino kod kako bismo sve pokrenuli. Za vizualni vodič, obavezno pogledajte video koji prati ovaj tutorijal (u videu na 00:00).
Objašnjenje hardvera
Ključne komponente za ovaj projekt uključuju SSD1306 OLED displej, koji je displej niske potrošnje koji koristi I2C komunikaciju za jednostavno povezivanje. Displej ima rezoluciju od 128 x 32 piksela, što ga čini pogodnim za prikaz teksta i jednostavne grafike.
Za kontrolu displeja koristit ćemo Arduino ploču, koja će slati komande i podatke putem I2C-a. Arduino upravlja logikom prikaza informacija koristeći biblioteke kao što su Adafruit_GFX i Adafruit_SSD1306. Ove biblioteke pojednostavljuju proces komunikacije i omogućavaju jednostavno crtanje oblika i teksta.
Detalji iz tehničke dokumentacije
| Proizvođač | Adafruit |
|---|---|
| Broj dijela | SSD1306 |
| Logički/IO napon | 3.3 - 5 V |
| Napon napajanja | 3.3 - 5 V |
| Potrošnja struje | ~20 mA (tip.) |
| Rezolucija displeja | 128 x 32 piksela |
| Interfejs | I2C |
| Dimenzije | 128 x 32 mm |
| Napomene / varijante | Dostupan u različitim veličinama i interfejsima |
- Provjerite I2C adresu, obično 0x3C za OLED displeje.
- Osigurajte odgovarajuće napajanje kako biste izbjegli oštećenja.
- Koristite pull-up otpornike za SDA i SCL linije ako je potrebno.
- Držite žice kratkim kako biste smanjili šum u I2C signalu.
- Razmotrite odvođenje topline ako napajate više modula.
Upute za povezivanje

Za povezivanje SSD1306 OLED displeja, prvo spojite VCC pin displeja na 5V izlaz na Arduinu. Zatim spojite GND pin na jedan od uzemljenih pinova Arduina. Za I2C komunikaciju, spojite SDA pin displeja na SDA pin na Arduinu, koji je A4 za UNO. Zatim spojite SCL pin displeja na SCL pin na Arduinu, koji je A5 za UNO. Ako koristite drugačiji model Arduina, pogledajte specifično mapiranje pinova za SDA i SCL.
Za dodatne komponente, ako imate LED koju želite kontrolirati, spojite je na pin 9 kroz otpornik od 330 oma. Obavezno spojite drugi kraj otpornika na anodu LED-a, dok katoda treba ići na uzemljenje. Ova postavka će omogućiti da LED zasvijetli kada je pin 9 aktiviran.
Primjeri koda i objašnjenje
U Arduino kodu, počinjemo uključivanjem potrebnih biblioteka za OLED displej. Ključni identifikator je display, koji je instanca klase Adafruit_SSD1306. Displej se inicijalizira u funkciji setup(), gdje također čistimo displej kako bismo se pripremili za crtanje.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}
U funkciji loop(), definiramo string varijablu vString koja drži vrijednost napona, koja se dinamički ažurira. Funkcija robojaxText() se koristi za prikaz teksta na ekranu na specificiranim koordinatama.
void loop() {
String vString = String(count, 3);
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
display.display();
count += 0.173;
delay(2000);
}
Funkcija robojaxText() je ključna za pozicioniranje i prikaz teksta. Prima parametre za tekstualni string, x i y koordinate, veličinu teksta i boolean vrijednost koja određuje treba li se displej odmah ažurirati.
void robojaxText(String text, int x, int y, int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x, y);
display.println(text);
if(d) {
display.display();
}
}
Ova funkcija postavlja veličinu teksta, boju i poziciju kursora prije ispisa teksta. Zapamtite da pogledate video za potpuno objašnjenje koda (u videu na 10:00).
Demonstracija / Šta očekivati
Kada se kod učita na Arduino, OLED displej bi trebao prikazati napon, temperaturu i vrijednosti kapaciteta koji se dinamički ažuriraju svake dvije sekunde. Također biste trebali vidjeti pravougaonik nacrtan oko tekstualnih elemenata. Ako displej ne prikazuje ništa, provjerite da li su veze ispravne i da li se I2C adresa podudara s onom navedenom u kodu.
Vremenske oznake videa
- 00:00 - Uvod u projekt
- 02:00 - Upute za povezivanje
- 05:00 - Objašnjenje koda
- 10:00 - Demonstracija izlaza
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;
/*
* PIN connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 128 x 32
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH 128
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
robojaxText("V", 110, 3, 1, false);
robojaxText("Temperature: 32C", 4, 11, 1, false);
robojaxText("Capacity: 92.86L", 4, 21, 1, false);
//display.drawLine(1, 37, 100, 37, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
void robojaxText(String text, int x, int y,int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
if(d){
display.display();
}
//delay(100);
}
Stvari koje bi vam mogle zatrebati
-
AmazonPurchase OLED 128x32 from Amazonamzn.to
-
AliExpressPurchase SSD1306 OLED 128x32 from AliExpresss.click.aliexpress.com
Resursi i reference
-
EksternoAdafruit-GFX library (from GitHub)github.com
-
EksternoSSD1306 library (from GitHub)github.com
Datoteke📁
Tehnički list (pdf)
-
SSD1306 display datasheetSSD1306 is a single-chip CMOS OLED/PLED driver with controller for organic / polymer light emitting diode dot-matrix graphic display system. It consists of 128 segments and 64commons. This IC is designed for Common Cathode type OLED panel. The SSD1306 embeds with contrast control, display RAM and oscillator, which reduces the number of external components and power consumption. It has 256-step brightness control. Data/Commands are sent from general MCU through the hardware selectable 6800/8000 series compatible Parallel Interface, I2C interface or Serial Peripheral Interface. It is suitable for many compact portable applications, such as mobile phone sub-display, MP3 player and calculator, etc.
SSD1306_display_datasheet.pdf1.79 MB
Fritzing datoteka
-
SSD1306 128x32 OLED WiringFritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
SSD1306_128x32_wiring.fzz
Wiring diagram
-
SSD1306 128x32 OLED WiringFritzing wiring diagram for an SSD1306 128x32 OLED display, showing connections to a microcontroller (likely Arduino). Useful for breadboard prototyping and verifying I2C or SPI wiring.
SSD1306_128x32_wiring.fzz