OLED I2C 0.96inch 128×64 DHT11

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.

DHT11 je osnovni digitalni senzor temperature in vlažnosti zraka. Priljubljen je zaradi svoje preproste uporabe, nizke cene in majhne velikosti.

– Merjenje temperature: 0°C do 50°C z natančnostjo ±2°C.
– Merjenje vlažnosti: 20% do 90% RH z natančnostjo ±5% RH.
– Digitalni izhod: Podatki se prenašajo z serijskim digitalnim signalom.
– Razpon napetosti: 3.3V do 5V.
– Poraba toka: Zelo nizka.

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

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 DHT11 senzorja temperature in vlage na OLED prikazovalniku z I2C komunikacijo. Na prikazovalniku izpišemo:

Temp & Vlaznost:
Temp: 19.00 C
Vlaznost: 45.00 %
				
					// 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
#include <DHT.h>                 // Knjižnica za DHT senzor

// 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

// Določimo pin in tip DHT senzorja
#define DHTPIN 8           // DHT senzor je priključen na pin 8
#define DHTTYPE DHT11      // Uporabljamo DHT11 senzor

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

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

void setup() {
  // Inicializiramo serijski vmesnik za debugiranje
  Serial.begin(9600);
  
  // Inicializiramo DHT senzor
  dht.begin();
  
  // Inicializiramo zaslon. Če inicializacija ni uspešna, ostanemo v neskončni zanki.
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("SSD1306 inicializacija ni uspela");
    for (;;); // Če zaslon ni povezan, se program ustavi tukaj
  }

  display.clearDisplay();         // Počistimo vsebino zaslona
  display.setTextSize(1);         // Nastavimo velikost pisave
  display.setTextColor(SSD1306_WHITE); // Nastavimo barvo pisave (bela)
  display.setCursor(0, 0);        // Nastavimo začetno pozicijo besedila
  display.println("DHT11 Senzor");// Izpišemo besedilo na zaslon
  display.display();              // Osvežimo zaslon, da se spremembe prikažejo
  
  delay(2000);                    // Počakamo 2 sekundi
}

void loop() {
  // Preberemo temperaturo in vlažnost
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Preverimo, če je branje uspelo
  if (isnan(h) || isnan(t)) {
    Serial.println("Napaka pri branju DHT senzorja!");
    return;
  }

  // Izpišemo vrednosti na serijski vmesnik za debugiranje
  Serial.print("Vlažnost: ");
  Serial.print(h);
  Serial.print(" % | Temperatura: ");
  Serial.print(t);
  Serial.println(" °C");

  // Prikažemo vrednosti na OLED zaslonu
  display.clearDisplay();
  
  // Nastavimo velikost pisave za naslov
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("Temp & Vlaznost:");
  
  // Prikažemo temperaturo
  display.setTextSize(1);
  display.setCursor(0, 10);
  display.print("Temp: ");
  display.print(t);
  display.println(" C");
  
  // Prikažemo vlažnost
  display.setCursor(0, 20);
  display.print("Vlaznost: ");
  display.print(h);
  display.println(" %");
  
  display.display();  // Osvežimo zaslon
  
  delay(2000);        // Posodobimo podatke vsaki 2 sekundi
}