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, Juli
Anonim
Image
Image

Prvi program koji napišete kada 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.

Pa, kako 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 na različite načine objašnjavaju istu stvar, ali nisam uspio pronaći onu koja bi mi rekla sve o OLED ekranu i kako je koristiti u različitim scenarijima. Trebalo mi je neko vrijeme da sve riješim. Stoga sam mislio da bih trebao stvoriti vodič o onome što sam naučio i kombinirati sve funkcije i načine na koje se OLED ekrani mogu koristiti u našim projektima.

Korak 1: Stvari koje ćemo naučiti danas

Hardverski zahtevi
Hardverski zahtevi

U ovom videu ćemo govoriti o:

- Šta je OLED ekran?

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

- Sljedeće ćemo govoriti o instaliranju Adafruit biblioteke na vaš Arduino IDE

- Zatim ćemo povezati NodeMCU i Arduino na OLED ekran

- 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 mikrokontroler pomoću I2C multipleksera

- Na kraju ćemo govoriti o nekoliko uobičajenih grešaka koje ljudi rade dok koriste OLED zaslone

Korak 2: Zahtjevi hardvera

Za ovaj vodič potrebni su nam:

- Breadboard

- I2C OLED ekrani 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: Šta je OLED ekran?

Šta je OLED ekran?
Šta je OLED ekran?
Šta je OLED ekran?
Šta je OLED ekran?

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 ekrana na uređajima kao što su televizijski ekrani, računarski monitori, prenosivi sistemi poput mobilnih telefona, ručnih konzola za igre i PDA uređaja. OLED ekran radi bez pozadinskog osvjetljenja jer emitira vidljivo svjetlo.

Korak 4:

Image
Image

Postoji mnogo vrsta OLED ekrana dostupnih u

tržište zasnovano na njihovom

- Veličine

- Boja

- Brendovi

- Protokol

- SPI (serijsko periferno sučelje) ili I2C

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

U ovom vodiču ć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 hrpe dostupne za druge senzore.

Korak 5: Bliži pogled

Blizi pogled
Blizi pogled
Blizi pogled
Blizi pogled
Blizi pogled
Blizi pogled

Pogledajmo bliže ova dva ekrana.

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. Veza za prenos podataka je I2C (I²C, IIC ili međuintegrisano kolo), a ovo sučelje se 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 priključite 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 ekrana u našim projektima. Dakle, kako to možemo postići?

Trik je u tome da imate podesivu adresu na ekranu. 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 povežemo više ekrana na Arduino u kasnijem odjeljku ovog vodiča.

Na slici ovi ekrani izgledaju veoma veliki. Ali, praktično govoreći, male su. Izrađene su od 128 x 32/64 pojedinačnih OLED piksela i ne zahtijevaju pozadinsko osvjetljenje. Samo pogledajte ovo i vidite koliko je mali. Iako su male, mogu biti vrlo korisne u bilo kojim elektroničkim projektima.

Korak 6: Biblioteka

Biblioteka
Biblioteka
Biblioteka
Biblioteka
Biblioteka
Biblioteka

Na raspolaganju je nekoliko biblioteka za kontrolu ovih

prikazuje. Ranije sam koristio "u8glib library", ali smatram da je AdaFruit biblioteka vrlo laka za razumijevanje i upotrebu u našim projektima. Stoga ću u ovom vodiču koristiti biblioteku AdaFruit.

Za kontrolu OLED ekrana trebat će vam biblioteka "adafruit_GFX.h" i "adafruit_SSD1306.h".

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

Metoda 1

Idite na "Upravitelj biblioteke" i pretražite "adafruit_SSD1306" i "adafruit_gfx"

Odaberite najnoviju verziju i pritisnite dugme Instaliraj.

Jednom instalirane možete koristiti ove biblioteke u svom programu.

Metoda 2

Ove dvije biblioteke mogu se preuzeti i sa githuba (potrebne su vam obje):

Navest ću veze u donjem opisu.

Biblioteka za prikaz:

Biblioteka GFX:

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

Korak 7:

Image
Image

Pogledajmo sada "Adafruit_SSD1306.h"

file

Dvije stvari koje moramo znati u ovoj biblioteci:

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

2. Ako ste lemili 0x7A adresu na ploči (o čemu ćemo kasnije govoriti), tada koristite 7 -bitnu 0x3D adresu za veće zaslone, inače koristite zadanu 0x3C adresu. Za manje ekrane 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 ekrana mogu zamijeniti kontakte za napajanje GND i VCC. Proverite ekran da biste se uverili 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

Kod
Kod
Kod
Kod
Kod
Kod
Kod
Kod

Biblioteka Adafruit dolazi sa zaista dobrim primjerima za oboje

128x32 i 128x64 ekrani.

Biblioteka se nalazi pod Datoteka> Primjeri> Adafruit SSD1306>, a zatim tip prikaza u Arduino IDE -u.

Koristit ćemo primjer 128x32 I2C i modificirat ćemo ga tako da radi i sa šakama sa prikazima 128x64 i 128x32 tako da ga spojimo na Arduino, a zatim na ploču NodeMCU.

Kôd počinje uključivanjem obje biblioteke Adafruit. U ovom vodiču ću naglasiti samo one dijelove koda koji su nam potrebni za učitavanje i na ploče i na ekrane. 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 je bez ikakvih izmjena.

128x32 koristi adresu 0x3C tako da ovaj bit izgleda dobro, omogućava dvostruku provjeru biblioteke zaglavlja, da, također koristi adresu 0x3C i tip prikaza je 128x32.

- Sada spojimo ekran 128x64. Kao što znamo, ona prema zadanim postavkama koristi adresu 0x3C, pa ne moramo ažurirati adresu ni u kodu ni u biblioteci.

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 red u kodu.

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

Prilično za prikaz svega što nam je prvo potrebno da obrišemo prethodni ekran pomoću

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

Zatim nacrtajte objekt

testdrawline (); // Povuci 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.

kašnjenje (2000); // Sač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 sve što želite na ovim malim ekranima.

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 ekranu 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. Linkovi su dati u donjem opisu.

Prilagođeni fontovi

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

Na temelju vašeg odabira web stranica generira datoteku zaglavlja fontova. Kreirajte 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 svom projektu. To je to, polako.

Memorija je uvijek briga pri korištenju prilagođenih fontova, pa 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 bitmap sliku na ekranu, 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 postaviti na ovu web stranicu za pretvaranje slika. Web stranica pretvara slike u nizove bajtova, koji se mogu koristiti s Arduino i OLED ekranima.

Započnite postavljanjem slike na web lokaciju. 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 ekranu.

Uključio sam kôd zajedno s ovim vodičem 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 na svoj Arduino.

Korak 11: Povezivanje 2 ekrana

Povezivanje 2 ekrana
Povezivanje 2 ekrana
Povezivanje 2 ekrana
Povezivanje 2 ekrana

Povezivanje dva ekrana 128 x 64 sa vašim projektom je jednostavno.

Potrebno je samo da odlepite otpornik 0Ohm sa adrese 0x78 i postavite ga na 0x7A, a zatim koristite adresu 0x3D u svom kodu umesto podrazumevane vrednosti 0x3C.

Sigurno se pitate zašto koristimo adrese 0x3C i 0x3D, a ne stvarne 0x78 i 0x7A. Arduino prihvaća 7-bitne adrese, a ne 8-bitne hardverske adrese. 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 ekran 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); // prikazuje 1 op adresu 0x3C

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

To je to, sada možete nastaviti i raditi sve što ž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 ekran istim I2C pinovima Arduina ili NodeMCU -a. Na osnovu adresa, MCU zatim šalje podatke na liniji podataka I2C.

Korak 12: Povezivanje više od 2 ekrana

Povezivanje više od 2 ekrana
Povezivanje više od 2 ekrana
Povezivanje više od 2 ekrana
Povezivanje više od 2 ekrana
Povezivanje više od 2 ekrana
Povezivanje više od 2 ekrana

Šta ako želite spojiti više od 2 ekrana?

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

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

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

Kada govorimo o slanju podataka putem 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 jednim putem 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. Slave senzori su povezani na jedan od osam SCL/SDA slave 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 I2C adresaranih dijelova. Spajanjem tri bita adrese A0, A1 i A2 na VIN možete dobiti različite kombinacije adresa. Objasnić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.

Veza:

VIN do 5V (ili 3.3V)

GND na masu

SCL na I2C sat

SDA do I2C podaci

Zatim povežite senzore na VIN, GND i upotrijebite jednu od SCn / SDn multipleksnih sabirnica

Sada, Int kod omogućava početak uključivanjem "Wire" biblioteke i definiranjem adrese multipleksera.

#include "Wire.h"

#include

#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 ekran 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 nedostaci
Prednosti i nedostaci

Slika OLED -a je prekrasna. Međutim, OLED -ovi takođe imaju

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

Prednosti

Nema potrebe za pozadinskim osvetljenjem

Zasloni su vrlo tanki i lagani

Mala potrošnja energije

Uglovi vidljivosti su širi od LCD -a

Svjetlina i kontrast su odlični

Velike brzine i kratko vrijeme odziva

Duboko crna boja

Nedostaci

Skupa tehnologija

Kratak životni ciklus

OLED-ovi imaju veću vjerovatnoću izgaranja

Oštećenje vodom

Korak 14: Uobičajene greške

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

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

koje ljudi rade dok koriste ove zaslone:

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

- Pokupite pravu adresu biblioteke 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 ništa prikazati

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

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

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

#define OLED_RESET LED_BUILTIN

Imam scene ljudi koji rade razne stvari koristeći ovaj OLED ekran. Neki su čak napravili i video igre i sve to. Zaista nisam zainteresiran za pravljenje video igre s ovim malim ekranom. 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 prikazivanje:

-Adafruit GFX biblioteka:

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

Ako želite koristiti manji zaslon, upotrijebite zadanu 128_32 u suprotnom 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 se nalaze u biblioteci fontova)

Preporučuje se: