Obsah:

OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps
OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps

Video: OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps

Video: OLED I2C Display Arduino/NodeMCU Tutorial: 15 Steps
Video: arduino oled i2c tutorial : 0.96" 128 X 32 for beginners 2024, Júl
Anonim
Image
Image

Úplne prvý program, ktorý napíšete, keď sa začnete učiť a

nový programovací jazyk je: „Hello World!“.

Samotný program nerobí nič iné ako vytlačenie textu „Hello World“na obrazovku.

Ako teda prinútime naše Arduino, aby zobrazovalo „Hello World!“?

V tomto videu vám ukážem, ako začať s malými OLED displejmi 0,91 (128x32) a 0,96 (128x64) I2C.

Na webe je k dispozícii niekoľko stoviek návodov, ktoré vysvetľujú rovnakú vec rôznymi spôsobmi, ale nenašiel som žiadny, ktorý by mi povedal všetko o OLED displeji a jeho použití v rôznych scenároch. Trvalo mi nejaký čas, kým som to všetko vyriešil. Preto som si povedal, že by som mal vytvoriť návod o tom, čo som sa naučil, a skombinovať všetky funkcie a spôsoby, akými je možné displeje OLED použiť v našich projektoch.

Krok 1: Veci, ktoré sa dnes naučíme

Hardvérová požiadavka
Hardvérová požiadavka

V tomto videu budeme hovoriť o:

- Čo je to OLED displej?

- Potom sa bližšie pozrieme na OLED displeje 0,91 (128x32) a 0,96 (128x64) I2C

- Ďalej budeme hovoriť o inštalácii knižnice Adafruit do vášho Arduino IDE

- Potom pripojíme NodeMCU a Arduino k OLED displeju

- Ďalej sa pozrieme na kód a zobrazíme na ňom grafiku a text

- Budeme tiež hovoriť o aplikácii vlastných písiem a zobrazovaní obrázkov

- Potom pripojíme viac OLED k mikrokontroléru pomocou multiplexera I2C

- Nakoniec si povieme o niekoľkých bežných chybách, ktorých sa ľudia pri používaní OLED displejov dopúšťajú

Krok 2: Hardvérová požiadavka

Na tento tutoriál potrebujeme:

- Breadboard

- OLED displeje 0,91 "(128x32) a 0,96" (128x64) I2C

- Arduino UNO/NANO (čo je po ruke)

- NodeMCU

- multiplexor TCA9548A I2C

- Niekoľko prepojovacích káblov

- a kábel USB na odoslanie kódu

Krok 3: Čo je to OLED displej?

Čo je to OLED displej?
Čo je to OLED displej?
Čo je to OLED displej?
Čo je to OLED displej?

Svetelná dióda OLED alebo organická dióda vyžarujúca svetlo

dióda (LED), v ktorej je emisná elektroluminiscenčná vrstva filmom organickej zlúčeniny (milióny malých LED svetiel), ktorá vyžaruje svetlo v reakcii na elektrický prúd.

OLED sa používajú na vytváranie digitálnych displejov v zariadeniach, ako sú televízne obrazovky, počítačové monitory, prenosné systémy, ako sú mobilné telefóny, ručné herné konzoly a PDA. OLED displej funguje bez podsvietenia, pretože vyžaruje viditeľné svetlo.

Krok 4:

Obrázok
Obrázok

Existuje veľa typov OLED displejov

trhu na základe ich

- Veľkosti

- Farba

- Značky

- Protokol

- SPI (sériové periférne rozhranie) alebo I2C

-Schéma riadenia pasívnej matice (PMOLED) alebo aktívnej matice (AMOLED)

V tomto návode budem hovoriť o pripojení

modrá farba 0,91 (128x32 OLED) a 0,96 (128x64 OLED) I2C OLDE zobrazuje na Arduino NANO a NodeMCU. Technológia zbernice I2C využíva iba 2 piny MCU, takže pre ďalšie senzory máme k dispozícii haldy.

Krok 5: Bližší pohľad

Bližší pohľad
Bližší pohľad
Bližší pohľad
Bližší pohľad
Bližší pohľad
Bližší pohľad

Pozrime sa bližšie na tieto dva displeje.

Na zadnej strane týchto displejov sú hromady kondenzátorov SMD a odporov spájkovaných na doske; ale keďže ide o zariadenie I2C, staráme sa iba o tieto 2 piny (SCL a SDA)

Displej sa k Arduinu pripája iba štyrmi vodičmi - dvoma pre napájanie (VCC a GND) a dvoma pre dáta (sériové hodiny SCL a

sériové údaje SDA), čo robí zapojenie veľmi jednoduchým. Dátové pripojenie je I2C (I²C, IIC alebo Inter-Integrated Circuit) a toto rozhranie sa nazýva aj TWI (Two Wire Interface).

- Palubné kolíky môžu byť v rôznom poradí, preto ich pred zapojením do projektu vždy trikrát skontrolujte.

- Prevádzkové napätie je medzi 3v až 5v, ale je najlepšie použiť návod z technického listu výrobcu.

- Niekedy v našich projektoch musíme použiť 2 displeje. Ako to teda môžeme dosiahnuť?

Ide o to, mať na displeji konfigurovateľnú adresu. Táto jednotka má konfigurovateľnú adresu medzi 0x78 a 0x7A. Adresu môžeme zmeniť jednoducho odpájaním 0Ohm odporu z jednej strany a jeho zapojením na druhú stranu alebo vložením globálnej spájky. Porozprávame sa o tom do hĺbky, keď k Arduinu pripojíme viac displejov v neskoršej časti tohto tutoriálu.

Na obrázku tieto displeje vyzerajú veľmi veľké. Ale prakticky sú malé. Sú vyrobené zo 128 x 32/64 jednotlivých OLED pixelov a nevyžadujú žiadne protisvetlo. Pozrite sa na to a uvidíte, aké je to malé. Napriek tomu, že sú malé, môžu byť veľmi užitočné v akýchkoľvek elektronických projektoch.

Krok 6: Knižnica

Knižnica
Knižnica
Knižnica
Knižnica
Knižnica
Knižnica

Na ich ovládanie je k dispozícii niekoľko knižníc

zobrazuje. V minulosti som používal „knižnicu u8glib“, ale knižnicu AdaFruit považujem za veľmi ľahko zrozumiteľnú a používateľnú v našich projektoch. V tomto návode teda použijem knižnicu AdaFruit.

Na ovládanie displeja OLED budete potrebovať knižnicu „adafruit_GFX.h“a knižnicu „adafruit_SSD1306.h“.

Existujú dva spôsoby, ako si môžete stiahnuť a nainštalovať knižnicu do svojho Arduino IDE.

Metóda 1

Prejdite na „Správca knižnice“a vyhľadajte „adafruit_SSD1306“a „adafruit_gfx“

Vyberte najnovšiu verziu a kliknite na tlačidlo Inštalovať.

Po inštalácii týchto knižníc môžete vo svojom programe používať.

Metóda 2

Tieto dve knižnice je možné stiahnuť aj z github (potrebujete obe):

Odkazy poskytnem v popise nižšie.

Knižnica zobrazenia:

Knižnica GFX:

Po stiahnutí skopírujte priečinok Adafruit_SSD1306-master zo stiahnutého súboru zip do priečinka knižníc Arduino. Tento priečinok sa zvyčajne nachádza v priečinku Dokumenty> Arduino> knižnice v systémoch Windows. V systéme Linux sa zvyčajne nachádza v domovskom priečinku> Arduino> knižnice. Nakoniec v priečinku knižnice Arduino premenujte hlavný priečinok Adafruit_SSD1306 na Adafruit_SSD1306. Aj keď to nepremenujete, je to v poriadku.

Krok 7:

Obrázok
Obrázok

Teraz sa pozrime na „Adafruit_SSD1306.h“

súbor

V tejto knižnici potrebujeme vedieť dve veci:

1. Ak chcete použiť menší displej, použite predvolený formát 128_32, v opačnom prípade komentujte 128_32 a odkomentujte 128_64.

2. Ak ste na dosku spájkovali adresu 0x7A (o ktorej si povieme neskôr), potom pre väčšie displeje použite 7 -bitovú adresu 0x3D, v opačnom prípade použite predvolenú adresu 0x3C. Pri menších displejoch je adresa 0x3C.

Krok 8: Zapojenie 128 x 64/32 OLED

Zapojenie 128 x 64/32 OLED
Zapojenie 128 x 64/32 OLED

Začnime pripojením NodeMCU k displeju.

Prvá a najdôležitejšia vec, ktorú je potrebné poznamenať, je, že na niektorých displejoch môže byť vymenený napájací kolík GND a VCC. Skontrolujte displej a uistite sa, že je rovnaký ako na obrázku. Ak sú kolíky vymenené, zaistite zmenu pripojenia k Arduino alebo NodeMCU.

- OLED zapojenie NodeMCU

OLED VCC - NodeMCU 3,3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- OLED zapojenie Arduino Uno

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

- Zapojenie OLED Arduino MEGA 2560

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino MEGA 2560 pin 21

OLED SDA - Arduino MEGA 2560 pin 20

Krok 9: Kód

Kód
Kód
Kód
Kód
Kód
Kód
Kód
Kód

Knižnica Adafruit prináša skutočne dobré príklady pre oboch

Displeje 128x32 a 128x64.

Knižnica sa nachádza pod položkou Súbor> Príklady> Adafruit SSD1306> a potom typ zobrazenia v Arduino IDE.

Použijeme príklad 128x32 I2C a upravíme ho tak, aby fungoval s displejmi 128x64 aj 128x32 najskôr tak, že ho pripojíte k Arduinu a potom k doske NodeMCU.

Kód začína zahrnutím oboch knižníc Adafruit. V tomto tutoriáli budem zdôrazňovať iba tie časti kódu, ktoré sú potrebné na to, aby sme ich mohli načítať na dosky aj displeje. Ak sa chcete dozvedieť viac o kóde, zanechajte komentár na mojom blogu alebo v sekcii komentárov nižšie a ja sa snažím dostať vás späť.

- Najprv načítame kód do Arduino Nano pripojeného k displeju 128x32.

Kód môžeme používať tak, ako je, bez akýchkoľvek úprav.

128x32 používa adresu 0x3C, takže tento bit tu vyzerá dobre, dvakrát skontrolujte knižnicu hlavičiek, áno, používa aj adresu 0x3C a typ zobrazenia je 128x32.

- Teraz pripojte displej 128x64. Ako vieme, predvolene používa adresu 0x3C, takže nepotrebujeme aktualizovať adresu ani v kóde, ani v knižnici.

Potrebujeme iba komentovať 128_32 a odkomentovať 128_64 v knižnici záhlaví a v našom kóde zmeniť LCDHEIGHT na 64.

- Na spustenie rovnakého kódu na NodeMCU musíme v kóde zmeniť ešte jeden riadok.

Zvyšok kódu „#define OLED_RESET 4“> „#define OLED_RESET LED_BUILTIN“je rovnaký ako pre Arduino

Skoro na to, aby sme zobrazili čokoľvek, musíme najskôr vyčistiť predchádzajúcu obrazovku pomocou

display.clearDisplay (); // Vymažte vyrovnávaciu pamäť

Potom nakreslite predmet

testdrawline (); // Nakresli čiaru

Ukážte to na hardvéri

display.display (); // Zviditeľnite ich na hardvéri displeja!

Pred zobrazením ďalšej položky chvíľu počkajte.

oneskorenie (2000); // Počkajte 2 sekundy

V tomto prípade zobrazujeme niekoľko položiek, ako napríklad text, riadky, kruhy, posúvaný text, trojuholníky a ďalšie. Neváhajte a využite svoju predstavivosť a ukážte na týchto malých displejoch čokoľvek chcete.

Krok 10: Prispôsobenie textu a pridávanie obrázkov

Prispôsobenie textu a pridávanie obrázkov
Prispôsobenie textu a pridávanie obrázkov
Prispôsobenie textu a pridávanie obrázkov
Prispôsobenie textu a pridávanie obrázkov
Prispôsobenie textu a pridávanie obrázkov
Prispôsobenie textu a pridávanie obrázkov

Váš kód niekedy potrebuje zobraziť vlastné písma a

snímky. Ak ste veľmi dobrí v mapovaní bitov, stačí vytvoriť bajtové polia zapnutím alebo vypnutím malých diód LED na vytváraní vlastných písiem a obrázkov.

Tieto mapovania však nie som veľmi dobrý a nechcem tráviť hodiny vytváraním tabuliek bitových máp.

Aké sú teda moje možnosti? Na generovanie vlastných fontov a obrázkov spravidla používam dve webové stránky. Odkazy sú uvedené v popise nižšie.

Vlastné písma

Prejdite na webovú stránku prevodníka písem, vyberte rodinu písem, štýl, veľkosť, verziu knižnice ako „Písmo Adafruit GFX“a potom kliknite na tlačidlo „Vytvoriť“. Na pravej strane tejto stránky môžete vidieť, ako bude vaše písmo vyzerať na skutočnom displeji.

Na základe vášho výberu webová stránka vygeneruje súbor hlavičky písem. Vytvorte súbor s názvom „modified_font.h“v rovnakom priečinku, kde je váš kód, a skopírujte a uložte do neho vygenerovaný kód. Potom stačí do kódu zahrnúť súbor hlavičky, aby ste mohli používať vlastné písmo.

#include "modified_font.h"

Potom stačí pred zobrazením textu nastaviť písmo, aby ste naň mohli použiť vlastné písmo.

display.setFont (& Your_Fonts_Name);

Názov písma môžete získať z hlavičkového súboru, ktorý ste práve pridali do projektu. To je ľahké.

Pri používaní vlastných písem je pamäť vždy problémom, preto vždy berte do úvahy bajty, ktoré pamäť spotrebuje. Nezabudnite, že Arduino UNO má iba 32 kB pamäte.

Vlastné obrázky

Na zobrazenie bitmapového obrázku na obrazovke musíte najskôr vytvoriť obrázok s rozmermi 128 x 64/32.

Používam starý dobrý „MS Paint“na vytvorenie bitmapového obrázku s rozmermi 128 x 64 pixlov, ktorý potom nahrám na túto webovú stránku s prevodníkom obrázkov. Web prevádza obrázky do bajtových reťazcov, ktoré je možné použiť s displejmi Arduino a OLED.

Začnite odoslaním obrázku na webovú stránku. Potom začiarknite políčko „Invertovať farby obrazu“a zmeňte „formát výstupného kódu“na „kód Arduino“, potom vyberte orientáciu a kliknutím na tlačidlo „Generovať kód“vygenerujte bajtové pole. Sekcia „Náhľad“zobrazuje, ako bude váš obrázok vyzerať na skutočnom displeji.

Zahrnul som kód spolu s týmto návodom, ktorý môžete použiť na zobrazenie svojich obrázkov. Stačí nahradiť pole v mojom kóde tým, ktoré ste práve vygenerovali, a potom ho načítať do svojho Arduina.

Krok 11: Pripojenie 2 displejov

Pripojenie 2 displejov
Pripojenie 2 displejov
Pripojenie 2 displejov
Pripojenie 2 displejov

Pripojenie dvoch displejov 128 x 64 k vášmu projektu je jednoduché.

Stačí odpájať odpor 0Ohm z adresy 0x78 a vložiť ho na 0x7A a potom vo svojom kóde použiť adresu 0x3D namiesto predvoleného 0x3C.

Určite vás zaujíma, prečo používame adresu 0x3C a 0x3D a nie skutočné 0x78 a 0x7A. Arduino prijíma 7-bitovú adresu, a nie 8-bitovú hardvérovú adresu. Najprv teda musíme previesť 8-bitovú adresu na binárnu a potom odrezať najmenej významný bit, aby sme získali 7 bitov. Potom konvertujte 7 bitov na HEX, aby ste získali adresy 0x3C alebo 0x3D, ktoré zadáte do kódu.

Najprv inicializujte displej zadaním jedinečného názvu:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Potom vo svojom kóde použite displej 1 a displej 2 na vyvolanie úvodných príkazov s adresami zariadení v nich:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // zobrazenie 1 operačnej adresy 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // zobrazenie 2 operačnej adresy 0x3D

To je všetko, teraz môžete pokračovať a robiť čokoľvek chcete pomocou zobrazenia 1 alebo zobrazenia 2 vo zvyšku kódu. V tomto návode som uviedol príklad.

Zapojenie je úplne rovnaké ako to, čo sme urobili predtým, do značnej miery stačí pridať ďalší displej na rovnaké piny I2C buď Arduino alebo NodeMCU. Na základe adries potom MCU odošle údaje na dátový riadok I2C.

Krok 12: Pripojenie viac ako 2 displejov

Pripojenie viac ako 2 displejov
Pripojenie viac ako 2 displejov
Pripojenie viac ako 2 displejov
Pripojenie viac ako 2 displejov
Pripojenie viac ako 2 displejov
Pripojenie viac ako 2 displejov

Čo teraz, ak chcete pripojiť viac ako 2 displeje?

Arduino má obmedzený počet pinov, a preto k nemu nemôžete mať pripojeného viac ako určité množstvo štítov. Navyše má iba jeden pár autobusov I2C.

Ako teda môžeme k Arduinu pripojiť viac ako 2 displeje I2C? Ide o to, použiť multiplexor TCA9548.

TCA9548 umožňuje jednému mikroprocesoru komunikovať až s '64 senzormi ', všetkými s rovnakou alebo odlišnou adresou I2C, priradením jedinečného kanála ku každej zbernici slave snímača.

Keď hovoríme o odosielaní údajov dvoma káblami na viac zariadení, potrebujeme spôsob, ako ich adresovať. Je to rovnaké, ako keby poštár prichádzal po jednej ceste a hádzal poštové balíky do rôznych domov, pretože sú na nich napísané rôzne adresy.

Multiplexor sa pripája k riadkom 3V3, GND, SDA a SCL mikroovládača. Slave snímače sú pripojené k jednému z ôsmich portov SCL/SDA slave na doske. Kanály sa vyberú odoslaním TCA9548A jeho adresy I2C (0x70 {predvolené} - 0x77), za ktorou nasleduje číslo kanála (0b00000001 - 0b10000000). Môžete mať maximálne 8 týchto multiplexorov spojených dohromady na adresách 0x70-0x77, aby ste mohli ovládať 64 rovnakých adresovaných častí I2C. Pripojením troch bitov adresy A0, A1 a A2 k VIN získate rôznu kombináciu adries. Toto podrobne vysvetlím v mojom nasledujúcom návode na odpočinkovej doske TCA9548A. Teraz stačí pripojiť 8 OLED k tejto doske a rýchlo sa pozrieť na kód.

Pripojenie:

VIN až 5 V (alebo 3,3 V)

GND na zem

Hodiny SCL až I2C

Údaje SDA až I2C

Potom zapojte senzory do VIN, GND a použite jednu z multiplexovaných zberníc SCn / SDn

Teraz kód Int umožňuje začať zahrnutím knižnice „Wire“a definovaním adresy multiplexorov.

#include "Wire.h"

#zahrnúť

#define Adresa MUX_Address 0x70 // TCA9548A Adresa snímača

Potom musíme vybrať port, s ktorým chceme komunikovať, a odoslať naň údaje pomocou tejto funkcie:

void tcaselect (uint8_t i) {

ak (i> 7) vráti;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Ďalej budeme inicializovať zobrazenie v sekcii nastavenia volaním „u8g.begin ();“pre každý displej pripojený k MUX „tcaselect (i);“

Po inicializácii potom môžeme robiť, čo chceme, iba volaním funkcie „tcaselect (i);“kde „i“je hodnota multiplexovanej zbernice a potom sa podľa toho odošlú údaje a hodiny.

Krok 13: Výhody a nevýhody

Výhody a nevýhody
Výhody a nevýhody

Obraz OLED je nádherný. OLED však majú tiež

nevýhody. Pretože obrazovky OLED obsahujú organický materiál, ich životnosť je kratšia ako pri displejoch LCD. Mnoho OLED displejov sa navyše po dlhšom zobrazení rovnakého obrázku zapáli. Po napálení zostane obrázok na obrazovke aj po zobrazení iného obrázku. Dbajte preto na to, aby ste obrazovku obnovovali každých niekoľko sekúnd. Voda môže okamžite poškodiť organické materiály týchto displejov.

Výhody

Nie je potrebné podsvietenie

Displeje sú veľmi tenké a ľahké

Nízka spotreba energie

Pozorovacie uhly sú širšie ako LCD

Jas a kontrast sú skvelé

Vysoká rýchlosť a nízka doba odozvy

Sýto čierna farba

Nevýhody

Nákladná technológia

Krátky životný cyklus

OLEDS častejšie spália

Poškodenie vodou

Krok 14: Bežné chyby

Bežné chyby
Bežné chyby

Na záver tutoriálu si povieme o niekoľkých bežných chybách

ľudia robia pri používaní týchto displejov:

- Pred použitím vo svojom projekte vždy trikrát skontrolujte kolíky

- V hlavičkovom súbore a vo svojom kóde vyberte správnu adresu knižnice

#define SSD1306_I2C_ADDRESS 0x3C // in Adafruit_SSD1306.h

a

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // vo vašom kóde

Ak je adresa nesprávna, OLED nič nezobrazí

- Pred použitím musíte v ovládači zmeniť veľkosť displeja. Ak sa nezmení, pri pokuse o overenie kódu sa zobrazí chybové hlásenie

#error ("Výška je nesprávna, opravte prosím Adafruit_SSD1306.h!");

- Ak používate NodeMCU, uistite sa, že ste vymenili OLED_RESET zo 4 za LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Mám ľudí z scény, ktorí pomocou tohto OLED displeja vyrábajú najrôznejšie veci. Niektorí dokonca vytvorili videohry a všetko. Naozaj ma nezaujíma tvorba videohier pomocou tohto malého displeja. Teraz vás však nechám preskúmať vašu predstavivosť a prísť s úžasnými nápadmi.

Krok 15: Odkazy

- Blog:

- Pridať obrázok:

- Vlastný text:

- Zobrazovacia knižnica Adafruit:

-Knižnica Adafruit GFX:

- knižnica u8glib: https://code.google.com/archive/p/u8glib/ alebo

Ak chcete použiť menší displej, použite predvolený 128_32, inak pre väčší displej komentujte 128_32 a odkomentujte 128X64 NO_ACK vo svojom kóde (stačí odkomentovať typ obrazovky, ktorú používate) (písma sú v knižnici písem)

Odporúča: