INHOUDSOPGAWE:

OLED I2C Display Arduino/NodeMCU Tutoriaal: 15 stappe
OLED I2C Display Arduino/NodeMCU Tutoriaal: 15 stappe

Video: OLED I2C Display Arduino/NodeMCU Tutoriaal: 15 stappe

Video: OLED I2C Display Arduino/NodeMCU Tutoriaal: 15 stappe
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Julie
Anonim
Image
Image

Die heel eerste program wat u skryf as u begin leer a

nuwe programmeertaal is: "Hallo wêreld!".

Die program self doen niks anders as om 'n "Hello World" -teks op die skerm af te druk nie.

Dus, hoe kan ons ons Arduino die 'Hello World!' Vertoon?

In hierdie video sal ek u wys hoe u kan begin met die klein 0.91 (128x32) en 0.96 (128x64) I2C OLED -skerms.

Daar is honderde tutoriale op die internet wat dieselfde op verskillende maniere verduidelik, maar ek kon nie een vind wat my alles vertel oor die OLED -skerm en hoe ek dit in verskillende scenario's kan gebruik nie. Dit het my tyd geneem om alles uit te werk. Ek het dus gedink ek moet 'n handleiding opstel oor wat ek geleer het en al die funksies en maniere waarop die OLED -skerms in ons projekte gebruik kan word, kombineer.

Stap 1: Dinge wat ons vandag gaan leer

Hardewarevereiste
Hardewarevereiste

In hierdie video sal ons praat oor:

- Wat is 'n OLED -skerm?

- Dan sal ons die 0.91 (128x32) en 0.96 (128x64) I2C OLED -skerms van nader bekyk

- Vervolgens praat ons oor die installering van die Adafruit -biblioteek op u Arduino IDE

- Dan koppel ons NodeMCU en Arduino aan 'n OLED -skerm

- Vervolgens kyk ons na die kode en gee 'n paar grafika en teks daarop

- Ons sal ook praat oor die toepassing van aangepaste lettertipes en die vertoon van beelde

- Dan sal ons verskeie OLED's aan 'n mikrobeheerder koppel met behulp van I2C Multiplexer

- Laastens sal ons praat oor 'n paar algemene foute wat mense maak tydens die gebruik van die OLED -skerms

Stap 2: Vereiste hardeware

Vir hierdie tutoriaal benodig ons:

- 'n Broodbord

- 'n 0.91 "(128x32) en 0.96" (128x64) I2C OLED -skerms

- Arduino UNO/NANO (alles wat handig is)

- NodeMCU

- TCA9548A I2C multiplexer

- Paar aansluitkabels

- en 'n USB -kabel om die kode op te laai

Stap 3: Wat is 'n OLED -skerm?

Wat is 'n OLED -skerm?
Wat is 'n OLED -skerm?
Wat is 'n OLED -skerm?
Wat is 'n OLED -skerm?

OLED of organiese liguitstralende diode is 'n liguitstralende

diode (LED) waarin die emissierende elektroluminescerende laag 'n film is van organiese verbinding (miljoene klein LED -ligte) wat lig uitstraal as reaksie op 'n elektriese stroom.

OLED's word gebruik om digitale skerms op toestelle soos televisieskerms, rekenaarmonitors, draagbare stelsels soos selfone, handkonsole en PDA's te skep. 'N OLED -skerm werk sonder agtergrond omdat dit sigbare lig uitstraal.

Stap 4:

Beeld
Beeld

Daar is baie soorte OLED -skerms beskikbaar in die

mark gebaseer op hul

- Groottes

- Kleur

- handelsmerke

- Protokol

- SPI (Serial Peripheral Interface) of I2C

-Passiewe matriks (PMOLED) of aktiewe matriks (AMOLED) beheerskema

In hierdie tutoriaal gaan ek praat oor die koppeling van

blou kleur 0,91 (128x32 OLED) en 0,96 (128x64 OLED) I2C OLDE vertoon na 'n Arduino NANO en NodeMCU. I2C -bustegnologie gebruik slegs 2 penne van die MCU, sodat ons hope beskikbaar het vir ander sensors.

Stap 5: Kyk nader

Nader kyk
Nader kyk
Nader kyk
Nader kyk
Nader kyk
Nader kyk

Kom ons kyk na hierdie twee uitstallings.

Aan die agterkant van hierdie skerms is daar hope SMD-kapasitors en resistors aan boord gesoldeer; maar omdat dit 'n I2C -toestel is, gee ons net om vir hierdie 2 penne (SCL en SDA)

Die skerm kan slegs met Arduino gekoppel word met slegs vier drade - twee vir krag (VCC en GND) en twee vir data (seriële klok SCL en

seriële data SDA), wat die bedrading baie eenvoudig maak. Die dataverbinding is I2C (I²C, IIC of Inter-Integrated Circuit) en hierdie koppelvlak word ook TWI (Two Wire Interface) genoem.

- Die penne aan boord kan in verskillende volgorde wees, dus kyk altyd drie keer voordat u dit aan u projek koppel.

- Bedryfspanning is tussen 3v en 5v, maar dit is die beste om die leiding van die vervaardiger se datablad te gebruik.

- Soms moet ons 2 skerms in ons projekte gebruik. Dus, hoe kan ons dit bereik?

Die truuk is om 'n instelbare adres op u skerm te hê. Hierdie eenheid het 'n instelbare adres tussen 0x78 en 0x7A. Deur die 0Ohm -weerstand van die een kant af te soldeer en aan die ander kant te sit, of deur 'n globale soldeer te plaas, kan ons die adres verander. Ons sal in diepte daaroor praat as ons in die latere afdeling van hierdie tutoriaal verskeie skerms aan 'n Arduino koppel.

In die prentjie lyk hierdie skerms baie groot. Maar prakties gesproke is hulle klein. Hulle bestaan uit 128 x 32/64 individuele OLED-pixels en benodig geen agterlig nie. Kyk net hierna en kyk hoe klein dit is. Alhoewel dit klein is, kan dit baie nuttig wees in elektroniese projekte.

Stap 6: Biblioteek

Biblioteek
Biblioteek
Biblioteek
Biblioteek
Biblioteek
Biblioteek

Daar is verskeie biblioteke beskikbaar om dit te beheer

vertoon. In die verlede het ek die 'u8glib -biblioteek' gebruik, maar ek vind die AdaFruit -biblioteek baie maklik om te verstaan en te gebruik in ons projekte. Dus, ek gaan die AdaFruit -biblioteek in hierdie tutoriaal gebruik.

Om die OLED -skerm te beheer, benodig u die "adafruit_GFX.h" -biblioteek en die "adafruit_SSD1306.h" -biblioteek.

Daar is twee maniere waarop u die biblioteek kan aflaai en installeer op u Arduino IDE.

Metode 1

Gaan na die "Biblioteekbestuurder" en soek "adafruit_SSD1306" en "adafruit_gfx"

Kies die nuutste weergawe en druk die installeringsknoppie.

Sodra dit geïnstalleer is, kan u hierdie biblioteke in u program gebruik.

Metode 2

Hierdie twee biblioteke kan ook afgelaai word vanaf github (u benodig albei):

Ek sal die skakels in die beskrywing hieronder verskaf.

Die vertoonbiblioteek:

Die GFX-biblioteek:

Sodra dit afgelaai is, kopieer die Adafruit_SSD1306-hoofmap van die afgelaaide zip-lêer na die gids Arduino biblioteke. Hierdie gids word gewoonlik gevind in Dokumente> Arduino> biblioteke op Windows -stelsels. Op Linux word dit gewoonlik gevind by die tuismap> Arduino> biblioteke. Uiteindelik in die Arduino-biblioteekmap, hernoem u die Adafruit_SSD1306-hoofmap na Adafruit_SSD1306. Selfs as u nie die naam hernoem nie, is dit goed.

Stap 7:

Beeld
Beeld

Kom ons kyk nou na die "Adafruit_SSD1306.h"

lêer

Twee dinge wat ons in hierdie biblioteek moet weet:

1. As u die kleiner skerm wil gebruik, gebruik dan die standaard 128_32, anders lewer die 128_32 kommentaar op die groter skerm en lewer die 128_64 op

2. As u die 0x7A -adres op die bord gesoldeer het (waaroor ons later sal praat), gebruik dan die 7 -bits 0x3D -adres vir die groter skerms, anders gebruik u die standaard 0x3C -adres. Vir die kleiner skerms is die adres 0x3C.

Stap 8: Bedrading van 128 X 64/32 OLED's

Bedrading 128 X 64/32 OLED's
Bedrading 128 X 64/32 OLED's

Laat ons begin deur die NodeMCU aan die skerm te koppel.

Die eerste en belangrikste ding om op te let, is dat die GND- en VCC -kragpenne op sommige skerms omgeruil kan word. Kontroleer u skerm om seker te maak dat dit dieselfde is as die prent. As die penne omgeruil word, moet u die verbindings met die Arduino of NodeMCU verander.

- NodeMCU OLED -bedrading

OLED VCC - NodeMCU 3.3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- Arduino Uno OLED -bedrading

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

- Arduino MEGA 2560 OLED -bedrading

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino MEGA 2560 pen 21

OLED SDA - Arduino MEGA 2560 pen 20

Stap 9: Kode

Kode
Kode
Kode
Kode
Kode
Kode
Kode
Kode

Adafruit -biblioteek bied baie goeie voorbeelde vir albei

128x32 en 128x64 skerms.

Die biblioteek is onder lêer> Voorbeelde> Adafruit SSD1306> en dan die tipe skerm in die Arduino IDE.

Ons gaan die 128x32 I2C -voorbeeld gebruik en dit aanpas om te werk met beide 128x64 en 128x32 skermvuis deur dit aan te sluit op 'n Arduino en dan op 'n NodeMCU -bord.

Die kode begin deur albei die Adafruit -biblioteke in te sluit. In hierdie tutoriaal beklemtoon ek slegs die dele van die kode wat ons op beide borde en skerms moet laai. As u meer oor die kode wil weet, lewer 'n opmerking op my blog of in die kommentaarafdeling hieronder, en ek probeer om terug te kom.

- Eerstens gaan ons die kode laai na 'n Arduino Nano wat gekoppel is aan 'n 128x32 -skerm.

Ons kan die kode gebruik soos dit is sonder enige wysigings.

128x32 gebruik 'n 0x3C -adres, so hierdie bietjie lyk goed hier, laat ons die kopbiblioteek dubbel kyk, ja, dit gebruik ook die 0x3C -adres en die tipe skerm is 128x32.

- Laat ons nou die 128x64 -skerm aansluit. Soos ons weet, gebruik dit standaard die 0x3C -adres, sodat ons nie die adres in die kode of die biblioteek hoef op te dateer nie.

Ons hoef net die 128_32 kommentaar te lewer en die 128_64 in die kopbiblioteek uit te lewer en die LCDHEIGHT na 64 in ons kode te verander.

- Om dieselfde kode op 'n NodeMCU uit te voer, moet ons nog 'n reël in ons kode verander.

Die resep "#define OLED_RESET 4"> "#define OLED_RESET LED_BUILTIN" is dieselfde as Arduino

Om alles te wys wat ons eers nodig het om die vorige skerm skoon te maak

display.clearDisplay (); // Maak die buffer skoon

Teken dan die voorwerp

testdrawline (); // Trek 'n lyn

Wys dit op die hardeware

vertoon.display (); // Maak hulle sigbaar op die hardeware van die skerm!

Wag 'n rukkie voordat die volgende item vertoon word.

vertraging (2000); // Wag 2 sekondes

In hierdie voorbeeld vertoon ons min items, soos teks, lyne, sirkels, rolteks, driehoeke en meer. Gebruik u verbeelding en vertoon wat u wil op hierdie klein skerms.

Stap 10: Pas teks aan en voeg prente by

Pas teks aan en voeg prente by
Pas teks aan en voeg prente by
Pas teks aan en voeg prente by
Pas teks aan en voeg prente by
Pas teks aan en voeg prente by
Pas teks aan en voeg prente by

Soms moet u kode persoonlike lettertipes en

beelde. As u baie goed met bit -kartering is, hoef u net 'n byte -skikking te skep deur die klein LED's van die skerm aan of uit te skakel om persoonlike lettertipes en beelde te skep.

Ek is egter nie baie goed om hierdie kartering te doen nie en wil nie ure daaraan spandeer om die bitkaart -tabelle te skep nie.

So, wat is my opsies? Ek gebruik gewoonlik twee webwerwe om persoonlike lettertipes en beelde te genereer. Die skakels word in die onderstaande beskrywing verskaf.

Pasgemaakte lettertipes

Gaan na die font converter webwerf, kies die lettertipe familie, styl, grootte, biblioteekweergawe as 'Adafruit GFX Font' en klik dan op die 'Create' knoppie. Aan die regterkant van hierdie bladsy kan u sien hoe u lettertipe op die werklike skerm sal lyk.

Op grond van u keuse, genereer die webblad die lettertipe -koplêer. Skep 'n lêer met die naam "modified_font.h" in dieselfde gids waar u kode is, en kopieer en stoor die gegenereerde kode daarin. Dan hoef u net die koplêer in u kode op te neem om die pasgemaakte lettertipe te gebruik.

#sluit "aangepaste_ontwerp.h" in

Dan hoef u net die lettertipe in te stel voordat u die teks vertoon om die pasgemaakte lettertipe daarop toe te pas.

display.setFont (& Your_Fonts_Name);

U kan die naam van die lettertipe kry uit die koplêer wat u pas by u projek gevoeg het. Dit is dit, maklik.

Geheue is altyd 'n bron van kommer wanneer u persoonlike lettertipes gebruik, dus let altyd op die grepe wat deur die geheue verbruik sal word. Onthou net dat Arduino UNO slegs 32K geheue het.

Pasgemaakte beelde

Om 'n bitmap -beeld op u skerm te vertoon, moet u eers 'n beeld van 128 x 64/32 skep.

Ek gebruik die goeie ou "MS Paint" om 'n 128 x 64 bitmap -prent te skep wat ek dan na hierdie image converter -webwerf sal oplaai. Die webwerf omskep beelde in byte-snare, wat saam met Arduino- en OLED-skerms gebruik kan word.

Begin met die oplaai van die prentjie na die webwerf. Merk dan die kassie "Omskep beeldkleure" en verander die "Uitvoerkode-formaat" na "Arduino-kode", kies dan die rigting en druk op die knoppie "Genereer kode" om die byte-skikking te genereer. Die gedeelte "Voorskou" wys hoe u beeld op die werklike skerm sal lyk.

Ek het die kode saam met hierdie handleiding ingesluit wat u kan gebruik om u beelde te vertoon. U hoef net die skikking in my kode te vervang met die een wat u so pas gegenereer het en dit dan na u Arduino te laai.

Stap 11: Koppel 2 skerms

Koppel 2 skerms
Koppel 2 skerms
Koppel 2 skerms
Koppel 2 skerms

Dit is maklik om twee 128 x 64 skerms aan u projek te koppel.

U hoef net die 0Ohm -weerstand van 0x78 -adres af te soldeer en dit op 0x7A te plaas en dan die 0x3D -adres in u kode te gebruik in plaas van die standaard 0x3C.

U wonder seker waarom ons die 0x3C- en 0x3D -adres gebruik, en nie die werklike 0x78 en 0x7A nie. Arduino aanvaar 7-bis adres en nie die 8-bis hardeware adresse nie. Dus, ons moet eers die 8-bis-adres in binêre omskakel, en dan die minste belangrike bietjie afsny om die 7 bisse te kry. Skakel dan die 7 bisse om na HEX om die 0x3C- of 0x3D -adresse te kry wat u in u kode invoer.

Initialiseer eers die skerm deur 'n unieke naam te gee:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Gebruik dan die skerm 1 en vertoning 2 in u kode om die beginstate met die toesteladresse daarin te noem:

vertoon 1. begin (SSD1306_SWITCHCAPVCC, 0x3C); // vertoon 1 op -adres 0x3C

vertoon 2. begin (SSD1306_SWITCHCAPVCC, 0x3D); // vertoon 2 op -adres 0x3D

Dit is alles, u kan nou doen wat u wil met Display 1 of Display 2 in die res van u kode. Ek het 'n voorbeeld gegee met hierdie tutoriaal.

Bedrading is presies dieselfde as wat ons voorheen gedoen het. U moet amper nog 'n skerm by dieselfde I2C -penne van die Arduino of NodeMCU voeg. Op grond van die adresse stuur die MCU dan die data op die I2C -datalyn.

Stap 12: Koppel meer as 2 skerms

Koppel meer as 2 skerms
Koppel meer as 2 skerms
Koppel meer as 2 skerms
Koppel meer as 2 skerms
Koppel meer as 2 skerms
Koppel meer as 2 skerms

En wat as u meer as 2 skerms wil aansluit?

Arduino het 'n beperkte aantal penne, en daarom kan u nie meer as 'n sekere hoeveelheid skilde daaraan heg nie. Boonop het dit slegs een paar I2C -busse.

Dus, hoe kan ons meer as 2 I2C -skerms aan 'n Arduino heg? Die truuk is om 'n TCA9548 Multiplexer te gebruik.

Met TCA9548 kan 'n enkele mikrobeheerder met tot '64 sensors 'kommunikeer met almal met dieselfde of verskillende I2C-adres deur 'n unieke kanaal aan elke sensorslaaf-subbus toe te ken.

As ons praat oor die stuur van data oor 2 drade na verskeie toestelle, benodig ons 'n manier om dit aan te spreek. Dit is dieselfde as die posman wat op 'n enkele pad kom en die pospakkies na verskillende huise afgee omdat daar verskillende adresse op is.

Die Multiplexer maak verbinding met 3V3, GND, SDA en SCL lyne van die mikro-kontroleerder. Die slawesensors is gekoppel aan een van die agt SCL/SDA -slawe -poorte op die bord. Die kanale word gekies deur die TCA9548A sy I2C -adres (0x70 {default} - 0x77) te stuur, gevolg deur die kanaalnommer (0b00000001 - 0b10000000). U kan by die maksimum 8 van hierdie multiplexers op 0x70-0x77-adresse saam verbind om 64 van dieselfde I2C-aangepaste dele te beheer. Deur die drie adresstukkies A0, A1 en A2 aan VIN te koppel, kan u 'n ander kombinasie van die adresse kry. Ek sal dit in diepte verduidelik in my volgende tutoriaal oor TCA9548A-uitbreekbord. Laat ons vir eers 8 OLED's aan hierdie bord aansluit en die kode vinnig kyk.

Verbinding:

VIN tot 5V (of 3.3V)

GND tot op die grond

SCL tot I2C klok

SDA tot I2C data

Draai dan die sensors na VIN, GND en gebruik een van die SCn / SDn -multiplexbusse

Nou kan Int die kode begin deur die "Wire" -biblioteek in te sluit en deur die multiplexers -adres te definieer.

#sluit "Wire.h" in

#insluit

#define MUX_Address 0x70 // TCA9548A Encoders address

Dan moet ons die poort kies met wie ons wil kommunikeer en die data daarop stuur met behulp van hierdie funksie:

nietig tcaselect (uint8_t i) {

as (i> 7) terugkeer;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Vervolgens sal ons die vertoning in die opstelafdeling inisialiseer deur 'u8g.begin ();' vir elke skerm wat aan die MUX "tcaselect (i);"

As ons eers geïnitialiseer is, kan ons dan doen wat ons wil deur die funksie "tcaselect (i);" waar "i" die waarde van die veelvoudige bus is, en dan die data en die klok daarvolgens stuur.

Stap 13: Voordele en nadele

Voordele en nadele
Voordele en nadele

Die beeld van 'n OLED is pragtig. OLED's het egter ook

nadele. Omdat OLED -skerms organiese materiaal bevat, is hul lewensduur korter as LCD -skerms. Boonop word baie OLED-skerms ingebrand nadat dieselfde beeld lankal vertoon is. Na 'n inbrand bly die prent op die skerm, selfs nadat 'n ander beeld vertoon is. Maak dus seker dat u elke paar sekondes die skerm verfris. Water kan die organiese materiaal van hierdie uitstallings onmiddellik beskadig.

Voordele

Geen agtergrond nodig nie

Uitstallings is baie dun en liggewig

Lae kragverbruik

Kykhoeke is wyer as LCD's

Helderheid en kontras is uitstekend

Hoë spoed en lae reaksietyd

Diep swart kleur

Nadele

Duur tegnologie

Kort lewensiklus

OLEDS is meer geneig om in te brand

Waterskade

Stap 14: Algemene foute

Algemene foute
Algemene foute

Om af te sluit, kan ons praat oor 'n paar algemene foute

mense maak terwyl hulle hierdie skerms gebruik:

- Kontroleer altyd die penne drie keer voordat u dit in u projek gebruik

- Tel die regte biblioteekadres op in die koplêer en in u kode

#definieer SSD1306_I2C_ADDRESS 0x3C // in Adafruit_SSD1306.h

en

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // in u kode

As die adres verkeerd is, sal die OLED niks wys nie

- Die skermgrootte moet in die bestuurder verander word voordat dit gebruik kan word. As dit nie verander word nie, kry u 'n foutboodskap wanneer u probeer om die kode te verifieer

#error ("Hoogte verkeerd, herstel Adafruit_SSD1306.h!");

- As u NodeMCU gebruik, moet u die OLED_RESET van 4 na LED_BUILTIN vervang

#defineer OLED_RESET LED_BUILTIN

Ek het toneelmense wat allerhande dinge maak met hierdie OLED -skerm. Sommige het selfs videospeletjies gemaak en al. Ek stel regtig nie daarin belang om 'n videospeletjie te maak met hierdie klein skerm nie. Ek sal u egter nou verlaat om u verbeelding te verken en met wonderlike idees uit te kom.

Stap 15: Skakels

- Blog:

- Voeg prentjie by:

- Pasgemaakte teks:

- Adafruit -uitstallingsbiblioteek:

-Adafruit GFX-biblioteek:

- u8glib -biblioteek: https://code.google.com/archive/p/u8glib/ of

As u die kleiner skerm wil gebruik, gebruik dan die standaard 128_32, anders lewer die 128_32 kommentaar op die groter skerm, en lewer 'n opmerking van die 128X64 NO_ACK in u kode (ontmerk net die tipe skerm wat u gebruik) (lettertipes is in die lettertipe -biblioteek)

Aanbeveel: