Prispevki
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.


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 Pin | Arduino Pin |
---|---|
VCC | 3.3V ali 5V |
GND | GND |
SDA | A4 (na večini modelov) |
SCL | A5 (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 // Knjižnica za I2C komunikacijo
#include // Knjižnica za grafične funkcije
#include // Knjižnica za upravljanje OLED SSD1306 zaslona
#include // 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
}