Indholdsfortegnelse:

OLED I2C Display Arduino/NodeMCU Tutorial: 15 trin
OLED I2C Display Arduino/NodeMCU Tutorial: 15 trin

Video: OLED I2C Display Arduino/NodeMCU Tutorial: 15 trin

Video: OLED I2C Display Arduino/NodeMCU Tutorial: 15 trin
Video: Tutorial on I2C OLED Display with Arduino/NodeMCU 2024, Juni
Anonim
Image
Image

Det allerførste program, du skriver, når du begynder at lære a

nyt programmeringssprog er: "Hej verden!".

Selve programmet gør ikke andet end at udskrive en "Hello World" tekst på skærmen.

Så hvordan får vi vores Arduino til at vise "Hej verden!"?

I denne video viser jeg dig, hvordan du kommer i gang med de små 0,91 (128x32) og 0,96 (128x64) I2C OLED -skærme.

Der er 100'er af selvstudier på nettet, der forklarer det samme på forskellige måder, men jeg kunne ikke finde en, der fortæller mig alt om OLED -displayet, og hvordan man bruger det i forskellige scenarier. Det tog mig noget tid at finde ud af det hele. Så jeg tænkte, at jeg skulle oprette en tutorial om, hvad jeg har lært og kombinere alle de funktioner og måder, OLED -skærmene kan bruges i vores projekter.

Trin 1: Ting, vi skal lære i dag

Krav til hardware
Krav til hardware

I denne video vil vi tale om:

- Hvad er et OLED -display?

- Så vil vi se nærmere på de 0,91 (128x32) og 0,96 (128x64) I2C OLED -skærme

- Dernæst vil vi tale om installation af Adafruit -biblioteket til din Arduino IDE

- Derefter forbinder vi NodeMCU og Arduino til et OLED -display

- Dernæst får vi et kig på koden og viser lidt grafik og tekst på den

- Vi vil også tale om at anvende brugerdefinerede skrifttyper og vise billeder

- Så vil vi forbinde flere OLED'er til en mikrokontroller ved hjælp af I2C Multiplexer

- Endelig vil vi tale om få almindelige fejl, som folk begår, mens de bruger OLED -skærme

Trin 2: Krav til hardware

Til denne vejledning har vi brug for:

- Et brødbræt

- En 0,91 "(128x32) og 0,96" (128x64) I2C OLED -skærme

- Arduino UNO/NANO (hvad som helst er praktisk)

- NodeMCU

- TCA9548A I2C multiplexer

- Få tilslutningskabler

- og et USB -kabel til upload af koden

Trin 3: Hvad er en OLED -skærm?

Hvad er en OLED -skærm?
Hvad er en OLED -skærm?
Hvad er en OLED -skærm?
Hvad er en OLED -skærm?

OLED eller organisk lysemitterende diode er en lysemitterende

diode (LED), hvor det emitterende elektroluminescerende lag er en film af organisk forbindelse (millioner af små LED -lys), der udsender lys som reaktion på en elektrisk strøm.

OLED'er bruges til at oprette digitale skærme i enheder såsom fjernsynsskærme, computerskærme, bærbare systemer såsom mobiltelefoner, håndholdte spillekonsoller og PDA'er. Et OLED -display fungerer uden baggrundsbelysning, fordi det udsender synligt lys.

Trin 4:

Billede
Billede

Der findes mange typer OLED -skærme i

marked baseret på deres

- Størrelser

- Farve

- Mærker

- Protokol

- SPI (Serial Peripheral Interface) eller I2C

-Passiv-matrix (PMOLED) eller aktiv-matrix (AMOLED) kontrolordning

I denne vejledning vil jeg tale om at forbinde

blå farve 0,91 (128x32 OLED) og 0,96 (128x64 OLED) I2C OLDE -skærme til en Arduino NANO og NodeMCU. I2C busteknologi bruger kun 2 ben af MCU'en, så vi har masser til rådighed for andre sensorer.

Trin 5: Nærmere kig

Se nærmere
Se nærmere
Se nærmere
Se nærmere
Se nærmere
Se nærmere

Lad os komme tættere på disse to skærme.

På bagsiden af disse displays er der masser af SMD-kondensatorer og modstande loddet om bord; men da det er en I2C -enhed, bekymrer vi os kun om disse 2 ben (SCL og SDA)

Skærmen kan tilsluttes Arduino ved hjælp af kun fire ledninger - to til strøm (VCC og GND) og to til data (serielt ur SCL og

serielle data SDA), hvilket gør ledningerne meget enkle. Dataforbindelsen er I2C (I²C, IIC eller Inter-Integrated Circuit), og denne grænseflade kaldes også TWI (Two Wire Interface).

- De indbyggede stifter kan være i forskellig rækkefølge, så tjek altid tre gange, før du tilslutter det til dit projekt.

- Driftsspænding er mellem 3v og 5v, men det er bedst at bruge vejledningen fra producentens datablad.

- Nogle gange skal vi bruge 2 displays i vores projekter. Så hvordan kan vi opnå dette?

Tricket er at have en konfigurerbar adresse på din skærm. Denne enhed har en konfigurerbar adresse mellem 0x78 og 0x7A. Bare ved at lodde 0Ohm -modstanden fra den ene side og tilslutte den til den anden side eller bare ved at sætte en global lodning, kan vi ændre adressen. Vi vil tale dybt om det, når vi tilslutter flere skærme til en Arduino i det senere afsnit af denne vejledning.

På billedet ser disse displays meget store ud. Men praktisk talt er de små. De er lavet af 128 x 32/64 individuelle OLED-pixels og kræver ikke noget baggrundslys. Bare se på dette og se, hvor lille det er. Selvom de er små, kan de være meget nyttige i alle elektroniske projekter.

Trin 6: Bibliotek

Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek

Der er flere biblioteker til rådighed til at kontrollere disse

viser. Tidligere har jeg brugt "u8glib -biblioteket", men jeg finder AdaFruit -biblioteket meget let at forstå og bruge i vores projekter. Så jeg vil bruge AdaFruit -biblioteket i denne vejledning.

For at styre OLED -skærmen skal du bruge "adafruit_GFX.h" -biblioteket og "adafruit_SSD1306.h" -biblioteket.

Der er to måder, du kan downloade og installere biblioteket på din Arduino IDE.

Metode 1

Gå til "Bibliotekschef" og søg efter "adafruit_SSD1306" og "adafruit_gfx"

Vælg den nyeste version, og tryk på knappen Installer.

Når de er installeret, kan du bruge disse biblioteker i dit program.

Metode 2

Disse to biblioteker kan også downloades fra github (du har brug for begge):

Jeg giver links i beskrivelsen herunder.

Displaybiblioteket:

GFX-biblioteket:

Når den er downloadet, skal du kopiere Adafruit_SSD1306-master-mappen fra den downloadede zip-fil til mappen Arduino biblioteker. Denne mappe findes normalt på Dokumenter> Arduino> biblioteker på Windows -systemer. På Linux findes det normalt i hjemmemappen> Arduino> biblioteker. Endelig i Arduino biblioteksmappe, omdøb Adafruit_SSD1306-master-mappen til Adafruit_SSD1306. Selvom du ikke omdøber det, er det fint.

Trin 7:

Billede
Billede

Lad os nu se på "Adafruit_SSD1306.h"

fil

To ting, vi skal vide i dette bibliotek:

1. Hvis du vil bruge den mindre skærm, skal du bruge standard 128_32 ellers for den større skærmkommentar 128_32 og fjerne kommentaren fra 128_64

2. Hvis du har loddet 0x7A -adressen på tavlen (som vi vil tale om senere), skal du bruge 7 -bit 0x3D -adressen til de større skærme, ellers skal du bruge standard 0x3C -adressen. For de mindre skærme er adressen 0x3C.

Trin 8: Tilslutning af 128 X 64/32 OLED'er

Ledningsføring 128 x 64/32 OLED'er
Ledningsføring 128 x 64/32 OLED'er

Lad os starte med at forbinde NodeMCU til displayet.

Den første og vigtigste ting at bemærke er, at nogle af skærmene kan have GND- og VCC -strømstifterne byttet rundt. Kontroller dit display for at sikre, at det er det samme som billedet. Hvis benene er byttet, skal du sørge for at ændre forbindelserne til Arduino eller NodeMCU.

- NodeMCU OLED ledninger

OLED VCC - NodeMCU 3.3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- Arduino Uno OLED ledninger

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino Uno A5

OLED SDA - Arduino Uno A4

- Arduino MEGA 2560 OLED ledninger

OLED VCC - Arduino 5V

OLED GND - Arduino GND

OLED SCL - Arduino MEGA 2560 pin 21

OLED SDA - Arduino MEGA 2560 pin 20

Trin 9: Kode

Kode
Kode
Kode
Kode
Kode
Kode
Kode
Kode

Adafruit bibliotek kommer med rigtig gode eksempler til begge

128x32 og 128x64 skærme.

Biblioteket er placeret under Filer> Eksempler> Adafruit SSD1306> og derefter visningstypen i Arduino IDE.

Vi kommer til at bruge 128x32 I2C -eksemplet og vil ændre det til at fungere med både 128x64 og 128x32 displays knytnæve ved at tilslutte det til en Arduino og derefter til et NodeMCU -kort.

Koden starter med at inkludere begge Adafruit -bibliotekerne. I denne vejledning vil jeg kun understrege de dele af koden, som er nødvendige for, at vi kan indlæse både tavler og displays. Hvis du vil vide mere om koden, bedes du sende en kommentar til min blog eller i kommentarfeltet herunder, og jeg bestræber mig på at vende tilbage til dig.

- Først skal vi indlæse koden til en Arduino Nano, der er sluttet til en 128x32 skærm.

Vi kan bruge koden som den er uden ændringer.

128x32 bruger 0x3C -adresse, så denne bit ser godt ud her, lader dobbelttjekke overskriftsbiblioteket, ja den bruger også 0x3C -adressen, og displaytypen er 128x32.

- Lad os nu forbinde 128x64 skærmen. Som vi ved, bruger den 0x3C -adressen som standard, så vi behøver ikke at opdatere adressen i hverken koden eller biblioteket.

Vi mangler bare, at vi skal kommentere 128_32 og fjerne kommentaren til 128_64 i header -biblioteket og ændre LCDHEIGHT til 64 i vores kode.

- Nu for at køre den samme kode på en NodeMCU skal vi ændre en linje mere i vores kode.

Resten af koden "#define OLED_RESET 4"> "#define OLED_RESET LED_BUILTIN" er den samme som Arduino

Stort set for at vise alt, hvad vi først har brug for for at rydde den forrige skærm ved hjælp af

display.clearDisplay (); // Ryd bufferen

Tegn derefter objektet

testdrawline (); // Tegn en streg

Vis det på hardwaren

display.display (); // Gør dem synlige på skærmens hardware!

Vent et stykke tid, før det næste element vises.

forsinkelse (2000); // Vent i 2 sekunder

I dette eksempel viser vi få elementer som tekst, linjer, cirkler, rulletekst, trekanter og mere. Brug din fantasi og vis, hvad du vil på disse små skærme.

Trin 10: Tilpasning af tekst og tilføjelse af billeder

Tilpasning af tekst og tilføjelse af billeder
Tilpasning af tekst og tilføjelse af billeder
Tilpasning af tekst og tilføjelse af billeder
Tilpasning af tekst og tilføjelse af billeder
Tilpasning af tekst og tilføjelse af billeder
Tilpasning af tekst og tilføjelse af billeder

Nogle gange skal din kode vise tilpassede skrifttyper og

billeder. Hvis du er meget god til bitkortlægning, skal du bare oprette en byte -arrays ved at tænde eller slukke displayets små lysdioder for at oprette brugerdefinerede skrifttyper og billeder.

Jeg er dog ikke særlig god til at lave disse kortlægninger og vil ikke bruge timer på at lave bitkorttabellerne.

Så hvad er mine muligheder? Jeg bruger generelt to websteder til at generere brugerdefinerede skrifttyper og billeder. Linkene findes i beskrivelsen herunder.

Brugerdefinerede skrifttyper

Gå til fontkonverteringswebstedet, vælg skrifttypefamilien, stil, størrelse, bibliotekversion som "Adafruit GFX Font", og tryk derefter på knappen "Opret". På højre side af denne side kan du se, hvordan din skrifttype kommer til at se ud på det faktiske display.

Baseret på dit valg genererer websiden skrifttypeoverskriftsfilen. Opret en fil kaldet "modified_font.h" i den samme mappe, hvor din kode er, og kopier og gem den genererede kode i den. Så skal du bare inkludere header -filen i din kode for at bruge den brugerdefinerede skrifttype.

#include "modified_font.h"

Derefter skal du bare indstille skrifttypen, før du viser teksten for at anvende den brugerdefinerede skrifttype på den.

display.setFont (& Your_Fonts_Name);

Du kan få navnet på skrifttypen fra den overskriftsfil, du lige har føjet til dit projekt. Det er det, let.

Hukommelse er altid et problem, når du bruger brugerdefinerede skrifttyper, så overvej altid de bytes, der vil blive brugt af hukommelsen. Bare husk, at Arduino UNO kun har 32K hukommelse.

Brugerdefinerede billeder

For at få vist et bitmapbillede på din skærm skal du først oprette et billede på 128 x 64/32.

Jeg bruger den gode gamle "MS Paint" til at oprette et 128 x 64 bitmap -billede, som jeg derefter vil uploade til dette image converter -websted. Webstedet konverterer billeder til byte-strenge, som kan bruges med Arduino og OLED-skærme.

Start med at uploade billedet til webstedet. Sæt derefter en markering i afkrydsningsfeltet "Inverter billedfarver", og ændr "Output-kodeformat" til "Arduino-kode", vælg derefter retningen, og tryk på knappen "Generer kode" for at generere byte-arrayet. Afsnittet "Forhåndsvisning" viser dig, hvordan dit billede vil se ud på det faktiske display.

Jeg har inkluderet koden sammen med denne vejledning, som du kan bruge til at vise dine billeder. Du skal bare udskifte matrixen i min kode med den, du lige har genereret og derefter indlæse den i din Arduino.

Trin 11: Tilslutning af 2 skærme

Tilslutning af 2 skærme
Tilslutning af 2 skærme
Tilslutning af 2 skærme
Tilslutning af 2 skærme

Det er let at forbinde to 128 x 64 skærme til dit projekt.

Du skal bare aflodse 0Ohm -modstanden fra 0x78 -adressen og sætte den på 0x7A og derefter bruge 0x3D -adressen i din kode i stedet for standard 0x3C.

Du må undre dig over, hvorfor vi bruger 0x3C- og 0x3D -adressen og ikke den faktiske 0x78 og 0x7A. Arduino accepterer 7-bit adresse og ikke 8-bit hardware adresser. Så vi skal først konvertere 8-bit adressen til binær og derefter hugge den mindst betydende bit af for at få de 7 bits. Konverter derefter de 7 bits til HEX for at få de 0x3C- eller 0x3D -adresser, som du indtaster i din kode.

Initialiser først displayet ved at give det et unikt navn:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Brug derefter displayet 1 og display 2 i din kode til at kalde start -sætningerne med enhedsadresserne i dem:

display1.begyndt (SSD1306_SWITCHCAPVCC, 0x3C); // vis 1 op -adresse 0x3C

display2.begyndt (SSD1306_SWITCHCAPVCC, 0x3D); // vis 2 op -adresse 0x3D

Det er det, du kan nu gå videre og gøre hvad du vil ved hjælp af enten Display 1 eller Display 2 i resten af din kode. Jeg har givet et eksempel med denne vejledning.

Ledningsføring er nøjagtig det samme som det, vi har gjort før, stort set skal du bare tilføje et andet display til de samme I2C -ben på enten Arduino eller NodeMCU. Baseret på adresserne sender MCU'en derefter dataene på I2C -datalinjen.

Trin 12: Tilslutning af mere end 2 skærme

Tilslutning af mere end 2 skærme
Tilslutning af mere end 2 skærme
Tilslutning af mere end 2 skærme
Tilslutning af mere end 2 skærme
Tilslutning af mere end 2 skærme
Tilslutning af mere end 2 skærme

Hvad nu hvis du vil tilslutte mere end 2 skærme?

Arduino har et begrænset antal stifter, og derfor kan du ikke have mere end en vis mængde skjolde knyttet til den. Desuden har den kun et par I2C -busser.

Så hvordan kan vi vedhæfte mere end 2 I2C -skærme til en Arduino? Tricket er at bruge en TCA9548 Multiplexer.

TCA9548 tillader en enkelt mikro-controller at kommunikere med op til '64 sensorer 'alle med den samme eller forskellige I2C-adresse ved at tildele en unik kanal til hver sensorslave-subbus.

Når vi taler om at sende data over 2 ledninger til flere enheder, har vi brug for en måde at adressere dem på. Det er det samme som at postbudet kommer på en enkelt vej og smider postpakkerne til forskellige huse, fordi de har forskellige adresser skrevet på dem.

Multiplexeren tilsluttes 3V3, GND, SDA og SCL linjer på mikrokontrolleren. Slave sensorer er forbundet til en af otte SCL/SDA slave porte på kortet. Kanalerne vælges ved at sende TCA9548A dens I2C -adresse (0x70 {default} - 0x77) efterfulgt af kanalnummeret (0b00000001 - 0b10000000). Du kunne maksimalt have 8 af disse multiplexere forbundet til 0x70-0x77 adresser for at styre 64 af de samme I2C adresserede dele. Ved at forbinde de tre adressebit A0, A1 og A2 til VIN kan du få en anden kombination af adresserne. Jeg vil forklare dette i dybden i min næste tutorial om TCA9548A breakout board. Lad os lige nu tilslutte 8 OLED'er til dette bord og få et hurtigt kig på koden.

Forbindelse:

VIN til 5V (eller 3.3V)

GND til jorden

SCL til I2C ur

SDA til I2C data

Tilslut derefter sensorerne til VIN, GND, og brug en af SCn / SDn -multipleksede busser

Nu kan Int -koden starte med at inkludere "Wire" -biblioteket og ved at definere multiplexeradressen.

#inkluder "Wire.h"

#omfatte

#define MUX_Address 0x70 // TCA9548A Encoders address

Derefter skal vi vælge den port, vi vil kommunikere til, og sende dataene på den ved hjælp af denne funktion:

ugyldig tcaselect (uint8_t i) {

hvis (i> 7) vender tilbage;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Dernæst vil vi initialisere displayet i opsætningsafsnittet ved at kalde "u8g.begin ();" for hvert display, der er knyttet til MUX "tcaselect (i);"

Når vi er initialiseret, kan vi derefter gøre hvad vi vil bare ved at kalde funktionen "tcaselect (i);" hvor "i" er værdien af den multipleksede bus og derefter sende data og ur i overensstemmelse hermed.

Trin 13: Fordele og ulemper

Fordele og ulemper
Fordele og ulemper

Billedet af en OLED er smukt. Det har OLED'er imidlertid også

ulemper. Fordi OLED -skærme indeholder organisk materiale, er deres levetid kortere end LCD -skærme. Derudover får mange OLED-skærme indbrændinger efter at have vist det samme billede i lang tid. Efter en indbrænding forbliver billedet på skærmen, selv efter et andet billede er vist. Så sørg for at blive ved med at opdatere skærmen hvert par sekunder. Vand kan øjeblikkeligt beskadige de organiske materialer på disse skærme.

Fordele

Intet behov for baggrundsbelysning

Skærme er meget tynde og lette

Lavt strømforbrug

Betragtningsvinkler er bredere end LCD -skærme

Lysstyrke og kontrast er store

Høj hastighed og har lav responstid

Dyb sort farve

Ulemper

Dyre teknologi

Kort livscyklus

OLEDS er mere tilbøjelige til at brænde ind

Vandskade

Trin 14: Almindelige fejl

Almindelige fejl
Almindelige fejl

For at afslutte øvelsen lader vi tale om få almindelige fejl

folk laver, mens de bruger disse skærme:

- Kontroller altid stifterne tredobbelt, før du bruger dem i dit projekt

- Hent den rigtige biblioteksadresse i overskriftsfilen og i din kode

#define SSD1306_I2C_ADDRESS 0x3C // i Adafruit_SSD1306.h

og

display.begynder (SSD1306_SWITCHCAPVCC, 0x3C); // i din kode

Hvis adressen er forkert, viser OLED ikke noget

- Displaystørrelsen skal ændres i driveren, før den kan bruges. Hvis den ikke ændres, får du en fejlmeddelelse, når du prøver at bekræfte koden

#error ("Forkert højde, ret Adafruit_SSD1306.h!");

- Hvis du bruger NodeMCU, skal du sørge for at udskifte OLED_RESET fra 4 til LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Jeg har scenefolk, der laver alle mulige ting ved hjælp af denne OLED -skærm. Nogle har endda lavet videospil og det hele. Jeg er virkelig ikke interesseret i at lave et videospil ved hjælp af denne lille skærm. Imidlertid vil jeg nu lade dig udforske din fantasi og komme ud med fantastiske ideer.

Trin 15: Links

- Blog:

- Tilføj billede:

- Tilpasset tekst:

- Adafruit display bibliotek:

-Adafruit GFX bibliotek:

- u8glib -bibliotek: https://code.google.com/archive/p/u8glib/ eller

Hvis du vil bruge den mindre skærm, skal du bruge standard 128_32 ellers til den større skærmkommentar 128_32 og fjerne 128X64 NO_ACK i din kode (bare kommenter den type skærm, du bruger) (skrifttyper findes i skrifttypebiblioteket)

Anbefalede: