Sadržaj:

OLED I2C zaslon Arduino/NodeMCU Vodič: 15 koraka
OLED I2C zaslon Arduino/NodeMCU Vodič: 15 koraka

Video: OLED I2C zaslon Arduino/NodeMCU Vodič: 15 koraka

Video: OLED I2C zaslon Arduino/NodeMCU Vodič: 15 koraka
Video: Как измерить постоянное напряжение и ток и построить счетчик энергии с ЖК-дисплеем | Урок 104 2024, Srpanj
Anonim
Image
Image

Prvi program koji napišete kad počnete učiti a

novi programski jezik je: "Hello World!".

Sam program ne čini ništa drugo nego ispis teksta "Hello World" na ekranu.

Dakle, kako postići da naš Arduino prikaže "Hello World!"?

U ovom videu pokazat ću vam kako započeti s malim I2C OLED ekranima od 0,91 (128x32) i 0,96 (128x64).

Na webu postoji stotinjak vodiča koji objašnjavaju istu stvar na različite načine, ali nisam uspio pronaći onu koja bi mi sve rekla o OLED zaslonu i kako je koristiti u različitim scenarijima. Trebalo mi je neko vrijeme da sve to riješim. Stoga sam mislio da bih trebao stvoriti vodič o onome što sam naučio i kombinirati sve značajke i načine na koje se OLED zasloni mogu koristiti u našim projektima.

Korak 1: Stvari koje ćemo naučiti danas

Hardverski zahtjevi
Hardverski zahtjevi

U ovom videu govorit ćemo o:

- Što je OLED zaslon?

- Zatim ćemo pobliže pogledati I2C OLED zaslone od 0,91 (128x32) i 0,96 (128x64)

- Zatim ćemo govoriti o instaliranju Adafruit knjižnice na vaš Arduino IDE

- Tada ćemo spojiti NodeMCU i Arduino na OLED zaslon

- Zatim ćemo pogledati kod i prikazati neke grafike i tekst na njemu

- Također ćemo govoriti o primjeni prilagođenih fontova i prikazivanju slika

- Zatim ćemo povezati više OLED-ova na mikro-kontroler pomoću I2C multipleksera

- Na kraju ćemo govoriti o nekoliko uobičajenih pogrešaka koje ljudi čine tijekom korištenja OLED zaslona

Korak 2: Zahtjevi hardvera

Za ovaj vodič potrebni su nam:

- Breadboard

- I2C OLED zasloni od 0,91 "(128x32) i 0,96" (128x64)

- Arduino UNO/NANO (sve što vam je pri ruci)

- NodeMCU

- TCA9548A I2C multiplekser

- Nekoliko spojnih kabela

- i USB kabel za učitavanje koda

Korak 3: Što je OLED zaslon?

Što je OLED zaslon?
Što je OLED zaslon?
Što je OLED zaslon?
Što je OLED zaslon?

OLED ili organska svjetlosna dioda emitira svjetlost

dioda (LED) u kojoj je emisijski elektroluminiscentni sloj film organskog spoja (milijuni malih LED svjetiljki) koji emitira svjetlost kao odgovor na električnu struju.

OLED-ovi se koriste za stvaranje digitalnih zaslona na uređajima kao što su televizijski ekrani, računalni monitori, prijenosni sustavi poput mobilnih telefona, ručnih igraćih konzola i PDA-ova. OLED zaslon radi bez pozadinskog osvjetljenja jer emitira vidljivo svjetlo.

Korak 4:

Slika
Slika

Mnogo je vrsta OLED zaslona dostupnih u

tržištu na temelju njihove

- Veličine

- Boja

- Brendovi

- Protokol

- SPI (serijsko periferno sučelje) ili I2C

-Shema upravljanja pasivnom matricom (PMOLED) ili aktivno matricom (AMOLED)

U ovom ću vodiču govoriti o povezivanju

plava boja 0,91 (128x32 OLED) i 0,96 (128x64 OLED) I2C OLDE prikazuje na Arduino NANO i NodeMCU. Tehnologija sabirnice I2C koristi samo 2 pina MCU -a pa imamo na raspolaganju hrpe za druge senzore.

Korak 5: Bliži pogled

Pogled iz bliza
Pogled iz bliza
Pogled iz bliza
Pogled iz bliza
Pogled iz bliza
Pogled iz bliza

Pogledajmo bliže ova dva prikaza.

Na stražnjoj strani ovih zaslona nalaze se hrpe SMD kondenzatora i otpornika lemljenih na ploči; ali, budući da je riječ o I2C uređaju, stalo nam je samo do ova 2 pina (SCL i SDA)

Zaslon se povezuje s Arduinom koristeći samo četiri žice - dvije za napajanje (VCC i GND) i dvije za prijenos podataka (serijski sat SCL i

serijski podaci SDA), što ožičenje čini vrlo jednostavnim. Podatkovna veza je I2C (I²C, IIC ili među-integrirani krug), a to se sučelje naziva i TWI (dvožično sučelje).

- Utikači na ploči mogu biti različitog redoslijeda, pa uvijek provjerite trostruko prije nego što ih spojite na svoj projekt.

- Radni napon je između 3v i 5v, ali najbolje je koristiti upute iz podatkovne tablice proizvođača.

- Ponekad moramo koristiti 2 zaslona u svojim projektima. Dakle, kako to možemo postići?

Trik je u tome da na zaslonu imate konfiguriranu adresu. Ova jedinica ima konfiguriranu adresu između 0x78 i 0x7A. Samo raspakiranjem otpornika 0Ohm s jedne strane i spajanjem s druge strane ili samo stavljanjem globalnog lema možemo promijeniti adresu. O tome ćemo detaljno govoriti kada u više odjeljaka ovog vodiča spojimo više zaslona na Arduino.

Na slici ovi ekrani izgledaju jako veliki. No, praktički govoreći, maleni su. Izrađene su od 128 x 32/64 pojedinačnih OLED piksela i ne zahtijevaju pozadinsko osvjetljenje. Dovoljno je samo pogledati ovo i vidjeti koliko je mali. Iako su male, mogu biti vrlo korisne u bilo kojim elektroničkim projektima.

Korak 6: Knjižnica

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

Postoji nekoliko knjižnica za upravljanje njima

prikazuje. U prošlosti sam koristio "u8glib library", ali smatram da je AdaFruit knjižnicu vrlo lako razumjeti i koristiti u našim projektima. Dakle, u ovom ću vodiču koristiti biblioteku AdaFruit.

Za upravljanje OLED zaslonom trebat će vam knjižnica "adafruit_GFX.h" i "adafruit_SSD1306.h".

Postoje dva načina na koja možete preuzeti i instalirati knjižnicu na svoj Arduino IDE.

Metoda 1

Idite na "Upravitelj knjižnice" i pretražite "adafruit_SSD1306" i "adafruit_gfx"

Odaberite najnoviju verziju i pritisnite gumb Instaliraj.

Nakon instaliranja ove biblioteke možete koristiti u svom programu.

Metoda 2

Ove dvije biblioteke također se mogu preuzeti s githuba (trebate obje):

Dostavit ću veze u donjem opisu.

Biblioteka prikaza:

Knjižnica GFX:

Nakon preuzimanja kopirajte mapu Adafruit_SSD1306-master iz preuzete zip datoteke u mapu Arduino knjižnice. Ova se mapa obično nalazi u Documents> Arduino> libraries na Windows sustavima. Na Linuxu se obično nalazi u kućnoj mapi> Arduino> knjižnice. Na kraju, u mapi Arduino knjižnice preimenujte mapu Adafruit_SSD1306-master u Adafruit_SSD1306. Čak i ako ne promijenite naziv, to je u redu.

Korak 7:

Slika
Slika

Pogledajmo sada "Adafruit_SSD1306.h"

datoteka

Dvije stvari koje moramo znati u ovoj biblioteci:

1. Ako želite koristiti manji zaslon, upotrijebite zadani 128_32 inače za veći prikaz komentirajte 128_32 i uklonite komentar sa 128_64

2. Ako ste lemili adresu 0x7A na ploči (o čemu ćemo kasnije govoriti), tada koristite 7 -bitnu adresu 0x3D za veće zaslone, inače koristite zadanu adresu 0x3C. Za manje zaslone adresa je 0x3C.

Korak 8: Ožičenje 128 X 64/32 OLED -ova

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

Počnimo povezivanjem NodeMCU -a s zaslonom.

Prva i najvažnija stvar koju treba napomenuti je da neki od zaslona mogu zamijeniti priključke za napajanje GND i VCC. Provjerite zaslon kako biste bili sigurni da je isti kao i slika. Ako se pinovi zamijene, svakako promijenite veze na Arduino ili 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

Korak 9: Kodirajte

Kodirati
Kodirati
Kodirati
Kodirati
Kodirati
Kodirati
Kodirati
Kodirati

Knjižnica Adafruit ima zaista dobrih primjera za oboje

Zasloni 128x32 i 128x64.

Knjižnica se nalazi pod Datoteka> Primjeri> Adafruit SSD1306>, a zatim vrsta prikaza u Arduino IDE -u.

Koristit ćemo 128x32 I2C primjer i izmijenit ćemo ga za rad sa šakama na 128x64 i 128x32 zaslonima tako da ga spojimo na Arduino, a zatim na ploču NodeMCU.

Kôd počinje uključivanjem obje biblioteke Adafruit. U ovom ću vodiču naglasiti samo one dijelove koda koji su nam potrebni za učitavanje i na ploče i na zaslone. Ako želite saznati više o kodu, ostavite komentar na mom blogu ili u odjeljku komentara ispod, a ja ću vam se pokušati vratiti.

- Prvo ćemo učitati kôd na Arduino Nano povezan sa zaslonom 128x32.

Kôd možemo koristiti takav kakav jest bez ikakvih izmjena.

128x32 koristi adresu 0x3C pa ovaj bit izgleda dobro, dopušta dvaput provjeriti biblioteku zaglavlja, da, također koristi adresu 0x3C i tip prikaza je 128x32.

- Sada spojimo zaslon veličine 128x64. Kao što znamo, ona prema zadanim postavkama koristi adresu 0x3C pa ne moramo ažurirati adresu ni u kodu ni u knjižnici.

Trebamo samo komentirati 128_32 i ukloniti komentar 128_64 u biblioteci zaglavlja i promijeniti LCDHEIGHT na 64 u našem kodu.

- Sada za pokretanje istog koda na NodeMCU -u moramo promijeniti još jedan redak u našem kodu.

Ostatak koda "#define OLED_RESET 4"> "#define OLED_RESET LED_BUILTIN" isti je kao kod Arduina

Prilično za prikaz svega što prvo trebamo očistiti prethodni zaslon pomoću

display.clearDisplay (); // Brisanje međuspremnika

Zatim nacrtajte objekt

testdrawline (); // Nacrtaj liniju

Pokažite to na hardveru

display.display (); // Učinite ih vidljivim na hardveru zaslona!

Pričekajte neko vrijeme prije nego što prikažete sljedeću stavku.

odgoda (2000); // Pričekajte 2 sekunde

U ovom primjeru prikazujemo nekoliko stavki poput teksta, linija, krugova, pomicanja teksta, trokuta i još mnogo toga. Samo naprijed, upotrijebite maštu i prikažite što god želite na ovim malim zaslonima.

Korak 10: Prilagođavanje teksta i dodavanje slika

Prilagođavanje teksta i dodavanje slika
Prilagođavanje teksta i dodavanje slika
Prilagođavanje teksta i dodavanje slika
Prilagođavanje teksta i dodavanje slika
Prilagođavanje teksta i dodavanje slika
Prilagođavanje teksta i dodavanje slika

Ponekad vaš kôd mora prikazati prilagođene fontove i

slike. Ako ste vrlo dobri u mapiranju bitova, samo trebate stvoriti nizove bajtova uključivanjem ili isključivanjem sitnih LED dioda na zaslonu za stvaranje prilagođenih fontova i slika.

Međutim, nisam baš dobar u izradi ovih preslikavanja i ne želim trošiti sate na stvaranje tablica bitne karte.

Koje su mi mogućnosti? Općenito koristim dvije web stranice za generiranje prilagođenih fontova i slika. Veze su navedene u donjem opisu.

Prilagođeni fontovi

Idite na web stranicu za pretvaranje fontova, odaberite obitelj fontova, stil, veličinu, verziju knjižnice kao "Adafruit GFX font", a zatim pritisnite gumb "Kreiraj". Na desnoj strani ove stranice možete vidjeti kako će vaš font izgledati na stvarnom zaslonu.

Na temelju vašeg odabira web stranica generira datoteku zaglavlja fontova. Napravite datoteku pod nazivom "modified_font.h" u istoj mapi u kojoj se nalazi vaš kôd i kopirajte i spremite generirani kôd u nju. Zatim samo trebate uključiti datoteku zaglavlja u svoj kôd da biste koristili prilagođeni font.

#include "modified_font.h"

Zatim samo trebate postaviti font prije prikaza teksta kako biste na njega primijenili prilagođeni font.

display.setFont (& Your_Fonts_Name);

Naziv fonta možete dobiti iz datoteke zaglavlja koju ste upravo dodali u svoj projekt. To je to, lako.

Memorija je uvijek briga tijekom korištenja prilagođenih fontova, stoga uvijek uzmite u obzir bajtove koje će memorija potrošiti. Sjetite se samo da Arduino UNO ima samo 32K memorije.

Prilagođene slike

Da biste prikazali bitnu sliku na zaslonu, prvo morate stvoriti sliku veličine 128 x 64/32.

Koristim stari dobri "MS Paint" za stvaranje 128 x 64 bitne slike koju ću zatim prenijeti na ovu web stranicu za pretvaranje slika. Web stranica pretvara slike u nizove bajtova, koji se mogu koristiti s Arduino i OLED zaslonima.

Započnite postavljanjem slike na web mjesto. Zatim označite potvrdni okvir "Invert image images" (Promijeni boje slike) i promijenite "Output code format" (Format izlaznog koda) u "Arduino Code", zatim odaberite orijentaciju i pritisnite gumb "Generate Code" (Generiraj kod) da biste generirali niz bajtova. Odjeljak "Pregled" prikazuje vam kako će vaša slika izgledati na stvarnom zaslonu.

Uz ovaj sam vodič uključio kôd koji možete koristiti za prikaz slika. Samo trebate zamijeniti niz u mom kodu s onim koji ste upravo generirali, a zatim ga učitati u svoj Arduino.

Korak 11: Povezivanje 2 zaslona

Povezivanje 2 zaslona
Povezivanje 2 zaslona
Povezivanje 2 zaslona
Povezivanje 2 zaslona

Povezivanje dva zaslona veličine 128 x 64 s vašim projektom jednostavno je.

Vi samo trebate otpakovati otpornik 0Ohm sa adrese 0x78 i staviti ga na 0x7A, a zatim koristiti 0x3D adresu u svom kodu umjesto zadanog 0x3C.

Sigurno se pitate zašto koristimo adrese 0x3C i 0x3D, a ne stvarne 0x78 i 0x7A. Arduino prihvaća 7-bitnu adresu, a ne 8-bitnu hardversku adresu. Dakle, prvo moramo pretvoriti 8-bitnu adresu u binarnu, a zatim odrezati najmanji bit da bismo dobili 7 bitova. Zatim pretvorite 7 bitova u HEX kako biste dobili adrese 0x3C ili 0x3D koje unesete u svoj kôd.

Prvo, inicijalizirajte zaslon dajući mu jedinstveno ime:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Zatim u svom kodu upotrijebite zaslon 1 i zaslon 2 za pozivanje početnih naredbi s adresama uređaja u njima:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // prikaz 1 op adrese 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // prikaz 2 op adrese 0x3D

To je to, sada možete ići naprijed i raditi što god želite koristeći Display 1 ili Display 2 u ostatku koda. Dao sam primjer s ovim vodičem.

Ožičenje je potpuno isto kao i ono što smo već radili, prilično vam je potrebno samo dodati još jedan zaslon istim I2C pinovima bilo Arduina ili NodeMCU -a. Na temelju adresa MCU zatim šalje podatke na podatkovnoj liniji I2C.

Korak 12: Povezivanje više od 2 zaslona

Povezivanje više od 2 zaslona
Povezivanje više od 2 zaslona
Povezivanje više od 2 zaslona
Povezivanje više od 2 zaslona
Povezivanje više od 2 zaslona
Povezivanje više od 2 zaslona

Što ako želite spojiti više od 2 zaslona?

Arduino ima ograničen broj pinova pa stoga na njega ne možete imati više od određene količine štitova. Štoviše, ima samo jedan par I2C sabirnica.

Dakle, kako možemo priključiti više od 2 I2C zaslona na Arduino? Trik je u korištenju multipleksera TCA9548.

TCA9548 omogućuje jednom mikrokontroleru da komunicira s do '64 senzora 'sa istom ili različitom I2C adresom dodjeljujući jedinstveni kanal svakoj pod-sabirnici senzora.

Kada govorimo o slanju podataka preko 2 žice na više uređaja, tada nam je potreban način da ih adresiramo. To je isto kao i poštar koji dolazi jednom cestom i baca pakete pošte u različite kuće jer na njima ima ispisanih različitih adresa.

Multiplekser se povezuje na 3V3, GND, SDA i SCL linije mikrokontrolera. Podređeni senzori spojeni su na jedan od osam SCL/SDA podređenih portova na ploči. Kanali se biraju slanjem TCA9548A njegove I2C adrese (0x70 {zadano} - 0x77) nakon čega slijedi broj kanala (0b00000001 - 0b10000000). Mogli ste imati maksimalno 8 ovih multipleksera spojenih zajedno na 0x70-0x77 adresama kako biste kontrolirali 64 istih dijelova s I2C adresama. Spajanjem tri adresna bita A0, A1 i A2 na VIN možete dobiti različite kombinacije adresa. Objasnit ću ovo detaljno u svom sljedećem vodiču o ploči za razbijanje TCA9548A. Za sada, spojimo 8 OLED -ova na ovu ploču i brzo pogledajmo kod.

Priključak:

VIN do 5V (ili 3.3V)

GND na uzemljenje

SCL na I2C sat

SDA do I2C podaci

Zatim spojite senzore na VIN, GND i upotrijebite jednu od SCn / SDn multipleksnih sabirnica

Sada, Int kod omogućuje početak uključivanjem "Wire" knjižnice i definiranjem adrese multipleksera.

#include "Wire.h"

#uključi

#define MUX_Address 0x70 // TCA9548A Adresa kodera

Zatim moramo odabrati port na koji želimo komunicirati i poslati podatke na njemu pomoću ove funkcije:

void tcaselect (uint8_t i) {

if (i> 7) return;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Zatim ćemo pokrenuti prikaz u odjeljku za postavljanje pozivom "u8g.begin ();" za svaki zaslon priključen na MUX "tcaselect (i);"

Nakon inicijalizacije tada možemo učiniti sve što želimo samo pozivanjem funkcije "tcaselect (i);" gdje je "i" vrijednost multipleksirane sabirnice, a zatim se prema tome šalju podaci i sat.

Korak 13: Prednosti i nedostaci

Prednosti i nedostatci
Prednosti i nedostatci

Slika OLED -a je lijepa. Međutim, OLED -ovi također imaju

nedostatke. Budući da OLED ekrani sadrže organske materijale, njihov je vijek kraći od LCD zaslona. Osim toga, mnogi OLED zasloni postaju urezani nakon što su dugo prikazivali istu sliku. Nakon urezivanja, slika ostaje na ekranu čak i nakon prikazivanja druge slike. Stoga pazite da osvježavate zaslon svakih nekoliko sekundi. Voda može trenutno oštetiti organske materijale ovih zaslona.

Prednosti

Nema potrebe za pozadinskim osvjetljenjem

Zasloni su vrlo tanki i lagani

Mala potrošnja energije

Kutovi gledanja širi su od LCD zaslona

Svjetlina i kontrast su odlični

Velike brzine i kratko vrijeme odziva

Duboka crna boja

Nedostaci

Skupa tehnologija

Kratak životni ciklus

OLED-ovi imaju veću vjerojatnost izgaranja

Oštećenja od vode

Korak 14: Uobičajene pogreške

Uobičajene greške
Uobičajene greške

Za kraj vodiča razgovarajmo o nekoliko uobičajenih pogrešaka

ljudi čine dok koriste ove zaslone:

- Uvijek triput provjerite pinove prije nego ih upotrijebite u svom projektu

- Pokupite pravu adresu knjižnice u datoteci zaglavlja i svom kodu

#define SSD1306_I2C_ADDRESS 0x3C // u Adafruit_SSD1306.h

i

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // u vašem kodu

Ako je adresa pogrešna, OLED neće prikazati ništa

- Veličina zaslona mora se promijeniti u upravljačkom programu da bi se mogla koristiti. Ako se ne promijeni, dobit ćete poruku o pogrešci pri pokušaju provjere koda

#error ("Visina nije točna, ispravite Adafruit_SSD1306.h!");

- Ako koristite NodeMCU, svakako zamijenite OLED_RESET sa 4 na LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Imam scene ljudi koji rade razne stvari pomoću ovog OLED zaslona. Neki su čak napravili i video igre i sve. Stvarno nisam zainteresiran za pravljenje video igre pomoću ovog malenog zaslona. Međutim, sada ću vas ostaviti da istražite svoju maštu i izađete s nevjerojatnim idejama.

Korak 15: Veze

- Blog:

- Dodaj sliku:

- Prilagođeni tekst:

- Adapruit biblioteka za prikaz:

-Adafruit GFX biblioteka:

- biblioteka u8glib: https://code.google.com/archive/p/u8glib/ ili

Ako želite koristiti manji zaslon, upotrijebite zadani 128_32 inače za veći prikaz komentirajte 128_32 i uklonite komentar 128_64 NO_ACK u vašem kodu (samo uklonite komentar s vrste ekrana koji koristite) (fontovi su u biblioteci fontova)

Preporučeni: