Kazalo:

OLED I2C Display Arduino/NodeMCU Vadnica: 15 korakov
OLED I2C Display Arduino/NodeMCU Vadnica: 15 korakov

Video: OLED I2C Display Arduino/NodeMCU Vadnica: 15 korakov

Video: OLED I2C Display Arduino/NodeMCU Vadnica: 15 korakov
Video: #oled #arduino #viral 2024, Julij
Anonim
Image
Image

Prvi program, ki ga napišete, ko se začnete učiti a

nov programski jezik je: "Hello World!".

Program sam ne stori nič drugega kot natisne besedilo "Hello World" na zaslon.

Torej, kako naj naš Arduino prikaže "Hello World!"?

V tem videoposnetku vam bom pokazal, kako začeti z majhnimi zasloni OLED 0,91 (128x32) in 0,96 (128x64) I2C OLED.

Na spletu je na stotine vadnic, ki na različne načine razlagajo isto stvar, vendar nisem našel take, ki bi mi povedala vse o zaslonu OLED in kako ga uporabljati v različnih scenarijih. Vzelo mi je nekaj časa, da sem vse uredil. Zato sem mislil, da bi moral ustvariti vadnico o tem, kar sem se naučil, in združiti vse funkcije in načine uporabe zaslonov OLED v naših projektih.

1. korak: stvari, ki se jih bomo danes naučili

Strojna zahteva
Strojna zahteva

V tem videu bomo govorili o:

- Kaj je zaslon OLED?

- Nato si bomo podrobneje ogledali OLED -zaslone 0,91 (128x32) in 0,96 (128x64) I2C OLED

- Nato bomo govorili o namestitvi knjižnice Adafruit v vaš Arduino IDE

- Nato bomo NodeMCU in Arduino povezali z zaslonom OLED

- Nato si bomo ogledali kodo in na njej prikazali nekaj grafik in besedila

- Govorili bomo tudi o uporabi pisav po meri in prikazovanju slik

- Nato bomo z mikrokontrolerjem I2C povezali več OLED-jev z mikrokrmilnikom

- Na koncu bomo govorili o nekaj pogostih napakah, ki jih ljudje delajo pri uporabi zaslonov OLED

2. korak: Zahteve po strojni opremi

Za to vadnico potrebujemo:

- Breadboard

- Zasloni OLED velikosti 0,91 "(128x32) in 0,96" (128x64) I2C

- Arduino UNO/NANO (kar je pri roki)

- NodeMCU

- TCA9548A I2C multiplekser

- Nekaj priključnih kablov

- in kabel USB za nalaganje kode

3. korak: Kaj je zaslon OLED?

Kaj je zaslon OLED?
Kaj je zaslon OLED?
Kaj je zaslon OLED?
Kaj je zaslon OLED?

OLED ali organska svetleča dioda je svetlobna

dioda (LED), v kateri je emisijska elektroluminiscenčna plast film organske spojine (milijoni majhnih LED luči), ki oddaja svetlobo kot odziv na električni tok.

OLED-ji se uporabljajo za ustvarjanje digitalnih zaslonov v napravah, kot so televizijski zasloni, računalniški monitorji, prenosni sistemi, kot so mobilni telefoni, ročne igralne konzole in dlančniki. Zaslon OLED deluje brez osvetlitve ozadja, ker oddaja vidno svetlobo.

4. korak:

Slika
Slika

V datoteki. Je na voljo veliko vrst zaslonov OLED

trgu na podlagi njihovega

- Velikosti

- Barva

- Blagovne znamke

- Protokol

- SPI (serijski periferni vmesnik) ali I2C

-Shema krmiljenja s pasivno matrico (PMOLED) ali aktivno matriko (AMOLED)

V tej vadnici bom govoril o povezovanju

modra barva 0,91 (128x32 OLED) in 0,96 (128x64 OLED) I2C OLDE za zaslone Arduino NANO in NodeMCU. Tehnologija vodila I2C uporablja samo 2 zatiča MCU, zato imamo na voljo kup drugih senzorjev.

5. korak: Od blizu

Pogled od blizu
Pogled od blizu
Pogled od blizu
Pogled od blizu
Pogled od blizu
Pogled od blizu

Poglejmo si bližje ta dva prikaza.

Na zadnji strani teh zaslonov je na kupih spajkanih kondenzatorjev SMD in uporov; ker pa gre za napravo I2C, nam je mar le za ta 2 zatiča (SCL in SDA)

Zaslon se poveže z Arduinom z uporabo samo štirih žic - dve za napajanje (VCC in GND) in dve za podatke (serijska ura SCL in

serijski podatki SDA), zaradi česar je ožičenje zelo preprosto. Podatkovna povezava je I2C (I²C, IIC ali Inter-Integrated Circuit) in ta vmesnik se imenuje tudi TWI (Two Wire Interface).

- Zatiči na vozilu so lahko v drugačnem vrstnem redu, zato vedno trikrat preverite, preden jih priključite na svoj projekt.

- Delovna napetost je med 3V in 5V, vendar je najbolje uporabiti navodila iz podatkovnega lista proizvajalca.

- Včasih moramo v svojih projektih uporabiti 2 zaslona. Torej, kako lahko to dosežemo?

Trik je v tem, da imate na zaslonu nastavljiv naslov. Ta enota ima nastavljiv naslov med 0x78 in 0x7A. Naslov lahko spremenimo tako, da upor 0Ohm odpakiramo z ene strani in ga priklopimo na drugo stran ali pa samo z globalnim spajkanjem. O tem bomo podrobneje govorili, ko bomo v naslednjem razdelku te vadnice priklopili več zaslonov na Arduino.

Na sliki so ti zasloni videti zelo veliki. Toda v praksi so majhne. Narejene so iz 128 x 32/64 posameznih slikovnih pik OLED in ne potrebujejo osvetlitve ozadja. Samo poglejte to in poglejte, kako majhna je. Čeprav so majhne, so lahko zelo uporabne pri vseh elektronskih projektih.

6. korak: Knjižnica

Knjižnica
Knjižnica
Knjižnica
Knjižnica
Knjižnica
Knjižnica

Za nadzor teh je na voljo več knjižnic

prikaže. V preteklosti sem uporabljal "knjižnico u8glib", vendar se mi zdi knjižnica AdaFruit zelo enostavna za razumevanje in uporabo v naših projektih. Zato bom v tej vadnici uporabil knjižnico AdaFruit.

Za nadzor OLED zaslona potrebujete knjižnico "adafruit_GFX.h" in knjižnico "adafruit_SSD1306.h".

Knjižnico lahko prenesete in namestite v svoj Arduino IDE na dva načina.

1. metoda

Pojdite na "Upravitelj knjižnice" in poiščite "adafruit_SSD1306" in "adafruit_gfx"

Izberite najnovejšo različico in pritisnite gumb Namesti.

Ko so nameščene, lahko te knjižnice uporabljate v svojem programu.

Metoda 2

Ti dve knjižnici lahko prenesete tudi iz github -a (potrebujete obe):

Povezave bom dal v spodnjem opisu.

Knjižnica zaslona:

Knjižnica GFX:

Ko prenesete, kopirajte mapo Adafruit_SSD1306-master iz prenesene zip datoteke v mapo knjižnic Arduino. To mapo običajno najdete v razdelku Dokumenti> Arduino> knjižnice v sistemih Windows. V Linuxu ga običajno najdemo v domači mapi> Arduino> knjižnice. Nazadnje v mapi knjižnice Arduino preimenujte mapo Adafruit_SSD1306-master v Adafruit_SSD1306. Tudi če ne preimenujete, je to v redu.

7. korak:

Slika
Slika

Zdaj pa poglejmo "Adafruit_SSD1306.h"

mapa

V tej knjižnici moramo vedeti dve stvari:

1. Če želite uporabiti manjši zaslon, uporabite privzeto 128_32, sicer pa za večji prikaz komentirajte 128_32 in razkomentirajte 128_64

2. Če ste na ploščo spajkali naslov 0x7A (o katerem bomo govorili kasneje), uporabite 7 -bitni naslov 0x3D za večje zaslone, sicer uporabite privzeti naslov 0x3C. Za manjše zaslone je naslov 0x3C.

8. korak: Ožičenje 128 X 64/32 OLED

Ožičenje 128 X 64/32 OLED
Ožičenje 128 X 64/32 OLED

Začnimo s povezovanjem NodeMCU z zaslonom.

Prva in najpomembnejša stvar, ki jo je treba opozoriti, je, da so na nekaterih zaslonih morda zamenjani napajalni zatiči GND in VCC. Preverite, ali je zaslon enak sliki. Če se zatiči zamenjajo, spremenite povezave z Arduinom ali NodeMCU.

- NodeMCU OLED ožičenje

OLED VCC - NodeMCU 3.3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- Arduino Uno OLED ožičenje

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

- Arduino MEGA 2560 OLED ožičenje

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino MEGA 2560 pin 21

OLED SDA - Arduino MEGA 2560 pin 20

9. korak: Koda

Koda
Koda
Koda
Koda
Koda
Koda
Koda
Koda

Knjižnica Adafruit ponuja res dobre primere za oba

Zasloni 128x32 in 128x64.

Knjižnica se nahaja pod Datoteka> Primeri> Adafruit SSD1306> in nato tip prikaza v Arduino IDE.

Uporabili bomo primer 128x32 I2C in ga spremenili tako, da bo deloval tako z zasloni 128x64 kot 128x32, tako da ga priključimo na Arduino in nato na ploščo NodeMCU.

Koda se začne z vključitvijo obeh knjižnic Adafruit. V tej vadnici se bom osredotočil le na tiste dele kode, ki so potrebni, da jih naložimo na plošče in zaslone. Če želite izvedeti več o kodi, pustite komentar na mojem spletnem dnevniku ali v spodnjem razdelku s komentarji in poskušal se bom obrniti na vas.

- Najprej bomo kodo naložili v Arduino Nano, povezan z zaslonom 128x32.

Kodo lahko uporabimo tako, kot je, brez kakršnih koli sprememb.

128x32 uporablja naslov 0x3C, zato je ta bit tukaj videti vse dobro, dvakrat preverimo knjižnico glav, ja, uporablja tudi naslov 0x3C in tip prikaza je 128x32.

- Zdaj lahko povežemo zaslon 128x64. Kot vemo, privzeto uporablja naslov 0x3C, zato nam ni treba posodabljati naslova niti v kodi niti v knjižnici.

Samo komentirati moramo 128_32 in razkomentirati 128_64 v knjižnici glave ter spremeniti LCDHEIGHT na 64 v naši kodi.

- Zdaj, da zaženemo isto kodo na NodeMCU, moramo spremeniti še eno vrstico v naši kodi.

Preostali del kode "#define OLED_RESET 4"> "#define OLED_RESET LED_BUILTIN" je enak kot Arduino

Precej za prikaz vsega, kar moramo najprej počistiti s prejšnjim zaslonom

display.clearDisplay (); // Počisti vmesni pomnilnik

Nato narišite predmet

testdrawline (); // Nariši črto

Pokažite ga na strojni opremi

display.display (); // Naj bodo vidni na strojni opremi zaslona!

Počakajte nekaj časa, preden prikažete naslednji element.

zamuda (2000); // Počakajte 2 sekundi

V tem primeru prikazujemo nekaj elementov, kot so besedilo, vrstice, krogi, drsno besedilo, trikotniki in drugo. Pojdite naprej, uporabite domišljijo in na teh drobnih zaslonih prikažite kar želite.

10. korak: prilagajanje besedila in dodajanje slik

Prilagajanje besedila in dodajanje slik
Prilagajanje besedila in dodajanje slik
Prilagajanje besedila in dodajanje slik
Prilagajanje besedila in dodajanje slik
Prilagajanje besedila in dodajanje slik
Prilagajanje besedila in dodajanje slik

Včasih mora vaša koda prikazati pisave po meri in

slike. Če ste zelo dobri pri preslikavah bitov, morate samo ustvariti bajtne matrike tako, da vklopite ali izklopite drobne LED diode na zaslonu, da ustvarite pisave in slike po meri.

Vendar pri teh preslikavah nisem ravno dober in ne želim porabiti ur za ustvarjanje tabel bitnih zemljevidov.

Kakšne so torej moje možnosti? Na splošno uporabljam dve spletni strani za ustvarjanje pisav in slik po meri. Povezave so v spodnjem opisu.

Pisave po meri

Pojdite na spletno mesto za pretvorbo pisav, izberite družino pisav, slog, velikost, različico knjižnice kot "Pisava Adafruit GFX" in nato pritisnite gumb "Ustvari". Na desni strani te strani si lahko ogledate, kako bo izgledala vaša pisava na dejanskem zaslonu.

Na podlagi vaše izbire spletna stran ustvari datoteko glave pisave. Ustvarite datoteko z imenom "modified_font.h" v isti mapi, kjer je vaša koda, in kopirajte in shranite ustvarjeno kodo vanjo. Nato morate v kodo vključiti datoteko glave, da uporabite pisavo po meri.

#include "modified_font.h"

Nato morate pred prikazom besedila nastaviti pisavo, da nanjo uporabite pisavo po meri.

display.setFont (& Your_Fonts_Name);

Ime pisave lahko dobite iz datoteke z glavo, ki ste jo pravkar dodali v svoj projekt. Tako je, enostavno.

Pomnilnik je pri uporabi pisav po meri vedno skrb, zato vedno upoštevajte bajte, ki jih bo pomnilnik porabil. Ne pozabite, da ima Arduino UNO le 32K pomnilnika.

Slike po meri

Če želite na zaslonu prikazati slikovno sliko, morate najprej ustvariti sliko velikosti 128 x 64/32.

Uporabljam dobro staro "MS Paint" za ustvarjanje bitne slike 128 x 64, ki jo bom nato naložil na to spletno mesto za pretvorbo slik. Spletno mesto pretvori slike v nizove bajtov, ki jih je mogoče uporabiti z zasloni Arduino in OLED.

Začnite tako, da sliko naložite na spletno mesto. Nato potrdite polje "Obrni barve slike" in spremenite "Format izhodne kode" v "Arduino koda", nato izberite orientacijo in pritisnite gumb "Ustvari kodo", da ustvarite matriko bajtov. V razdelku »Predogled« je prikazano, kako bo vaša slika videti na dejanskem zaslonu.

Skupaj s to vadnico sem vključil kodo, s katero lahko prikažete svoje slike. Morate le zamenjati matriko v moji kodi s tisto, ki ste jo pravkar ustvarili, in jo nato naložite v svoj Arduino.

11. korak: Povezovanje 2 zaslonov

Povezovanje 2 zaslonov
Povezovanje 2 zaslonov
Povezovanje 2 zaslonov
Povezovanje 2 zaslonov

Priključitev dveh zaslonov velikosti 128 x 64 na vaš projekt je enostavna.

Odporiti 0Ohm upor morate samo z naslova 0x78 in ga namestiti na 0x7A, nato pa namesto privzetega 0x3C uporabiti naslov 0x3D v kodi.

Gotovo se sprašujete, zakaj uporabljamo naslove 0x3C in 0x3D in ne dejanskih 0x78 in 0x7A. Arduino sprejema 7-bitne naslove in ne 8-bitne strojne naslove. Torej, najprej moramo pretvoriti 8-bitni naslov v binarni, nato pa odrezati najmanj pomemben bit, da dobimo 7 bitov. Nato pretvorite 7 bitov v HEX, da dobite naslove 0x3C ali 0x3D, ki jih vnesete v kodo.

Najprej inicializirajte zaslon tako, da mu date edinstveno ime:

Zaslon Adafruit_SSD1306 (OLED_REST);

Zaslon Adafruit_SSD1306 (OLED_REST);

Nato v kodi uporabite zaslon 1 in zaslon 2, da pokličete stavke start z naslovi naprav v njih:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // prikaže 1 op naslov 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // prikaže 2 op naslov 0x3D

To je to, zdaj lahko nadaljujete in delate kar želite z uporabo zaslona 1 ali zaslona 2 v preostali kodi. Za to vadnico sem dal primer.

Ožičenje je popolnoma enako tistemu, kar smo storili že prej, precej morate samo dodati nov zaslon na iste zatiče I2C bodisi Arduino ali NodeMCU. Na podlagi naslovov MCU nato pošlje podatke na podatkovni liniji I2C.

12. korak: Povežite več kot 2 zaslona

Priključitev več kot 2 zaslonov
Priključitev več kot 2 zaslonov
Priključitev več kot 2 zaslonov
Priključitev več kot 2 zaslonov
Priključitev več kot 2 zaslonov
Priključitev več kot 2 zaslonov

Kaj pa, če želite povezati več kot 2 zaslona?

Arduino ima omejeno število zatičev, zato nanj ne morete imeti več kot določene količine ščitov. Poleg tega ima samo en par avtobusov I2C.

Torej, kako lahko na Arduino priključimo več kot 2 zaslona I2C? Trik je v uporabi multipleksorja TCA9548.

TCA9548 omogoča, da en sam mikrokrmilnik komunicira z največ '64 senzorji', vse z istim ali drugačnim naslovom I2C, tako da vsakemu pod-vodilu senzorja dodeli edinstven kanal.

Ko govorimo o pošiljanju podatkov po dveh žicah na več naprav, potrebujemo način, kako jih nasloviti. Enako kot poštar, ki prihaja na eno samo cesto in odlaga pakete pošte v različne hiše, ker imajo na njih napisane različne naslove.

Multiplekser se poveže z linijami 3V3, GND, SDA in SCL mikrokrmilnika. Pomožni senzorji so povezani z enim od osmih pomožnih vrat SCL/SDA na plošči. Kanale izberete tako, da pošljete TCA9548A naslov I2C (0x70 {privzeto} - 0x77), čemur sledi številka kanala (0b00000001 - 0b10000000). Za nadzor 64 istih naslovljenih delov I2C bi lahko imeli največ 8 teh multiplektorjev, povezanih skupaj na naslove 0x70-0x77. S priključitvijo treh naslovnih bitov A0, A1 in A2 na VIN lahko dobite različne kombinacije naslovov. To bom podrobneje razložil v naslednji vadnici o plošči TCA9548A. Zaenkrat na to ploščo povežemo samo 8 OLED -ov in si na hitro ogledamo kodo.

Povezava:

VIN do 5V (ali 3.3V)

GND na tla

Ura SCL na I2C

Podatki SDA do I2C

Nato priključite senzorje na VIN, GND in uporabite eno od multipleksnih vodil SCn / SDn

Zdaj, koda omogoča, da začnemo z vključitvijo knjižnice "Wire" in z definiranjem naslova multiplekserjev.

#include "Wire.h"

#vključi

#define MUX_Address 0x70 // TCA9548A Naslov kodirnikov

Nato moramo izbrati vrata, na katera želimo komunicirati, in s to funkcijo poslati podatke na njih:

void tcaselect (uint8_t i) {

če (i> 7) vrne;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Nato bomo zaslon v razdelku za nastavitev inicializirali tako, da pokličemo "u8g.begin ();" za vsak zaslon, priključen na MUX "tcaselect (i);"

Ko smo enkrat inicializirani, lahko naredimo, kar hočemo, samo s klicem funkcije "tcaselect (i);" kjer je "i" vrednost multipleksiranega vodila in nato ustrezno pošlje podatke in uro.

Korak: Prednosti in slabosti

Prednosti in slabosti
Prednosti in slabosti

Slika OLED -a je lepa. Vendar pa imajo OLED tudi

slabosti. Ker zasloni OLED vsebujejo organske materiale, je njihova življenjska doba krajša od LCD zaslonov. Poleg tega se po daljšem prikazovanju iste slike mnogi zasloni OLED vžgejo. Po vžigu slika ostane na zaslonu tudi po prikazovanju druge slike. Zato ne pozabite osveževati zaslona vsakih nekaj sekund. Voda lahko takoj poškoduje organske materiale teh zaslonov.

Prednosti

Osvetlitev ozadja ni potrebna

Zasloni so zelo tanki in lahki

Nizka poraba energije

Vidni koti so širši od LCD -jev

Svetlost in kontrast sta odlična

Visoka hitrost in nizek odzivni čas

Globoko črna barva

Slabosti

Draga tehnologija

Kratek življenjski cikel

OLED-ji so bolj verjetno vžgani

Poškodbe zaradi vode

Korak 14: Pogoste napake

Pogoste napake
Pogoste napake

Za zaključek vadnice se pogovorimo o nekaj pogostih napakah

ljudje naredijo med uporabo teh zaslonov:

- Preden jih uporabite v svojem projektu, vedno trikrat preverite zatiče

- Izberite pravi naslov knjižnice v datoteki z glavo in v kodi

#define SSD1306_I2C_ADDRESS 0x3C // v Adafruit_SSD1306.h

in

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // v vaši kodi

Če je naslov napačen, OLED ne prikaže ničesar

- Velikost zaslona morate v gonilniku spremeniti, preden jo lahko uporabite. Če ga ne spremenite, boste pri poskusu preverjanja kode dobili sporočilo o napaki

#error ("Višina ni pravilna, popravite Adafruit_SSD1306.h!");

- Če uporabljate NodeMCU, zamenjajte OLED_RESET s 4 na LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Imam ljudi, ki s tem OLED zaslonom izdelujejo vse mogoče stvari. Nekateri so celo naredili video igre in vse. Resnično me ne zanima izdelava video igre s tem majhnim zaslonom. Vendar vas bom zdaj zapustil, da raziščete svojo domišljijo in pridete z neverjetnimi idejami.

15. korak: Povezave

- Blog:

- Dodaj sliko:

- Besedilo po meri:

- Prikazna knjižnica Adafruit:

-Knjižnica Adafruit GFX:

- knjižnica u8glib: https://code.google.com/archive/p/u8glib/ ali

Če želite uporabiti manjši zaslon, uporabite privzeti 128_32, sicer pa za večji prikaz komentirajte 128_32 in razkomentirajte 128X64 NO_ACK v svoji kodi (samo odkomentirajte vrsto zaslona, ki ga uporabljate) (pisave so v knjižnici pisav)

Priporočena: