Innholdsfortegnelse:
- Trinn 1: Ting vi skal lære i dag
- Trinn 2: Krav til maskinvare
- Trinn 3: Hva er en OLED -skjerm?
- Trinn 4:
- Trinn 5: Nærmere titt
- Trinn 6: Bibliotek
- Trinn 7:
- Trinn 8: Koble til 128 X 64/32 OLED -er
- Trinn 9: Kode
- Trinn 10: Tilpasse tekst og legge til bilder
- Trinn 11: Koble til 2 skjermer
- Trinn 12: Koble til mer enn 2 skjermer
- Trinn 13: Fordeler og ulemper
- Trinn 14: Vanlige feil
- Trinn 15: Lenker
Video: OLED I2C Display Arduino/NodeMCU Opplæring: 15 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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
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?
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:
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
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
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:
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
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
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
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
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
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
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
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:
Tre høyttalerkretser -- Trinn-for-trinn opplæring: 3 trinn
Tre høyttalerkretser || Trinn-for-trinn opplæring: Høyttalerkretsen styrker lydsignalene som mottas fra miljøet til MIC og sender den til høyttaleren der forsterket lyd produseres. Her vil jeg vise deg tre forskjellige måter å lage denne høyttalerkretsen på:
Opplæring: Hvordan Arduino styrer flere samme adresseenheter ved å bruke TCA9548A I2C Multiplexer: 3 trinn
Opplæring: Hvordan Arduino styrer flere samme adressenheter ved å bruke TCA9548A I2C Multiplexer: Beskrivelse: TCA9548A I2C Multiplexer -modulen gjør det mulig å koble til enheter med samme I2C -adresse (opptil 8 samme adresse I2C) koblet til en mikrokontroller. Multiplexeren fungerer som en portvakt og sender kommandoene til det valgte settet
Arduino Max7219 Led Matrix Display Opplæring: 4 trinn
Arduino Max7219 Led Matrix Display Tutorial: Hei folkens i denne instruksjonene vil vi lære å bruke led matrisedisplay med max7219 skjermdriver med Arduino for å vise animasjon og tekst på denne ledde Matrix -skjermen
Raspberry Pi - HIH6130 I2C Fuktighets- og temperatursensor Java Opplæring: 4 trinn
Raspberry Pi - HIH6130 I2C Fuktighets- og temperatursensor Java Opplæring: HIH6130 er en fuktighets- og temperatursensor med digital utgang. Disse sensorene gir et nøyaktighetsnivå på ± 4% RF. Med bransjeledende langsiktig stabilitet, ekte temperaturkompensert digital I2C, bransjeledende pålitelighet, energieffektivitet
Opplæring i grensesnitt OLED 0,91 tommer 128x32 med Arduino UNO: 7 trinn (med bilder)
Opplæring i grensesnitt OLED 0,91 tommer 128x32 med Arduino UNO: Denne opplæringen skal lære deg noen grunnleggende om bruk av OLED 0,91 tommer LCD128x32 med Arduino UNO