Innholdsfortegnelse:

OLED I2C Display Arduino/NodeMCU Opplæring: 15 trinn
OLED I2C Display Arduino/NodeMCU Opplæring: 15 trinn

Video: OLED I2C Display Arduino/NodeMCU Opplæring: 15 trinn

Video: OLED I2C Display Arduino/NodeMCU Opplæring: 15 trinn
Video: Как измерить постоянное напряжение и ток и построить счетчик энергии с ЖК-дисплеем | Урок 104 2024, Juli
Anonim
Image
Image

Det aller første programmet du skriver når du begynner å lære a

nytt programmeringsspråk er: "Hei verden!".

Selve programmet gjør ikke annet enn å skrive ut en “Hello World” -tekst på skjermen.

Så hvordan får vi Arduino til å vise "Hello World!"?

I denne videoen viser jeg deg hvordan du kommer i gang med de små 0,91 (128x32) og 0,96 (128x64) I2C OLED -skjermene.

Det er 100 -talls opplæringsprogrammer på nettet som forklarer det samme på forskjellige måter, men jeg kunne ikke finne en som forteller meg alt om OLED -skjermen og hvordan du bruker den i forskjellige scenarier. Det tok litt tid å finne ut av alt. Så jeg tenkte at jeg skulle lage en opplæring om det jeg har lært og kombinere alle funksjonene og måtene OLED -skjermene kan brukes i våre prosjekter.

Trinn 1: Ting vi skal lære i dag

Krav til maskinvare
Krav til maskinvare

I denne videoen vil vi snakke om:

- Hva er en OLED -skjerm?

- Så vil vi se nærmere på 0.91 (128x32) og 0.96 (128x64) I2C OLED -skjermer

- Neste vil vi snakke om å installere Adafruit -biblioteket til din Arduino IDE

- Så kobler vi NodeMCU og Arduino til en OLED -skjerm

- Deretter vil vi se på koden og vise litt grafikk og tekst på den

- Vi vil også snakke om å bruke tilpassede fonter og vise bilder

- Da vil vi koble flere OLED-er til en mikrokontroller ved hjelp av I2C Multiplexer

- Til slutt vil vi snakke om få vanlige feil folk gjør når de bruker OLED -skjermene

Trinn 2: Krav til maskinvare

For denne opplæringen trenger vi:

- Et brødbrett

- En 0,91 "(128x32) og 0,96" (128x64) I2C OLED -skjermer

- Arduino UNO/NANO (alt som er praktisk)

- NodeMCU

- TCA9548A I2C multiplexer

- Få tilkoblingskabler

- og en USB -kabel for å laste opp koden

Trinn 3: Hva er en OLED -skjerm?

Hva er en OLED -skjerm?
Hva er en OLED -skjerm?
Hva er en OLED -skjerm?
Hva er en OLED -skjerm?

OLED eller organisk lysemitterende diode er en lysemitterende

diode (LED) der det utsendte elektroluminescerende laget er en film av organisk forbindelse (millioner av små LED -lys) som avgir lys som respons på en elektrisk strøm.

OLED-er brukes til å lage digitale skjermer i enheter som TV-skjermer, dataskjermer, bærbare systemer som mobiltelefoner, håndholdte spillkonsoller og PDAer. En OLED -skjerm fungerer uten bakgrunnsbelysning fordi den avgir synlig lys.

Trinn 4:

Bilde
Bilde

Det er mange typer OLED -skjermer tilgjengelig i

markedet basert på deres

- Størrelser

- Farge

- Merker

- Protokoll

- SPI (Serial Peripheral Interface) eller I2C

-Passiv-matrise (PMOLED) eller aktiv-matrise (AMOLED) kontrollskjema

I denne opplæringen skal jeg snakke om å koble til

blå farge 0,91 (128x32 OLED) og 0,96 (128x64 OLED) I2C OLDE -skjermer til en Arduino NANO og NodeMCU. I2C -bussteknologi bruker bare 2 pinner av MCU, så vi har hauger tilgjengelig for andre sensorer.

Trinn 5: Nærmere titt

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

La oss nærme oss disse to skjermene.

På baksiden av disse skjermene er det masser av SMD-kondensatorer og motstander loddet ombord; men siden det er en I2C -enhet, bryr vi oss bare om disse 2 pinnene (SCL og SDA)

Skjermen kobles til Arduino med bare fire ledninger - to for strøm (VCC og GND) og to for data (seriell klokke SCL og

seriell data SDA), noe som gjør ledningene veldig enkle. Datatilkoblingen er I2C (I²C, IIC eller Inter-Integrated Circuit), og dette grensesnittet kalles også TWI (Two Wire Interface).

- De innebygde pinnene kan være i forskjellig rekkefølge, så sjekk alltid trippel før du kobler den til prosjektet ditt.

- Driftsspenning er mellom 3v og 5v, men det er best å bruke veiledningen fra produsentens datablad.

- Noen ganger må vi bruke 2 skjermer i prosjektene våre. Så, hvordan kan vi oppnå dette?

Trikset er å ha en konfigurerbar adresse på skjermen. Denne enheten har en konfigurerbar adresse mellom 0x78 og 0x7A. Bare ved å lodde 0Ohm -motstanden fra den ene siden og koke den opp på den andre siden eller bare ved å sette en global loddetinn kan vi endre adressen. Vi vil snakke grundig om det når vi kobler flere skjermer til en Arduino i den senere delen av denne opplæringen.

På bildet ser disse skjermene veldig store ut. Men praktisk talt er de små. De er laget av 128 x 32/64 individuelle OLED-piksler og krever ikke noe bakgrunnslys. Bare se på dette og se hvor liten den er. Selv om de er små, kan de være svært nyttige i alle elektroniske prosjekter.

Trinn 6: Bibliotek

Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek
Bibliotek

Det er flere biblioteker tilgjengelig for å kontrollere disse

viser. Tidligere har jeg brukt "u8glib -biblioteket", men jeg synes AdaFruit -biblioteket er veldig lett å forstå og bruke i våre prosjekter. Så jeg skal bruke AdaFruit -biblioteket i denne opplæringen.

For å kontrollere OLED -skjermen trenger du "adafruit_GFX.h" -biblioteket og "adafruit_SSD1306.h" -biblioteket.

Det er to måter du kan laste ned og installere biblioteket på din Arduino IDE.

Metode 1

Gå til "Library manager" og søk etter "adafruit_SSD1306" og "adafruit_gfx"

Velg den nyeste versjonen og trykk på Installer -knappen.

Når de er installert, kan du bruke disse bibliotekene i programmet.

Metode 2

Disse to bibliotekene kan også lastes ned fra github (du trenger begge deler):

Jeg gir lenker i beskrivelsen nedenfor.

Visningsbiblioteket:

GFX-biblioteket:

Når den er lastet ned, kopierer du Adafruit_SSD1306-master-mappen fra den nedlastede zippede filen til mappen Arduino biblioteker. Denne mappen finnes vanligvis på Dokumenter> Arduino> biblioteker på Windows -systemer. På Linux finnes det vanligvis i hjemmemappen> Arduino> biblioteker. Til slutt i Arduino bibliotekmappe, gi Adafruit_SSD1306-master-mappen nytt navn til Adafruit_SSD1306. Selv om du ikke gir nytt navn, er det greit.

Trinn 7:

Bilde
Bilde

La oss ta en titt på "Adafruit_SSD1306.h"

fil

To ting vi trenger å vite i dette biblioteket:

1. Hvis du vil bruke den mindre skjermen, bruk standard 128_32 ellers for den større skjermkommentaren 128_32 og fjern kommentaren av 128_64

2. Hvis du har loddet 0x7A -adressen på tavlen (som vi skal snakke om senere), bruk deretter 7 -bits 0x3D -adressen for de større skjermene, ellers bruk standard 0x3C -adresse. For de mindre skjermene er adressen 0x3C.

Trinn 8: Koble til 128 X 64/32 OLED -er

Kabling 128 x 64/32 OLED
Kabling 128 x 64/32 OLED

La oss starte med å koble NodeMCU til skjermen.

Den første og viktigste tingen å merke seg er at noen av skjermene kan ha GND- og VCC -strømpinnene byttet rundt. Kontroller skjermen for å kontrollere at den er den samme som bildet. Hvis pinnene byttes, må du sørge for å endre tilkoblingene 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

Trinn 9: Kode

Kode
Kode
Kode
Kode
Kode
Kode
Kode
Kode

Adafruit bibliotek kommer med gode eksempler for begge

128x32 og 128x64 skjermer.

Biblioteket ligger under Fil> Eksempler> Adafruit SSD1306> og deretter skjermtypen i Arduino IDE.

Vi kommer til å bruke 128x32 I2C -eksemplet og vil endre det til å fungere med både 128x64 og 128x32 skjermer ved å koble det til en Arduino og deretter til et NodeMCU -kort.

Koden starter med å inkludere begge Adafruit -bibliotekene. I denne opplæringen skal jeg bare understreke de delene av koden som er nødvendige for at vi skal kunne laste på både brett og skjermer. Hvis du vil vite mer om koden, vennligst legg igjen en kommentar på bloggen min eller i kommentarfeltet nedenfor, så prøver jeg å komme tilbake til deg.

- Først skal vi laste koden til en Arduino Nano koblet til en 128x32 skjerm.

Vi kan bruke koden som den er uten noen endringer.

128x32 bruker 0x3C -adresse, så denne biten ser bra ut her, lar oss sjekke toppbiblioteket, ja den bruker også 0x3C -adressen og visningstypen er 128x32.

- La oss nå koble til 128x64 skjermen. Som vi vet bruker den 0x3C -adressen som standard, så vi trenger ikke å oppdatere adressen verken i koden eller biblioteket.

Vi trenger bare å kommentere 128_32 og fjerne kommentaren til 128_64 i toppbiblioteket og endre LCDHEIGHT til 64 i koden vår.

- Nå for å kjøre den samme koden på en NodeMCU må vi endre en linje til i koden vår.

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

Ganske mye for å vise alt vi først trenger for å fjerne den forrige skjermen ved å bruke

display.clearDisplay (); // Fjern bufferen

Tegn deretter objektet

testdrawline (); // Tegn en linje

Vis det på maskinvaren

display.display (); // Gjør dem synlige på skjermens maskinvare!

Vent en stund før du viser neste element.

forsinkelse (2000); // Vent i 2 sekunder

I dette eksemplet viser vi få elementer som tekst, linjer, sirkler, rulletekst, trekanter og mer. Bruk din fantasi og vis hva du vil på disse små skjermene.

Trinn 10: Tilpasse tekst og legge til bilder

Tilpasse tekst og legge til bilder
Tilpasse tekst og legge til bilder
Tilpasse tekst og legge til bilder
Tilpasse tekst og legge til bilder
Tilpasse tekst og legge til bilder
Tilpasse tekst og legge til bilder

Noen ganger må koden din vise egendefinerte fonter og

Bilder. Hvis du er veldig god i bitkartlegging, trenger du bare å lage en byte -matrise ved å slå på eller av de små lysdiodene på displayet for å lage egendefinerte fonter og bilder.

Imidlertid er jeg ikke veldig flink til å gjøre disse kartleggingene og vil ikke bruke timer på å lage bitkarttabellene.

Så, hva er alternativene mine? Jeg bruker vanligvis to nettsteder for å generere egendefinerte fonter og bilder. Koblingene er gitt i beskrivelsen nedenfor.

Egendefinerte fonter

Gå til fontkonverteringsnettstedet, velg skriftfamilien, stilen, størrelsen, bibliotekversjonen som "Adafruit GFX Font" og klikk deretter på "Create" -knappen. På høyre side av denne siden kan du se hvordan skrifttypen din kommer til å se ut på selve displayet.

Basert på valget ditt, genererer nettsiden fontenes topptekstfil. Lag en fil som heter "modified_font.h" i den samme mappen der koden er, og kopier og lagre den genererte koden i den. Da trenger du bare å inkludere toppteksten i koden for å bruke den egendefinerte skriften.

#include "modified_font.h"

Deretter trenger du bare å angi skriften før du viser teksten for å bruke den egendefinerte skriften på den.

display.setFont (& Your_Fonts_Name);

Du kan få navnet på skrifttypen fra toppfilen du nettopp la til i prosjektet. Det er det, enkelt.

Minne er alltid et problem når du bruker egendefinerte fonter, så tenk alltid på byte som vil bli brukt av minnet. Bare husk at Arduino UNO bare har 32K minne.

Egendefinerte bilder

For å vise et bitmap -bilde på skjermen må du først lage et bilde på 128 x 64/32.

Jeg bruker den gode gamle "MS Paint" til å lage et 128 x 64 bitmap -bilde som jeg deretter vil laste opp til dette image converter -nettstedet. Nettstedet konverterer bilder til byte-strenger, som kan brukes med Arduino og OLED-skjermer.

Start med å laste opp bildet til nettstedet. Sett deretter en hake i avmerkingsboksen "Inverter bildefarger", og endre "Utgangskodeformat" til "Arduino-kode". Velg deretter retningen og trykk på "Generer kode" -knappen for å generere byte-matrisen. "Forhåndsvisning" -delen viser deg hvordan bildet ditt vil se ut på selve skjermen.

Jeg har inkludert koden sammen med denne opplæringen som du kan bruke til å vise bildene dine. Du trenger bare å erstatte matrisen i koden min med den du nettopp genererte og deretter laste den til Arduino.

Trinn 11: Koble til 2 skjermer

Koble til 2 skjermer
Koble til 2 skjermer
Koble til 2 skjermer
Koble til 2 skjermer

Det er enkelt å koble to 128 x 64 skjermer til prosjektet ditt.

Du trenger bare å lodde 0Ohm -motstanden fra 0x78 -adressen og sette den på 0x7A og deretter bruke 0x3D -adressen i koden din i stedet for standard 0x3C.

Du lurer sikkert på hvorfor vi bruker 0x3C og 0x3D -adressen og ikke den faktiske 0x78 og 0x7A. Arduino godtar 7-biters adresse og ikke 8-biters maskinvareadresser. Så vi må først konvertere 8-bits adressen til binær, og deretter kutte den minst signifikante biten for å få de 7 bitene. Konverter deretter de 7 bitene til HEX for å få 0x3C- eller 0x3D -adressene du skriver inn i koden din.

Initialiser først skjermen ved å gi den et unikt navn:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

Deretter bruker du koden 1 og display 2 i koden til å ringe start -setningene med enhetsadressene i dem:

display1.begynner (SSD1306_SWITCHCAPVCC, 0x3C); // vise 1 op -adresse 0x3C

display2.begynner (SSD1306_SWITCHCAPVCC, 0x3D); // vise 2 op -adressen 0x3D

Det er det, du kan nå fortsette og gjøre hva du vil ved å bruke enten Display 1 eller Display 2 i resten av koden. Jeg har gitt et eksempel med denne opplæringen.

Kabling er nøyaktig det samme som det vi har gjort før, stort sett trenger du bare å legge til en annen skjerm til de samme I2C -pinnene på enten Arduino eller NodeMCU. Basert på adressene sender MCU deretter dataene på I2C -datalinjen.

Trinn 12: Koble til mer enn 2 skjermer

Koble til mer enn 2 skjermer
Koble til mer enn 2 skjermer
Koble til mer enn 2 skjermer
Koble til mer enn 2 skjermer
Koble til mer enn 2 skjermer
Koble til mer enn 2 skjermer

Hva om du vil koble til mer enn 2 skjermer?

Arduino har et begrenset antall pinner, og derfor kan du ikke ha mer enn en viss mengde skjold festet til den. Dessuten har den bare ett par I2C -busser.

Så hvordan kan vi feste mer enn 2 I2C -skjermer til en Arduino? Trikset er å bruke en TCA9548 Multiplexer.

TCA9548 lar en enkelt mikrokontroller kommunisere med opptil '64 sensorer 'alle med samme eller forskjellige I2C-adresse ved å tildele en unik kanal til hver sensorslave-sub-buss.

Når vi snakker om å sende data over 2 ledninger til flere enheter, trenger vi en måte å adressere dem på. Det er det samme som at postbudet kommer på en enkelt vei og slipper postpakkene til forskjellige hus fordi de har forskjellige adresser skrevet på dem.

Multiplexeren kobles til 3V3, GND, SDA og SCL linjer på mikrokontrolleren. Slavesensorene er koblet til en av åtte SCL/SDA -slaveporter på kortet. Kanalene velges ved å sende TCA9548A sin I2C -adresse (0x70 {default} - 0x77) etterfulgt av kanalnummeret (0b00000001 - 0b10000000). Du kan ha maks 8 av disse multiplexerne koblet sammen på 0x70-0x77 adresser for å kontrollere 64 av de samme I2C adresserte delene. Ved å koble de tre adressebitene A0, A1 og A2 til VIN kan du få en annen kombinasjon av adressene. Jeg vil forklare dette grundig i min neste opplæring om TCA9548A breakout board. For nå kan vi bare koble 8 OLED -er til dette brettet og ta en rask titt på koden.

Forbindelse:

VIN til 5V (eller 3.3V)

GND til bakken

SCL til I2C klokke

SDA til I2C data

Koble deretter sensorene til VIN, GND og bruk en av SCn / SDn -multiplexbussene

Nå kan Int -koden starte med å inkludere "Wire" -biblioteket og ved å definere multiplexeradressen.

#inkludere "Wire.h"

#inkludere

#define MUX_Address 0x70 // TCA9548A Koderadresse

Deretter må vi velge porten vi vil kommunisere til og sende dataene på den ved hjelp av denne funksjonen:

ugyldig tcaselect (uint8_t i) {

hvis (i> 7) returnerer;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

Deretter vil vi initialisere displayet i oppsettdelen ved å ringe "u8g.begin ();" for hver skjerm festet til MUX "tcaselect (i);"

Når vi er initialisert, kan vi gjøre hva vi vil bare ved å kalle funksjonen "tcaselect (i);" hvor "i" er verdien til den multipleksede bussen og deretter sende dataene og klokken deretter.

Trinn 13: Fordeler og ulemper

Fordeler og ulemper
Fordeler og ulemper

Bildet av en OLED er vakkert. Imidlertid har OLED også

ulemper. Fordi OLED -skjermer inneholder organisk materiale, er deres levetid kortere enn LCD -skjermer. I tillegg får mange OLED-skjermer innbrenning etter å ha vist det samme bildet i lang tid. Etter en innbrenning forblir bildet på skjermen selv etter at det har vist et annet bilde. Så sørg for at du fortsetter å oppdatere skjermen med noen få sekunders mellomrom. Vann kan øyeblikkelig skade de organiske materialene på disse skjermene.

Fordeler

Ikke behov for bakgrunnsbelysning

Skjermene er veldig tynne og lette

Lavt energiforbruk

Betraktningsvinklene er bredere enn LCD -skjermer

Lysstyrke og kontrast er flotte

Høy hastighet og lav responstid

Dyp svart farge

Ulemper

Kostbar teknologi

Kort livssyklus

OLEDS er mer sannsynlig å brenne seg inn

Vannskade

Trinn 14: Vanlige feil

Vanlige feil
Vanlige feil

For å avslutte opplæringen kan vi snakke om få vanlige feil

folk lager mens de bruker disse skjermene:

- Kontroller alltid pinnene tre ganger før du bruker dem i prosjektet

- Velg den riktige biblioteksadressen i toppteksten og i koden

#define SSD1306_I2C_ADDRESS 0x3C // i Adafruit_SSD1306.h

og

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // i koden din

Hvis adressen er feil, vil OLED ikke vise noe

- Skjermstørrelsen må endres i driveren før den kan brukes. Hvis den ikke endres, får du en feilmelding når du prøver å bekrefte koden

#error ("Feil høyde, vær så snill å fikse Adafruit_SSD1306.h!");

- Hvis du bruker NodeMCU, må du bytte ut OLED_RESET fra 4 til LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Jeg har scenefolk som lager alle slags ting ved hjelp av denne OLED -skjermen. Noen har til og med laget videospill og alt. Jeg er virkelig ikke interessert i å lage et videospill med denne lille skjermen. Imidlertid vil jeg nå la deg utforske fantasien din og komme ut med fantastiske ideer.

Trinn 15: Lenker

- Blogg:

- Legg til bilde:

- Tilpasset tekst:

- Adafruit visningsbibliotek:

-Adafruit GFX-bibliotek:

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

Hvis du vil bruke den mindre skjermen, bruk standard 128_32 ellers for den større skjermkommentaren 128_32 og fjern kommentaren 128X64 NO_ACK i koden din (bare kommenter hvilken type skjerm du bruker) (fonter er i skriftbiblioteket)

Anbefalt: