Cuprins:

Afișaj OLED I2C Tutorial Arduino / NodeMCU: 15 pași
Afișaj OLED I2C Tutorial Arduino / NodeMCU: 15 pași

Video: Afișaj OLED I2C Tutorial Arduino / NodeMCU: 15 pași

Video: Afișaj OLED I2C Tutorial Arduino / NodeMCU: 15 pași
Video: Tutorial on I2C OLED Display with Arduino/NodeMCU 2024, Iulie
Anonim
Image
Image

Primul program pe care îl scrii când începi să înveți un

noul limbaj de programare este: „Hello World!”.

Programul în sine nu face altceva decât să imprime un text „Hello World” pe ecran.

Deci, cum reușim ca Arduino să afișeze „Hello World!”?

În acest videoclip, vă voi arăta cum să începeți cu micile afișaje OLED I2C de 0,91 (128x32) și 0,96 (128x64).

Există 100 de tutoriale pe web care explică același lucru în moduri diferite, dar nu am putut găsi unul care să-mi spună totul despre afișajul OLED și cum să-l folosesc în diferite scenarii. Mi-a luat ceva timp să rezolv totul. Așadar, m-am gândit că ar trebui să creez un tutorial despre ceea ce am învățat și să combin toate caracteristicile și modurile în care ecranele OLED pot fi utilizate în proiectele noastre.

Pasul 1: Lucruri pe care urmează să le învățăm astăzi

Cerințe hardware
Cerințe hardware

În acest videoclip vom vorbi despre:

- Ce este un ecran OLED?

- Apoi vom arunca o privire mai atentă la afișajele OLED I2C de 0,91 (128x32) și 0,96 (128x64)

- În continuare vom vorbi despre instalarea Bibliotecii Adafruit pe ID-ul dvs. Arduino

- Apoi vom conecta NodeMCU și Arduino la un afișaj OLED

- În continuare vom arunca o privire asupra codului și vom afișa câteva elemente grafice și text pe el

- Vom vorbi și despre aplicarea fonturilor personalizate și afișarea imaginilor

- Apoi vom conecta mai multe OLED-uri la un microcontroler folosind I2C Multiplexer

- În cele din urmă, vom vorbi despre câteva erori obișnuite pe care oamenii le fac în timpul utilizării ecranelor OLED

Pasul 2: Cerințe hardware

Pentru acest tutorial avem nevoie de:

- Un panou

- Afișaje OLED I2C de 0,91 "(128x32) și 0,96" (128x64)

- Arduino UNO / NANO (orice este la îndemână)

- NodeMCU

- Multiplexor TCA9548A I2C

- Câteva cabluri de conectare

- și un cablu USB pentru a încărca codul

Pasul 3: Ce este un afișaj OLED?

Ce este un ecran OLED?
Ce este un ecran OLED?
Ce este un ecran OLED?
Ce este un ecran OLED?

OLED sau dioda organică care emite lumină este o lumină emitentă

diodă (LED) în care stratul electroluminiscent emisiv este un film de compus organic (milioane de lumini LED mici) care emite lumină ca răspuns la un curent electric.

OLED-urile sunt utilizate pentru a crea afișaje digitale pe dispozitive precum ecrane de televiziune, monitoare de computer, sisteme portabile precum telefoane mobile, console de jocuri portabile și PDA-uri. Un afișaj OLED funcționează fără lumină de fundal, deoarece emite lumină vizibilă.

Pasul 4:

Imagine
Imagine

Există multe tipuri de afișaje OLED disponibile în

pe baza lor

- Mărimi

- Culoare

- Mărci

- Protocol

- SPI (Serial Peripheral Interface) sau I2C

- Schema de control matrice pasivă (PMOLED) sau matrice activă (AMOLED)

În acest tutorial, voi vorbi despre conectarea

culoare albastră 0,91 (128x32 OLED) și 0,96 (128x64 OLED) I2C se afișează pe un Arduino NANO și NodeMCU. Tehnologia autobuzului I2C utilizează doar 2 pini ai MCU, așa că avem grămezi disponibile pentru alți senzori.

Pasul 5: Privire mai atentă

Privire mai atentă
Privire mai atentă
Privire mai atentă
Privire mai atentă
Privire mai atentă
Privire mai atentă

Să avem mai aproape de aceste două afișaje.

În spatele acestor afișaje există o grămadă de condensatori SMD și rezistențe lipite la bord; dar, din moment ce este un dispozitiv I2C, ne pasă doar de acești 2 pini (SCL și SDA)

Afișajul se conectează la Arduino folosind doar patru fire - două pentru alimentare (VCC și GND) și două pentru date (ceas serial SCL și

date de serie SDA), ceea ce face cablarea foarte simplă. Conexiunea de date este I2C (I²C, IIC sau Circuit inter-integrat) și această interfață se mai numește TWI (interfață cu două fire).

- Pinii de la bord pot fi în ordine diferită, deci verificați întotdeauna triplu înainte de a-l conecta la proiect.

- Tensiunea de funcționare este cuprinsă între 3v și 5v, dar cel mai bine este să folosiți instrucțiunile din foaia tehnică a producătorului.

- Uneori trebuie să folosim 2 afișaje în proiectele noastre. Deci, cum putem realiza acest lucru?

Trucul este să ai pe ecran o adresă configurabilă. Această unitate are o adresă configurabilă între 0x78 și 0x7A. Doar prin desfacerea rezistorului 0Ohm dintr-o parte și înfundarea acestuia pe cealaltă parte sau doar prin punerea unei lipiri globale putem schimba adresa. Vom vorbi despre asta în profunzime atunci când conectăm mai multe afișaje la un Arduino în secțiunea ulterioară a acestui tutorial.

În imagine, aceste afișaje arată foarte mare. Dar, practic vorbind, sunt mici. Acestea sunt realizate din 128 x 32/64 pixeli OLED individuali și nu necesită lumină de fundal. Aruncați o privire la asta și vedeți cât de mic este. Chiar dacă sunt mici, ele pot fi foarte utile în orice proiect electronic.

Pasul 6: Biblioteca

Bibliotecă
Bibliotecă
Bibliotecă
Bibliotecă
Bibliotecă
Bibliotecă

Există mai multe biblioteci disponibile pentru a le controla

afișează. În trecut am folosit „biblioteca u8glib”, dar mi se pare că biblioteca AdaFruit este foarte ușor de înțeles și de utilizat în proiectele noastre. Deci, voi folosi biblioteca AdaFruit în acest tutorial.

Pentru a controla afișajul OLED, veți avea nevoie de biblioteca „adafruit_GFX.h” și biblioteca „adafruit_SSD1306.h”.

Există două moduri în care puteți descărca și instala biblioteca pe ID-ul dvs. Arduino.

Metoda 1

Mergeți la „Manager bibliotecă” și căutați „adafruit_SSD1306” și „adafruit_gfx”

Selectați cea mai recentă versiune și apăsați butonul Instalare.

Odată instalate, puteți utiliza aceste biblioteci în programul dvs.

Metoda 2

Aceste două biblioteci pot fi descărcate și de pe github (aveți nevoie de ambele):

Voi furniza linkurile din descrierea de mai jos.

Biblioteca de afișare:

Biblioteca GFX:

Odată descărcat, copiați folderul Adafruit_SSD1306-master din fișierul zip descărcat în folderul bibliotecilor Arduino. Acest folder se găsește de obicei la Documente> Arduino> biblioteci pe sistemele Windows. Pe Linux se găsește de obicei în folderul de acasă> Arduino> biblioteci. În cele din urmă, în dosarul bibliotecii Arduino, redenumiți folderul Adafruit_SSD1306-master în Adafruit_SSD1306. Chiar dacă nu redenumiți, este bine.

Pasul 7:

Imagine
Imagine

Acum, să aruncăm o privire la „Adafruit_SSD1306.h”

fişier

Două lucruri pe care trebuie să le știm în această bibliotecă:

1. Dacă doriți să utilizați afișajul mai mic, utilizați 128_32 implicit, altfel pentru afișajul mai mare comentați 128_32 și decomentați 128_64

2. Dacă ați lipit Adresa 0x7A de pe placă (despre care vom vorbi mai târziu) atunci utilizați adresa 0x3D pe 7 biți pentru afișajele mai mari, altfel utilizați adresa implicită 0x3C. Pentru afișajele mai mici, adresa este 0x3C.

Pasul 8: Cablarea OLED-urilor 128 X 64/32

Cablare OLED 128 X 64/32
Cablare OLED 128 X 64/32

Să începem prin conectarea NodeMCU la afișaj.

Primul și cel mai important lucru de remarcat este că unele dintre afișaje pot avea pinii de alimentare GND și VCC înlocuiți. Verificați afișajul pentru a vă asigura că este identic cu imaginea. Dacă pinii sunt schimbați, asigurați-vă că schimbați conexiunile la Arduino sau NodeMCU.

- Cablare OLED NodeMCU

OLED VCC - NodeMCU 3.3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- Cablare OLED Arduino Uno

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

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

Pasul 9: Cod

Cod
Cod
Cod
Cod
Cod
Cod
Cod
Cod

Biblioteca Adafruit vine cu exemple foarte bune pentru ambele

Afișaje 128x32 și 128x64.

Biblioteca se află sub Fișier> Exemple> Adafruit SSD1306> și apoi tipul de afișare în IDE Arduino.

Vom folosi exemplul 128x32 I2C și îl vom modifica pentru a funcționa atât cu afișajele 128x64, cât și cu 128x32, conectându-l la un Arduino și apoi la o placă NodeMCU.

Codul începe prin includerea ambelor biblioteci Adafruit. În acest tutorial voi pune accent doar pe acele părți ale codului care sunt necesare pentru a le încărca atât pe plăci, cât și pe afișaje. Dacă doriți să aflați mai multe despre cod, vă rugăm să lăsați un comentariu pe blogul meu sau în secțiunea de comentarii de mai jos și mă străduiesc să vă întorc.

- Mai întâi vom încărca codul pe un Arduino Nano conectat la un ecran de 128x32.

Putem folosi codul așa cum este fără modificări.

128x32 folosește adresa 0x3C, așa că acest bit arată bine aici, permite să verifice dublu biblioteca antetului, da, se folosește și adresa 0x3C, iar tipul de afișare este 128x32.

- Acum permite conectarea afișajului de 128x64. După cum știm, folosește adresa 0x3C în mod implicit, deci nu este nevoie să actualizăm adresa nici în cod, nici în bibliotecă.

Trebuie doar să comentăm 128_32 și să decomentăm 128_64 din biblioteca de antet și să schimbăm LCDHEIGHT la 64 în codul nostru.

- Acum, pentru a rula același cod pe un NodeMCU, trebuie să schimbăm încă o linie în codul nostru.

Restul codului „#define OLED_RESET 4”> „#define OLED_RESET LED_BUILTIN” este același cu Arduino

Destul de mult pentru a afișa tot ceea ce trebuie mai întâi pentru a șterge ecranul anterior folosind

display.clearDisplay (); // Ștergeți tamponul

Apoi desenează obiectul

testdrawline (); // Trage o linie

Arată-l pe hardware

display.display (); // Faceți-le vizibile pe hardware-ul afișajului!

Așteptați ceva timp înainte de a afișa următorul element.

întârziere (2000); // Așteptați 2 secunde

În acest exemplu afișăm câteva elemente, cum ar fi text, linii, cercuri, text în derulare, triunghiuri și multe altele. Mergeți mai departe și folosiți-vă imaginația și afișați orice doriți pe aceste afișaje minuscule.

Pasul 10: Personalizarea textului și adăugarea de imagini

Personalizarea textului și adăugarea de imagini
Personalizarea textului și adăugarea de imagini
Personalizarea textului și adăugarea de imagini
Personalizarea textului și adăugarea de imagini
Personalizarea textului și adăugarea de imagini
Personalizarea textului și adăugarea de imagini

Uneori, codul dvs. trebuie să afișeze fonturi personalizate și

imagini. Dacă sunteți foarte bun în maparea de biți, trebuie doar să creați o matrice de octeți pornind sau dezactivând LED-urile mici ale afișajului pentru a crea fonturi și imagini personalizate.

Cu toate acestea, nu sunt foarte bun în a face aceste mapări și nu vreau să petrec ore întregi creând tabelele de hărți de biți.

Deci, care sunt opțiunile mele? În general, folosesc două site-uri web pentru a genera fonturi și imagini personalizate. Linkurile sunt furnizate în descrierea de mai jos.

Fonturi personalizate

Accesați site-ul web al convertizorului de fonturi, selectați familia fontului, stilul, dimensiunea, versiunea bibliotecii ca „Adafruit GFX Font” și apoi apăsați butonul „Creați”. În partea dreaptă a acestei pagini puteți vedea cum va arăta fontul dvs. pe afișajul real.

Pe baza selecției dvs., pagina web generează fișierul antet al fonturilor. Creați un fișier numit „modified_font.h” în același folder în care se află codul dvs. și copiați și salvați codul generat în acesta. Apoi, trebuie doar să includeți fișierul antet în codul dvs. pentru a utiliza fontul personalizat.

#include "modified_font.h"

Apoi, trebuie doar să setați fontul înainte de a afișa textul pentru a aplica fontul personalizat acestuia.

display.setFont (& Your_Fonts_Name);

Puteți obține numele fontului din fișierul de antet pe care tocmai l-ați adăugat la proiect. Asta e, ușor.

Memoria este întotdeauna o problemă în timpul utilizării fonturilor personalizate, deci luați în considerare întotdeauna octeții care vor fi consumați de memorie. Amintiți-vă că Arduino UNO are doar 32K de memorie.

Imagini personalizate

Pentru a afișa o imagine bitmap pe ecran, trebuie mai întâi să creați o imagine de dimensiuni 128 x 64/32.

Folosesc vechiul „MS Paint” pentru a crea o imagine de 128 x 64 bitmap pe care o voi încărca apoi pe acest site de conversie a imaginilor. Site-ul web convertește imaginile în șiruri de octeți, care pot fi utilizate cu afișajele Arduino și OLED.

Începeți prin încărcarea imaginii pe site. Apoi bifați caseta de selectare „Inversați culorile imaginii” și schimbați „Format cod de ieșire” la „Cod Arduino”, apoi selectați orientarea și apăsați butonul „Generați cod” pentru a genera matricea de octeți. Secțiunea „Previzualizare” vă arată cum va arăta imaginea dvs. pe afișajul real.

Am inclus codul împreună cu acest tutorial pe care îl puteți utiliza pentru a vă afișa imaginile. Trebuie doar să înlocuiți tabloul din codul meu cu cel pe care tocmai l-ați generat și apoi să îl încărcați pe Arduino.

Pasul 11: Conectarea a 2 afișaje

Conectarea a 2 afișaje
Conectarea a 2 afișaje
Conectarea a 2 afișaje
Conectarea a 2 afișaje

Conectarea a două afișaje de 128 x 64 la proiectul dvs. este ușoară.

Trebuie doar să desfaceți rezistorul 0Ohm de la adresa 0x78 și să îl puneți pe 0x7A și apoi să utilizați adresa 0x3D în codul dvs. în loc de 0x3C implicit.

Trebuie să vă întrebați de ce folosim adresa 0x3C și 0x3D și nu 0x78 și 0x7A. Arduino acceptă adresa pe 7 biți și nu adresele hardware pe 8 biți. Deci, mai întâi trebuie să convertim adresa de 8 biți în binar și apoi să tăiem cel mai puțin semnificativ bit pentru a obține cei 7 biți. Apoi convertiți cei 7 biți în HEX pentru a obține adresele 0x3C sau 0x3D pe care le introduceți în cod.

Mai întâi, inițializați afișajul dându-i un nume unic:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Apoi, în codul dvs., utilizați afișajul 1 și afișajul 2 pentru a apela declarațiile begin cu adresele dispozitivului în ele:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // afișează 1 adresă op 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // afișează 2 adrese op 0x3D

Gata, acum puteți merge mai departe și puteți face orice doriți folosind fie Display 1, fie Display 2 în restul codului. Am oferit un exemplu cu acest tutorial.

Cablarea este exact aceeași cu ceea ce am făcut înainte, cam trebuie doar să adăugați un alt afișaj la aceiași pini I2C ai Arduino sau NodeMCU. Pe baza adreselor, MCU trimite apoi datele pe linia de date I2C.

Pasul 12: Conectarea a mai mult de 2 afișaje

Conectarea a mai mult de 2 afișaje
Conectarea a mai mult de 2 afișaje
Conectarea a mai mult de 2 afișaje
Conectarea a mai mult de 2 afișaje
Conectarea a mai mult de 2 afișaje
Conectarea a mai mult de 2 afișaje

Acum, dacă doriți să conectați mai mult de 2 afișaje?

Arduino are un număr limitat de ace și, prin urmare, nu puteți avea mai mult de o anumită cantitate de scuturi atașate la acesta. Mai mult, are o singură pereche de autobuze I2C.

Deci, cum putem atașa mai mult de 2 afișaje I2C la un Arduino? Trucul este să folosiți un multiplexor TCA9548.

TCA9548 permite unui singur microcontroler să comunice cu până la '64 senzori ', toți cu aceeași adresă I2C sau diferită, prin atribuirea unui canal unic fiecărei sub-magistrale slave a senzorului.

Când vorbim despre trimiterea de date prin 2 fire către mai multe dispozitive, atunci avem nevoie de o modalitate de a le aborda. Este la fel ca poștașul care vine pe un singur drum și aruncă pachetele poștale în case diferite, deoarece au adrese diferite scrise pe ele.

Multiplexorul se conectează la liniile 3V3, GND, SDA și SCL ale microcontrolerului. Senzorii slave sunt conectați la unul dintre cele opt porturi slave SCL / SDA de pe placă. Canalele sunt selectate trimițând TCA9548A adresa I2C (0x70 {implicit} - 0x77) urmată de numărul canalului (0b00000001 - 0b10000000). Ați putea avea la maximum 8 dintre aceste multiplexoare conectate împreună pe adrese 0x70-0x77 pentru a controla 64 din aceleași părți adresate I2C. Prin conectarea celor trei biți de adresă A0, A1 și A2 la VIN puteți obține o combinație diferită de adrese. Voi explica acest lucru în detaliu în următorul meu tutorial de pe placa de breakout TCA9548A. Deocamdată, să conectăm doar 8 OLED-uri la această placă și să aruncăm o privire rapidă asupra codului.

Conexiune:

VIN la 5V (sau 3,3V)

GND la sol

Ceas SCL la I2C

Date SDA la I2C

Apoi conectați senzorii la VIN, GND și utilizați unul dintre autobuzele multiplexate SCn / SDn

Acum, codul Int permite să înceapă prin includerea bibliotecii „Wire” și prin definirea adresei multiplexoarelor.

#include „Wire.h”

#include

#define MUX_Address 0x70 // TCA9548A Adresa codificatorilor

Apoi, trebuie să selectăm portul către care dorim să comunicăm și să trimitem datele de pe acesta folosind această funcție:

void tcaselect (uint8_t i) {

dacă (i> 7) returnează;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Apoi vom inițializa afișajul în secțiunea de configurare apelând „u8g.begin ();” pentru fiecare afișaj atașat la MUX "tcaselect (i);"

Odată inițializat, putem face orice vrem doar apelând funcția „tcaselect (i);” unde „i” este valoarea magistralei multiplexate și apoi trimite datele și ceasul în consecință.

Pasul 13: Avantaje și dezavantaje

Avantaje și dezavantaje
Avantaje și dezavantaje

Imaginea unui OLED este frumoasă. Cu toate acestea, OLED-urile au și ele

dezavantaje. Deoarece ecranele OLED conțin material organic, durata lor de viață este mai scurtă decât afișajele LCD. În plus, multe afișaje OLED obțin burn-in-uri după ce arată mult timp aceeași imagine. După un burn-in, imaginea rămâne pe ecran chiar și după afișarea unei alte imagini. Deci, asigurați-vă că continuați să reîmprospătați ecranul la fiecare câteva secunde. Apa poate deteriora instantaneu materialele organice ale acestor afișaje.

Avantaje

Nu este nevoie de o lumină de fundal

Afișajele sunt foarte subțiri și ușoare

Consum redus de putere

Unghiurile de vizualizare sunt mai largi decât LCD-urile

Luminozitatea și contrastul sunt minunate

Viteză mare și timp de răspuns scăzut

Culoare neagră profundă

Dezavantaje

Tehnologie costisitoare

Cicl de viață scurt

OLED-urile sunt mai susceptibile de a arde

Daune provocate de apă

Pasul 14: Erori comune

Erori frecvente
Erori frecvente

Pentru a încheia, tutorialul permite să vorbim despre câteva erori frecvente

oamenii fac în timp ce utilizează aceste afișaje:

- Verificați triplu întotdeauna pinii înainte de a-l utiliza în proiect

- Alegeți adresa corectă a bibliotecii în fișierul antet și în cod

#define SSD1306_I2C_ADDRESS 0x3C // în Adafruit_SSD1306.h

și

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // în codul tău

Dacă adresa este greșită, OLED nu va afișa nimic

- Dimensiunea afișajului trebuie modificată în driver înainte de a putea fi utilizată. Dacă nu este modificat, veți primi un mesaj de eroare atunci când încercați să verificați codul

#error ("Înălțime incorectă, vă rugăm să remediați Adafruit_SSD1306.h!");

- Dacă utilizați NodeMCU, asigurați-vă că înlocuiți OLED_RESET de la 4 la LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Am oameni de scenă care fac tot felul de lucruri folosind acest ecran OLED. Unii au făcut chiar și jocuri video și toate. Chiar nu mă interesează să creez un joc video folosind acest afișaj mic. Cu toate acestea, vă voi lăsa acum să vă explorați imaginația și să ieși cu idei uimitoare.

Pasul 15: Link-uri

- Blog:

- Adăugați o imagine:

- Text personalizat:

- Biblioteca de afișare Adafruit:

- Biblioteca Adafruit GFX:

- biblioteca u8glib: https://code.google.com/archive/p/u8glib/ sau

Dacă doriți să utilizați afișajul mai mic, utilizați 128_32 implicit în caz contrar, pentru afișajul mai mare, comentați 128_32 și decomentați 128X64 NO_ACK din codul dvs. (doar decomentați tipul de ecran pe care îl utilizați) (fonturile sunt în biblioteca de fonturi)

Recomandat: