Taula de continguts:

Pantalla OLED I2C Tutorial Arduino / NodeMCU: 15 passos
Pantalla OLED I2C Tutorial Arduino / NodeMCU: 15 passos

Vídeo: Pantalla OLED I2C Tutorial Arduino / NodeMCU: 15 passos

Vídeo: Pantalla OLED I2C Tutorial Arduino / NodeMCU: 15 passos
Vídeo: #oled #arduino #viral 2024, Juliol
Anonim
Image
Image

El primer programa que escrius quan comences a aprendre un

el nou llenguatge de programació és: "Hello World!".

El programa en si no fa més que imprimir un text "Hello World" a la pantalla.

Llavors, com aconseguim que el nostre Arduino mostri "Hola món!"

En aquest vídeo, us mostraré com començar amb les petites pantalles OLED I2C de 0,91 (128x32) i 0,96 (128x64).

Hi ha centenars de tutorials al web que expliquen el mateix de diferents maneres, però no he trobat cap que m’expliqui tot sobre la pantalla OLED i com utilitzar-lo en diferents escenaris. Vaig trigar una mica a treballar-ho tot. Per tant, vaig pensar que hauria de crear un tutorial sobre el que he après i combinar totes les característiques i maneres en què es poden utilitzar les pantalles OLED en els nostres projectes.

Pas 1: coses que aprendrem avui

Requisit de maquinari
Requisit de maquinari

En aquest vídeo parlarem de:

- Què és una pantalla OLED?

- A continuació, analitzarem de prop les pantalles OLED I2C de 0,91 (128x32) i 0,96 (128x64)

- A continuació parlarem d’instal·lar la biblioteca Adafruit al vostre IDE Arduino

- Després connectarem NodeMCU i Arduino a una pantalla OLED

- A continuació, farem una ullada al codi i hi mostrarem alguns gràfics i text

- També parlarem sobre l’aplicació de tipus de lletra personalitzats i la visualització d’imatges

- A continuació, connectarem diversos OLED a un microcontrolador mitjançant el multiplexor I2C

- Finalment, parlarem dels pocs errors habituals que la gent comet en utilitzar les pantalles OLED

Pas 2: requisit de maquinari

Per a aquest tutorial necessitem:

- Una taula de pa

- Pantalles OLED I2C de 0,91 "(128x32) i 0,96" (128x64)

- Arduino UNO / NANO (el que sigui útil)

- NodeMCU

- Multiplexor TCA9548A I2C

- Pocs cables de connexió

- i un cable USB per penjar el codi

Pas 3: què és una pantalla OLED?

Què és una pantalla OLED?
Què és una pantalla OLED?
Què és una pantalla OLED?
Què és una pantalla OLED?

El díode emissor de llum OLED o orgànic és un emissor de llum

díode (LED) en què la capa electroluminescent emissiva és una pel·lícula de compost orgànic (milions de petites llums LED) que emet llum en resposta a un corrent elèctric.

Els OLED s’utilitzen per crear pantalles digitals en dispositius com ara pantalles de televisió, monitors d’ordinadors, sistemes portàtils com ara telèfons mòbils, consoles de jocs de mà i PDA. Una pantalla OLED funciona sense llum de fons perquè emet llum visible.

Pas 4:

Imatge
Imatge

Hi ha molts tipus de pantalles OLED disponibles al

mercat basat en el seu

- Mides

- Color

- Marques

- Protocol

- SPI (Serial Peripheral Interface) o I2C

- Esquema de control de matriu passiva (PMOLED) o matriu activa (AMOLED)

En aquest tutorial, parlaré de la connexió de

color blau 0,91 (128x32 OLED) i 0,96 (128x64 OLED) I2C OLDE es mostra en un Arduino NANO i NodeMCU. La tecnologia de bus I2C utilitza només 2 pins de la MCU, de manera que tenim munts disponibles per a altres sensors.

Pas 5: aspecte més proper

Fixar-s'hi més
Fixar-s'hi més
Fixar-s'hi més
Fixar-s'hi més
Fixar-s'hi més
Fixar-s'hi més

Anem a conèixer aquestes dues pantalles.

A la part posterior d’aquestes pantalles hi ha muntats condensadors i resistències SMD soldats a bord; però, ja que és un dispositiu I2C, només ens preocupen aquests 2 pins (SCL i SDA)

La pantalla es connecta a Arduino mitjançant només quatre cables: dos per a alimentació (VCC i GND) i dos per a dades (rellotge sèrie SCL i

dades de sèrie SDA), cosa que fa que el cablejat sigui molt senzill. La connexió de dades és I2C (I²C, IIC o circuit inter-integrat) i aquesta interfície també s’anomena TWI (Two Wire Interface).

- Els passadors integrats poden estar en un ordre diferent, de manera que comproveu-ho sempre abans de connectar-lo al vostre projecte.

- El voltatge de funcionament oscil·la entre els 3v i els 5v, però és millor utilitzar la guia del full de dades del fabricant.

- De vegades, hem de fer servir 2 pantalles als nostres projectes. Llavors, com podem aconseguir-ho?

El truc és tenir una adreça configurable a la pantalla. Aquesta unitat té una adreça configurable entre 0x78 i 0x7A. Només desoldant la resistència de 0 Ohm d’un costat i enfocant-lo cap a l’altre costat o simplement posant una soldadura global podem canviar l’adreça. En parlarem en profunditat quan connectem diverses pantalles a un Arduino a la secció posterior d’aquest tutorial.

A la imatge, aquestes pantalles tenen un aspecte molt gran. Però, pràcticament parlant, són diminuts. Estan formats per píxels OLED individuals de 128 x 32/64 i no requereixen cap llum de fons. Feu un cop d'ull a això i vegeu el petit que és. Tot i que són petites, poden ser molt útils en qualsevol projecte electrònic.

Pas 6: Biblioteca

Biblioteca
Biblioteca
Biblioteca
Biblioteca
Biblioteca
Biblioteca

Hi ha diverses biblioteques disponibles per controlar-les

mostra. Antigament he utilitzat la "biblioteca u8glib", però trobo que la biblioteca AdaFruit és molt fàcil d'entendre i utilitzar en els nostres projectes. Per tant, utilitzaré la biblioteca AdaFruit en aquest tutorial.

Per controlar la pantalla OLED, necessitareu la biblioteca "adafruit_GFX.h" i la biblioteca "adafruit_SSD1306.h".

Hi ha dues maneres de descarregar i instal·lar la biblioteca al vostre IDE Arduino.

Mètode 1

Aneu al "Gestor de biblioteques" i cerqueu "adafruit_SSD1306" i "adafruit_gfx"

Seleccioneu la versió més recent i premeu el botó Instal·la.

Un cop instal·lats, podeu utilitzar aquestes biblioteques al vostre programa.

Mètode 2

Aquestes dues biblioteques també es poden descarregar des de github (en necessiteu les dues):

Proporcionaré els enllaços a la descripció següent.

La biblioteca de visualització:

La biblioteca GFX:

Un cop descarregada, copieu la carpeta master Adafruit_SSD1306 del fitxer comprimit descarregat a la carpeta de biblioteques Arduino. Aquesta carpeta se sol trobar a Documents> Arduino> biblioteques dels sistemes Windows. A Linux se sol trobar a la carpeta inicial> Arduino> biblioteques. Finalment, a la carpeta de la biblioteca Arduino, canvieu el nom de la carpeta principal Adafruit_SSD1306 per Adafruit_SSD1306. Encara que no canvieu el nom, està bé.

Pas 7:

Imatge
Imatge

Ara fem una ullada a "Adafruit_SSD1306.h"

dossier

Dues coses que hem de saber en aquesta biblioteca:

1. Si voleu utilitzar la pantalla més petita, utilitzeu el valor per defecte 128_32, en cas contrari per a la pantalla més gran comenteu el 128_32 i descomenteu el 128_64

2. Si heu soldat l'adreça 0x7A al tauler (de la qual parlarem més endavant), utilitzeu l'adreça 0x3D de 7 bits per a les pantalles més grans; en cas contrari, utilitzeu l'adreça 0x3C per defecte. Per a les pantalles més petites, l'adreça és 0x3C.

Pas 8: cablejar OLED de 128 X 64/32

Cablejat OLED de 128 X 64/32
Cablejat OLED de 128 X 64/32

Comencem connectant el NodeMCU a la pantalla.

El primer i més important que cal tenir en compte és que és possible que algunes de les pantalles tinguin intercanviats els pins d'alimentació GND i VCC. Comproveu la pantalla per assegurar-vos que sigui la mateixa que la imatge. Si es canvien els pins, assegureu-vos de canviar les connexions a Arduino o NodeMCU.

- Cablatge OLED NodeMCU

OLED VCC - NodeMCU 3.3V

OLED GND - NodeMCU GND

OLED SCL - NodeMCU D1

OLED SDA - NodeMCU D2

- Cablatge OLED Arduino Uno

OLED VCC - Arduino 5V

OLED GND: Arduino GND

OLED SCL - Arduino Uno A5

SDA OLED - Arduino Uno A4

- Cablatge OLED Arduino MEGA 2560

OLED VCC - Arduino 5V

OLED GND: Arduino GND

OLED SCL - Arduino MEGA 2560 pin 21

OLED SDA - Arduino MEGA 2560 pin 20

Pas 9: Codi

Codi
Codi
Codi
Codi
Codi
Codi
Codi
Codi

La biblioteca Adafruit inclou molt bons exemples per a tots dos

Pantalles de 128x32 i 128x64.

La biblioteca es troba a Fitxer> Exemples> Adafruit SSD1306> i, a continuació, el tipus de visualització a l'IDE Arduino.

Utilitzarem l’exemple I2C de 128x32 i el modificarem perquè funcioni amb els primers 128x64 i 128x32, connectant-lo a un Arduino i després a una placa NodeMCU.

El codi comença incloent les dues biblioteques Adafruit. En aquest tutorial vaig a destacar només aquelles parts del codi que siguin necessàries per carregar-les tant a les taules com a les pantalles. Si voleu obtenir més informació sobre el codi, deixeu un comentari al meu bloc o a la secció de comentaris que hi ha a continuació i m’esforço per contactar amb vosaltres.

- Primer carregarem el codi a un Arduino Nano connectat a una pantalla de 128x32.

Podem utilitzar el codi tal qual sense modificacions.

128x32 utilitza l'adreça 0x3C, de manera que aquest bit es veu bé aquí, permet comprovar la biblioteca de capçaleres, sí, també s'utilitza l'adreça 0x3C i el tipus de visualització és 128x32.

- Ara permet connectar la pantalla de 128x64. Com sabem, utilitza l'adreça 0x3C per defecte, de manera que no necessitem actualitzar l'adreça ni al codi ni a la biblioteca.

Només necessitem comentar el 128_32 i descomentar el 128_64 a la biblioteca de capçaleres i canviar el LCDHEIGHT a 64 al nostre codi.

- Ara, per executar el mateix codi en un NodeMCU, hem de canviar una línia més al nostre codi.

La resta del codi "#define OLED_RESET 4"> "#define OLED_RESET LED_BUILTIN" és el mateix que Arduino

Gairebé per mostrar qualsevol cosa que primer necessitem per esborrar la pantalla anterior

display.clearDisplay (); // Esborreu la memòria intermèdia

Després dibuixa l’objecte

testdrawline (); // Dibuixa una línia

Mostra-ho al maquinari

display.display (); // Feu-los visibles al maquinari de la pantalla.

Espereu un temps abans de mostrar el següent element.

endarreriment (2000); // Espereu 2 segons

En aquest exemple mostrem pocs elements com ara text, línies, cercles, text en desplaçament, triangles i molt més. Seguiu endavant i utilitzeu la vostra imaginació i mostreu el que vulgueu en aquestes minúscules pantalles.

Pas 10: personalització de text i addició d'imatges

Personalitzar text i afegir imatges
Personalitzar text i afegir imatges
Personalitzar text i afegir imatges
Personalitzar text i afegir imatges
Personalitzar text i afegir imatges
Personalitzar text i afegir imatges

De vegades, el vostre codi ha de mostrar tipus de lletra personalitzats i

imatges. Si sou molt bons en el mapatge de bits, només heu de crear matrius de bytes activant o desactivant els diminuts LED de la pantalla per crear fonts i imatges personalitzades.

Tot i això, no sóc molt bo en fer aquestes assignacions i no vull passar hores creant les taules de mapes de bits.

Quines són les meves opcions? Normalment faig servir dos llocs web per generar imatges i tipus de lletra personalitzats. Els enllaços es proporcionen a la descripció següent.

Tipus de lletra personalitzats

Aneu al lloc web del convertidor de tipus de lletra, seleccioneu la família de fonts, l’estil, la mida, la versió de la biblioteca com a "Tipus de lletra Adafruit GFX" i, a continuació, premeu el botó "Crea". A la part dreta d'aquesta pàgina podeu veure com quedarà el vostre tipus de lletra a la pantalla real.

Segons la vostra selecció, la pàgina web genera el fitxer de capçalera de tipus de lletra. Creeu un fitxer anomenat "modified_font.h" a la mateixa carpeta on es troba el vostre codi i copieu i deseu-hi el codi generat. A continuació, només heu d’incloure el fitxer de capçalera al vostre codi per utilitzar el tipus de lletra personalitzat.

#include "modified_font.h"

A continuació, només heu d’establir el tipus de lletra abans de mostrar el text per aplicar-hi el tipus de lletra personalitzat.

display.setFont (& Your_Fonts_Name);

Podeu obtenir el nom del tipus de lletra des del fitxer de capçalera que acabeu d’afegir al vostre projecte. Això és tot, fàcil.

La memòria sempre és una preocupació mentre s’utilitzen tipus de lletra personalitzats; per tant, tingueu en compte sempre els bytes que consumirà la memòria. Recordeu que Arduino UNO només té 32K de memòria.

Imatges personalitzades

Per mostrar una imatge de mapa de bits a la pantalla, primer heu de crear una imatge de mida 128 x 64/32.

Estic fent servir el bon vell "MS Paint" per crear una imatge de mapa de bits de 128 x 64 que després penjaré a aquest lloc web de conversió d'imatges. El lloc web converteix les imatges en cadenes de bytes, que es poden utilitzar amb pantalles Arduino i OLED.

Comenceu carregant la imatge al lloc web. A continuació, marqueu la casella de selecció "Inverteix els colors de la imatge" i canvieu el "Format del codi de sortida" a "Codi Arduino" i, a continuació, seleccioneu l'orientació i premeu el botó "Generar codi" per generar la matriu de bytes. La secció "Visualització prèvia" us mostra l'aspecte de la vostra imatge a la pantalla real.

He inclòs el codi juntament amb aquest tutorial que podeu utilitzar per mostrar les vostres imatges. Només heu de substituir la matriu del meu codi per la que acabeu de generar i carregar-la al vostre Arduino.

Pas 11: Connexió de 2 pantalles

Connexió de 2 pantalles
Connexió de 2 pantalles
Connexió de 2 pantalles
Connexió de 2 pantalles

Connectar dues pantalles de 128 x 64 al vostre projecte és fàcil.

Només haureu de vendre la resistència 0Ohm des de l'adreça 0x78 i posar-la a 0x7A i després utilitzar l'adreça 0x3D al vostre codi en lloc de la 0x3C per defecte.

Us heu de preguntar per què fem servir l'adreça 0x3C i 0x3D i no les 0x78 i 0x7A reals. Arduino accepta adreces de 7 bits i no les adreces de maquinari de 8 bits. Per tant, primer hem de convertir l’adreça de 8 bits a binària i, a continuació, tallar el bit menys significatiu per obtenir els 7 bits. A continuació, converteix els 7 bits a HEX per obtenir les adreces 0x3C o 0x3D que introduïu al vostre codi.

Primer, inicialitzeu la pantalla donant-li un nom únic:

Adafruit_SSD1306 display1 (OLED_REST);

Adafruit_SSD1306 display2 (OLED_REST);

A continuació, utilitzeu la pantalla 1 i la pantalla 2 per trucar a les instruccions begin amb les adreces del dispositiu:

display1.begin (SSD1306_SWITCHCAPVCC, 0x3C); // mostra 1 adreça operativa 0x3C

display2.begin (SSD1306_SWITCHCAPVCC, 0x3D); // mostra l'adreça 2 op 0x3D

Això és tot, ara podeu seguir endavant i fer el que vulgueu mitjançant la pantalla 1 o la pantalla 2 a la resta del vostre codi. He proporcionat un exemple amb aquest tutorial.

El cablejat és exactament el mateix que hem fet abans, gairebé només cal afegir una altra pantalla als mateixos pins I2C de l’Arduino o del NodeMCU. En funció de les adreces, la MCU envia les dades a la línia de dades I2C.

Pas 12: connectar més de 2 pantalles

Connexió de més de 2 pantalles
Connexió de més de 2 pantalles
Connexió de més de 2 pantalles
Connexió de més de 2 pantalles
Connexió de més de 2 pantalles
Connexió de més de 2 pantalles

Ara, i si voleu connectar més de 2 pantalles?

Arduino té un nombre limitat de pins i, per tant, no es pot tenir més d’una certa quantitat d’escuts. A més, només compta amb un parell de busos I2C.

Llavors, com podem connectar més de 2 pantalles I2C a un Arduino? El truc és utilitzar un multiplexor TCA9548.

TCA9548 permet a un únic microcontrolador comunicar-se amb fins a '64 sensors 'tots amb la mateixa o diferent adreça I2C assignant un canal únic a cada sub-bus esclau del sensor.

Quan parlem d’enviar dades a través de 2 cables a diversos dispositius, necessitem una manera d’abordar-los. És el mateix que el carter que arriba per una sola carretera i que deixa els paquets de correu a diferents cases perquè tenen diferents adreces escrites.

El multiplexor es connecta a les línies 3V3, GND, SDA i SCL del microcontrolador. Els sensors esclaus estan connectats a un dels vuit ports esclaus SCL / SDA de la placa. Els canals es seleccionen enviant al TCA9548A la seva adreça I2C (0x70 {per defecte} - 0x77) seguida del número de canal (0b00000001 - 0b10000000). Podríeu tenir com a màxim 8 d'aquests multiplexors connectats entre si en adreces 0x70-0x77 per controlar 64 de les mateixes parts adreçades d'I2C. En connectar els tres bits d’adreces A0, A1 i A2 a VIN podeu obtenir una combinació diferent de les adreces. Ho explicaré en profunditat al meu proper tutorial al tauler de ruptura TCA9548A. De moment, només cal connectar 8 OLED a aquesta placa i fer una ullada ràpida al codi.

Connexió:

VIN a 5V (o 3,3V)

GND a terra

Rellotge SCL a I2C

Dades SDA a I2C

A continuació, connecteu els sensors a VIN, GND i utilitzeu un dels busos multiplexats SCn / SDn

Ara, Int code permet començar incloent la biblioteca "Wire" i definint l'adreça dels multiplexors.

#include "Wire.h"

#incloure

#define MUX_Address 0x70 // TCA9548A Adreça dels codificadors

A continuació, hem de seleccionar el port al qual volem comunicar-nos i enviar-ne les dades mitjançant aquesta funció:

void tcaselect (uint8_t i) {

si (i> 7) torna;

Wire.beginTransmission (MUX_Address);

Wire.write (1 << i);

Wire.endTransmission ();

}

A continuació, inicialitzarem la pantalla a la secció de configuració trucant a "u8g.begin ();" per a cada pantalla connectada al MUX "tcaselect (i);"

Un cop inicialitzats, podem fer el que vulguem només anomenant la funció "tcaselect (i);" on "i" és el valor del bus multiplexat i, a continuació, envia les dades i el rellotge en conseqüència.

Pas 13: avantatges i desavantatges

Avantatges i inconvenients
Avantatges i inconvenients

La imatge d’un OLED és preciosa. No obstant això, també tenen OLED

desavantatges. Com que les pantalles OLED contenen material orgànic, la seva vida útil és més curta que les pantalles LCD. A més, moltes pantalles OLED reben gravacions després de mostrar la mateixa imatge durant molt de temps. Després d'una gravació, la imatge es manté a la pantalla fins i tot després de mostrar-ne una altra. Assegureu-vos de continuar actualitzant la pantalla cada pocs segons. L’aigua pot danyar instantàniament els materials orgànics d’aquestes pantalles.

Avantatges

No fa falta llum de fons

Les pantalles són molt fines i lleugeres

Baix consum d'energia

Els angles de visió són més amplis que els LCD

La brillantor i el contrast són excel·lents

Alta velocitat i poc temps de resposta

Color negre intens

Desavantatges

Tecnologia costosa

Cicle de vida curt

Els OLEDS són més propensos a cremar-se

Danys causats per l’aigua

Pas 14: Errors comuns

Errors comuns
Errors comuns

Per acabar, el tutorial permet parlar de pocs errors habituals

la gent fa mentre utilitza aquestes pantalles:

- Comproveu sempre els pins abans de fer-los servir al vostre projecte

- Recolliu l'adreça adequada de la biblioteca al fitxer de capçalera i al vostre codi

#define SSD1306_I2C_ADDRESS 0x3C // a Adafruit_SSD1306.h

i

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // al vostre codi

Si l'adreça és incorrecta, l'OLED no mostrarà res

- La mida de la pantalla s'ha de canviar al controlador abans de poder utilitzar-la. Si no es modifica, rebrà un missatge d'error en intentar verificar el codi

#error ("Alçada incorrecta, corregiu Adafruit_SSD1306.h!");

- Si utilitzeu NodeMCU, assegureu-vos de substituir OLED_RESET de 4 a LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Tinc persones d’escena que fan tot tipus de coses amb aquesta pantalla OLED. Alguns fins i tot han creat videojocs i tot. Realment no m'interessa crear un videojoc amb aquesta petita pantalla. Tanmateix, ara us deixaré per explorar la vostra imaginació i sortiré amb idees sorprenents.

Pas 15: enllaços

- Bloc:

- Afegeix imatge:

- Text personalitzat:

- Biblioteca de visualització d’Adafruit:

- Biblioteca AdFruit GFX:

- Biblioteca u8glib: https://code.google.com/archive/p/u8glib/ o

Si voleu utilitzar la pantalla més petita, utilitzeu el valor per defecte 128_32, en cas contrari, per comentar la pantalla més gran, feu el 128_32 i descomenteu el 128X64 NO_ACK del vostre codi (només heu de descommentar el tipus de pantalla que esteu utilitzant) (els tipus de lletra es troben a la biblioteca de fonts)

Recomanat: