OLED I2C 0.96inch 128×64

Uvod

OLED zasloni so postali nepogrešljiv del številnih Arduino projektov. Eden izmed najbolj priljubljenih je SSD1306 OLED, ki se ponaša z visokim kontrastom, nizko porabo energije in enostavno uporabo. V tem vodniku bomo prikazali, kako ga povezati z Arduino prek I2C vmesnika in prikazati besedilo na zaslonu.

Modul OLED I2C 0.96inch modro-rumena
OLED I2C 0.96inch 128x64

Kaj je SSD1306 OLED zaslon?

SSD1306 je monokromatski OLED zaslon, ki je na voljo v različnih velikostih, najpogosteje 128×64 ali 128×32 pik. Za komunikacijo uporablja I2C ali SPI vmesnik, kar omogoča enostavno povezavo z mikrokontrolerji, kot je Arduino.

Prednosti SSD1306 OLED zaslona:

Visok kontrast – Pikseli so sami vir svetlobe, kar omogoča ostro sliko.
Širok vidni kot – Ni potrebe po osvetlitvi ozadja, slika ostane jasna iz vseh kotov.
Nizka poraba energije – Primeren za baterijsko napajane projekte.
Majhne dimenzije – Odličen za kompaktne projekte.

Povezava SSD1306 OLED z Arduino prek I2C

Za priklop zaslona SSD1306 z Arduino ploščo potrebujemo le štiri žice:

SSD1306 PinArduino Pin
VCC3.3V ali 5V
GNDGND
SDAA4 (na večini modelov)
SCLA5 (na večini modelov)

💡 Opomba: Na novejših modelih Arduina (npr. Arduino Uno R3) sta SDA in SCL na digitalnih pinih D20 in D21.

 

 

 

Programska koda – OSNOVNI NAPIS:

Preprosti program za test delovanja OLED prikazovalnika z I2C komunikacijo. NA prikazovalniku izpišemo “OLED”.

				
					// Vključimo potrebne knjižnice za delo z OLED zaslonom
#include <Wire.h>                // Knjižnica za I2C komunikacijo
#include <Adafruit_GFX.h>        // Knjižnica za grafične funkcije
#include <Adafruit_SSD1306.h>    // Knjižnica za upravljanje OLED SSD1306 zaslona

// Določimo širino in višino zaslona v pikselih
#define SCREEN_WIDTH 128   // Širina OLED zaslona
#define SCREEN_HEIGHT 32   // Višina OLED zaslona

// Določimo I2C naslov OLED zaslona (privzeto 0x3C za večino modulov)
#define SCREEN_ADDRESS 0x3C  

// Ustvarimo objekt 'display' za upravljanje zaslona
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  // Inicializiramo zaslon. Če inicializacija ni uspešna, ostanemo v neskončni zanki.
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for (;;); // Če zaslon ni povezan, se program ustavi tukaj
  }
 
  display.clearDisplay();         // Počistimo vsebino zaslona
  display.setTextSize(2);         // Nastavimo velikost pisave (2× večja od privzete)
  display.setTextColor(SSD1306_WHITE); // Nastavimo barvo pisave (bela)
  display.setCursor(10, 10);      // Nastavimo začetno pozicijo besedila (x=10, y=10)
  display.println("OLED");        // Izpišemo besedilo "OLED" na zaslon
  display.display();              // Osvežimo zaslon, da se spremembe prikažejo
}

void loop() {
  // Zanka loop() je prazna, ker želimo, da se besedilo prikaže le enkrat
}

				
			

Programska koda – ŠTEVEC:

Preprosti program za test delovanja OLED prikazovalnika z I2C komunikacijo. Na prikazovalniku štejemo od 0 do 99. Števec se resetira in štetje se ponovi. 

				
					// Program: Števec do 999 na OLED zaslonu
// Prikazuje število od 0 do 999 z osveževanjem zaslona

// Vključimo potrebne knjižnice za delo z OLED zaslonom
#include <Wire.h>                // Knjižnica za I2C komunikacijo
#include <Adafruit_GFX.h>        // Knjižnica za grafične funkcije
#include <Adafruit_SSD1306.h>    // Knjižnica za upravljanje OLED SSD1306 zaslona

// Določimo širino in višino zaslona v pikselih
#define SCREEN_WIDTH 128   // Širina OLED zaslona
#define SCREEN_HEIGHT 32   // Višina OLED zaslona

// Določimo I2C naslov OLED zaslona (privzeto 0x3C za večino modulov)
#define SCREEN_ADDRESS 0x3C  

// Ustvarimo objekt 'display' za upravljanje zaslona
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  // Inicializiramo zaslon. Če inicializacija ni uspešna, ostanemo v neskončni zanki.
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for (;;); // Če zaslon ni povezan, se program ustavi tukaj
  }
}

void loop() {
  // Zanka za prikaz števila od 0 do 99
  for (int i = 0; i <= 99; i++) {
    display.clearDisplay();         // Počistimo vsebino zaslona

    display.setTextSize(1);         // Nastavimo velikost pisave (privzeta velikost)
    display.setTextColor(SSD1306_WHITE); // Nastavimo barvo pisave (bela)
    
    display.setCursor(0, 0);        // Nastavimo začetno pozicijo besedila (x=0, y=0)
    display.println("OLED counter"); // Izpišemo naslov "OLED counter"
    
    display.setCursor(0, 10);       // Nastavimo pozicijo za števec (x=0, y=10)
    display.print("Int: ");         // Izpišemo oznako "Int: "
    display.print(i);               // Izpišemo trenutno vrednost števca
    
    display.display();              // Osvežimo zaslon, da se spremembe prikažejo

    delay(20);                      // Kratek premor (20 ms) med posameznimi številkami
  }
}

				
			

Programska koda – DHT11 senzor temperature in vlage:

Ta Arduino program uporablja OLED SSD1306 zaslon in DHT11 senzor za merjenje temperature in vlažnosti. Vsakih 2 sekundi odčita podatke iz senzorja in jih prikaže na OLED zaslonu ter serijskem monitorju. Če pride do napake pri branju senzorja, prikaže opozorilo. Program je primeren za preproste vremenske postaje ali okoljske nadzorne sisteme. 🚀

				
					// Vključimo potrebne knjižnice
#include <Wire.h>                // Knjižnica za I2C komunikacijo
#include <Adafruit_GFX.h>        // Knjižnica za grafične funkcije
#include <Adafruit_SSD1306.h>    // Knjižnica za OLED zaslon
#include <DHT.h>                 // Knjižnica za senzor DHT

// Definiramo pin, na katerem je povezan DHT11
#define DHTPIN 8         // Pin, na katerega je priključen senzor DHT11
#define DHTTYPE DHT11    // Vrsta senzorja (DHT11)

// Ustvarimo objekt za senzor DHT
DHT dht(DHTPIN, DHTTYPE);

// Nastavimo dimenzije OLED zaslona
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define SCREEN_ADDRESS 0x3C  // Privzet I2C naslov OLED zaslona

// Ustvarimo objekt za OLED zaslon
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  // Inicializacija serijske komunikacije (ni nujna, a je koristna za diagnostiko)
  Serial.begin(9600);

  // Inicializiramo DHT senzor
  dht.begin();

  // Inicializiramo OLED zaslon
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("Napaka pri inicializaciji OLED zaslona!");
    for (;;); // Če OLED ni povezan, ostanemo v neskončni zanki
  }
}

void loop() {
  // Beremo temperaturo in vlažnost
  float temperature = dht.readTemperature();  // Temperatura v °C
  float humidity = dht.readHumidity();        // Vlažnost v %

  // Če je prišlo do napake pri branju podatkov, prikažemo napako
  if (isnan(temperature) || isnan(humidity)) {
    Serial.println("Napaka pri branju podatkov iz DHT11!");
    return; // Preskočimo preostanek kode v loop()
  }

  // Počistimo zaslon pred novim izpisom
  display.clearDisplay();

  // Nastavimo pisavo in barvo
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  // Izpišemo naslov
  display.setCursor(0, 0);
  display.println("DHT11 Meritve:");

  // Izpišemo temperaturo
  display.setCursor(0, 10);
  display.print("Temp: ");
  display.print(temperature);
  display.println(" C");

  // Izpišemo vlažnost
  display.setCursor(0, 20);
  display.print("Vlaga: ");
  display.print(humidity);
  display.println(" %");

  // Osvežimo zaslon
  display.display();

  // Izpišemo podatke tudi v serijski monitor
  Serial.print("Temp: ");
  Serial.print(temperature);
  Serial.print(" C | Vlaga: ");
  Serial.print(humidity);
  Serial.println(" %");

  // Počakamo 2 sekundi pred naslednjim odčitavanjem
  delay(2000);
}