Sommario:

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

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

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

Il primissimo programma che scrivi quando inizi a imparare a

nuovo linguaggio di programmazione è: "Hello World!".

Il programma stesso non fa altro che stampare un testo "Hello World" sullo schermo.

Quindi, come facciamo a far visualizzare al nostro Arduino "Hello World!"?

In questo video, ti mostrerò come iniziare con i piccoli display OLED I2C da 0,91 (128x32) e 0,96 (128x64).

Ci sono centinaia di tutorial sul web che spiegano la stessa cosa in modi diversi, ma non sono riuscito a trovarne uno che mi dica tutto sul display OLED e su come usarlo in diversi scenari. Mi ci è voluto un po' di tempo per risolvere il tutto. Quindi, ho pensato di creare un tutorial su ciò che ho imparato e combinare tutte le funzionalità e i modi in cui i display OLED possono essere utilizzati nei nostri progetti.

Passaggio 1: cose che impareremo oggi

Requisiti hardware
Requisiti hardware

In questo video parleremo di:

- Che cos'è un display OLED?

- Poi daremo un'occhiata più da vicino ai display OLED I2C da 0,91 (128x32) e 0,96 (128x64)

- Successivamente parleremo dell'installazione della libreria Adafruit sul tuo IDE Arduino

- Quindi collegheremo NodeMCU e Arduino a un display OLED

- Successivamente daremo un'occhiata al codice e mostreremo alcuni grafici e testo su di esso

- Parleremo anche dell'applicazione dei caratteri personalizzati e della visualizzazione delle immagini

- Quindi collegheremo più OLED a un microcontrollore utilizzando I2C Multiplexer

- Infine, parleremo di alcuni errori comuni che le persone commettono durante l'utilizzo dei display OLED

Passaggio 2: requisiti hardware

Per questo tutorial abbiamo bisogno di:

- Un tagliere

- Display OLED I2C da 0,91" (128x32) e 0,96" (128x64)

- Arduino UNO/NANO (quello che è utile)

- NodeMCU

- Multiplexer I2C TCA9548A

- Pochi cavi di collegamento

- e un cavo USB per caricare il codice

Passaggio 3: cos'è un display OLED?

Che cos'è un display OLED?
Che cos'è un display OLED?
Che cos'è un display OLED?
Che cos'è un display OLED?

OLED o diodo organico a emissione di luce è un emettitore di luce

diodo (LED) in cui lo strato elettroluminescente emissivo è una pellicola di composto organico (milioni di piccole luci LED) che emette luce in risposta a una corrente elettrica.

Gli OLED vengono utilizzati per creare display digitali in dispositivi come schermi televisivi, monitor di computer, sistemi portatili come telefoni cellulari, console di gioco portatili e PDA. Un display OLED funziona senza retroilluminazione perché emette luce visibile.

Passaggio 4:

Immagine
Immagine

Ci sono molti tipi di display OLED disponibili nel

mercato in base alla loro

- Taglie

- Colore

- Marche

- Protocollo

- SPI (interfaccia periferica seriale) o I2C

- Schema di controllo a matrice passiva (PMOLED) o a matrice attiva (AMOLED)

In questo tutorial, parlerò del collegamento del

display I2C OLDE di colore blu 0,91 (128x32 OLED) e 0,96 (128x64 OLED) su un Arduino NANO e NodeMCU. La tecnologia del bus I2C utilizza solo 2 pin dell'MCU, quindi abbiamo a disposizione un sacco di altri sensori.

Passaggio 5: sguardo più ravvicinato

Sguardo più ravvicinato
Sguardo più ravvicinato
Sguardo più ravvicinato
Sguardo più ravvicinato
Sguardo più ravvicinato
Sguardo più ravvicinato

Diamo un'occhiata più da vicino a questi due display.

Sul retro di questi display ci sono cumuli di condensatori SMD e resistori saldati a bordo; ma, dato che è un dispositivo I2C, ci interessano solo questi 2 pin (SCL e SDA)

Il display si collega ad Arduino utilizzando solo quattro fili: due per l'alimentazione (VCC e GND) e due per i dati (orologio seriale SCL e

dati seriali SDA), rendendo il cablaggio molto semplice. La connessione dati è I2C (I²C, IIC o Inter-Integrated Circuit) e questa interfaccia è anche chiamata TWI (Two Wire Interface).

- I pin a bordo possono essere in ordine diverso, quindi controlla sempre tre volte prima di collegarlo al tuo progetto.

- La tensione di funzionamento è compresa tra 3 V e 5 V, ma è meglio utilizzare la guida della scheda tecnica del produttore.

- A volte abbiamo bisogno di usare 2 display nei nostri progetti. Quindi, come possiamo raggiungere questo obiettivo?

Il trucco è avere un indirizzo configurabile sul display. Questa unità ha un indirizzo configurabile tra 0x78 e 0x7A. Semplicemente dissaldando il resistore da 0Ohm da un lato e agganciandolo all'altro lato o semplicemente mettendo una saldatura globale, possiamo cambiare l'indirizzo. Ne parleremo in modo approfondito quando collegheremo più display a un Arduino nella sezione successiva di questo tutorial.

Nella foto questi display sembrano molto grandi. Ma, in pratica, sono minuscoli. Sono costituiti da 128 x 32/64 pixel OLED individuali e non richiedono alcuna retroilluminazione. Basta dare un'occhiata a questo e vedere quanto è piccolo. Anche se sono piccoli possono essere molto utili in qualsiasi progetto elettronico.

Passaggio 6: libreria

Biblioteca
Biblioteca
Biblioteca
Biblioteca
Biblioteca
Biblioteca

Sono disponibili diverse librerie per controllarli

visualizza. In passato ho usato la "libreria u8glib" ma trovo la libreria AdaFruit molto facile da capire e da usare nei nostri progetti. Quindi, userò la libreria AdaFruit in questo tutorial.

Per controllare il display OLED avrai bisogno della libreria "adafruit_GFX.h" e della libreria "adafruit_SSD1306.h".

Esistono due modi per scaricare e installare la libreria sul tuo IDE Arduino.

Metodo 1

Vai a "Gestione libreria" e cerca "adafruit_SSD1306" e "adafruit_gfx"

Seleziona l'ultima versione e premi il pulsante Installa.

Una volta installate, puoi utilizzare queste librerie nel tuo programma.

Metodo 2

Queste due librerie possono essere scaricate anche da github (sono necessarie entrambe):

Fornirò i link nella descrizione di seguito.

La libreria di visualizzazione:

La libreria GFX:

Una volta scaricato, copia la cartella Adafruit_SSD1306-master dal file zippato scaricato nella cartella delle librerie Arduino. Questa cartella si trova solitamente in Documenti > Arduino > librerie sui sistemi Windows. Su Linux di solito si trova nella cartella home > Arduino > librerie. Infine, nella cartella della libreria Arduino, rinomina la cartella Adafruit_SSD1306-master in Adafruit_SSD1306. Anche se non rinomini va bene.

Passaggio 7:

Immagine
Immagine

Ora, diamo un'occhiata a "Adafruit_SSD1306.h"

file

Due cose che dobbiamo sapere in questa libreria:

1. Se vuoi usare il display più piccolo usa il 128_32 di default altrimenti per il display più grande commenta il 128_32 e decommenta il 128_64

2. Se hai saldato l'indirizzo 0x7A sulla scheda (di cui parleremo più avanti) usa l'indirizzo 0x3D a 7 bit per i display più grandi, altrimenti usa l'indirizzo 0x3C di default. Per i display più piccoli l'indirizzo è 0x3C.

Passaggio 8: cablaggio 128 X 64/32 OLED

Cablaggio 128 X 64/32 OLED
Cablaggio 128 X 64/32 OLED

Iniziamo collegando il NodeMCU al display.

La prima e più importante cosa da notare è che alcuni display potrebbero avere i pin di alimentazione GND e VCC scambiati. Controlla il tuo display per assicurarti che sia uguale all'immagine. Se i pin vengono scambiati, assicurati di cambiare le connessioni ad Arduino o NodeMCU.

- Cablaggio OLED NodeMCU

OLED VCC – NodeMCU 3.3V

OLED GND – NodeMCU GND

OLED SCL – NodeMCU D1

OLED SDA – NodeMCU D2

- Cablaggio OLED Arduino Uno

OLED VCC – Arduino 5V

OLED GND – Arduino GND

OLED SCL – Arduino Uno A5

OLED SDA – Arduino Uno A4

- Cablaggio Arduino MEGA 2560 OLED

OLED VCC – Arduino 5V

OLED GND – Arduino GND

OLED SCL – Arduino MEGA 2560 pin 21

OLED SDA – Arduino MEGA 2560 pin 20

Passaggio 9: codice

Codice
Codice
Codice
Codice
Codice
Codice
Codice
Codice

La libreria Adafruit ha ottimi esempi per entrambi

Display 128x32 e 128x64.

La libreria si trova in File > Esempi > Adafruit SSD1306 > e quindi il tipo di visualizzazione nell'IDE Arduino.

Utilizzeremo l'esempio I2C 128x32 e lo modificheremo per funzionare con entrambi i display 128x64 e 128x32 collegandolo a un Arduino e quindi a una scheda NodeMCU.

Il codice inizia includendo entrambe le librerie Adafruit. In questo tutorial ho intenzione di sottolineare solo quelle parti del codice che sono necessarie per caricare sia le schede che i display. Se vuoi saperne di più sul codice, lascia un commento sul mio blog o nella sezione commenti qui sotto e mi impegnerò a risponderti.

- Per prima cosa andremo a caricare il codice su un Arduino Nano collegato a un display 128x32.

Possiamo usare il codice così com'è senza alcuna modifica.

128x32 utilizza l'indirizzo 0x3C quindi questo bit sembra tutto a posto qui, ricontrolla la libreria di intestazioni, sì, utilizza anche l'indirizzo 0x3C e il tipo di visualizzazione è 128x32.

- Ora colleghiamo il display 128x64. Come sappiamo, utilizza l'indirizzo 0x3C per impostazione predefinita, quindi non è necessario aggiornare l'indirizzo né nel codice né nella libreria.

Abbiamo solo bisogno di commentare il 128_32 e decommentare il 128_64 nella libreria di intestazione e cambiare LCDHEIGHT a 64 nel nostro codice.

- Ora per eseguire lo stesso codice su un NodeMCU dobbiamo cambiare un'altra riga nel nostro codice.

Il resto del codice "#define OLED_RESET 4" > "#define OLED_RESET LED_BUILTIN" è lo stesso di Arduino

Praticamente per visualizzare tutto ciò di cui abbiamo bisogno prima di cancellare la schermata precedente usando

display.clearDisplay(); // Cancella il buffer

Quindi disegna l'oggetto

testdrawline(); // Disegna una linea

Mostralo sull'hardware

display.display(); // Rendili visibili sull'hardware del display!

Attendi un po' di tempo prima di visualizzare l'elemento successivo.

ritardo (2000); // Attendi 2 secondi

In questo esempio vengono visualizzati pochi elementi come testo, linee, cerchi, testo scorrevole, triangoli e altro. Vai avanti e usa la tua immaginazione e mostra tutto ciò che vuoi su questi piccoli display.

Passaggio 10: personalizzazione del testo e aggiunta di immagini

Personalizzazione del testo e aggiunta di immagini
Personalizzazione del testo e aggiunta di immagini
Personalizzazione del testo e aggiunta di immagini
Personalizzazione del testo e aggiunta di immagini
Personalizzazione del testo e aggiunta di immagini
Personalizzazione del testo e aggiunta di immagini

A volte il tuo codice deve visualizzare caratteri personalizzati e

immagini. Se sei molto bravo nella mappatura dei bit, devi solo creare un array di byte accendendo o spegnendo i minuscoli LED del display per creare caratteri e immagini personalizzati.

Tuttavia, non sono molto bravo a fare queste mappature e non voglio passare ore a creare le tabelle delle mappe di bit.

Allora, quali sono le mie opzioni? In genere utilizzo due siti Web per generare caratteri e immagini personalizzati. I collegamenti sono forniti nella descrizione sottostante.

Caratteri personalizzati

Vai al sito Web del convertitore di caratteri, seleziona la famiglia di caratteri, lo stile, la dimensione, la versione della libreria come "Adafruit GFX Font" e quindi premi il pulsante "Crea". Sul lato destro di questa pagina puoi vedere come apparirà il tuo carattere sul display reale.

In base alla tua selezione, la pagina web genera il file di intestazione dei caratteri. Crea un file chiamato "modified_font.h" nella stessa cartella in cui si trova il tuo codice e copia e salva al suo interno il codice generato. Quindi devi solo includere il file di intestazione nel tuo codice per utilizzare il carattere personalizzato.

#include "font_modificato.h"

Quindi, devi solo impostare il carattere prima di visualizzare il testo per applicare il carattere personalizzato.

display.setFont(&Your_Fonts_Name);

Puoi ottenere il nome del carattere dal file di intestazione che hai appena aggiunto al tuo progetto. Questo è tutto, facile.

La memoria è sempre un problema durante l'utilizzo di caratteri personalizzati, quindi considera sempre i byte che verranno consumati dalla memoria. Ricorda solo che Arduino UNO ha solo 32K di memoria.

Immagini personalizzate

Per visualizzare un'immagine bitmap sullo schermo devi prima creare un'immagine di dimensioni 128 x 64/32.

Sto usando il buon vecchio "MS Paint" per creare un'immagine bitmap 128 x 64 che poi caricherò su questo sito Web di conversione di immagini. Il sito Web converte le immagini in stringhe di byte, che possono essere utilizzate con display Arduino e OLED.

Inizia caricando l'immagine sul sito web. Quindi metti un segno di spunta sulla casella "Inverti i colori dell'immagine" e cambia il "Formato del codice di output" in "Codice Arduino", quindi seleziona l'orientamento e premi il pulsante "Genera codice" per generare l'array di byte. La sezione "Anteprima" mostra come apparirà la tua immagine sul display reale.

Ho incluso il codice insieme a questo tutorial che puoi usare per visualizzare le tue immagini. Devi solo sostituire l'array nel mio codice con quello appena generato e quindi caricarlo sul tuo Arduino.

Passaggio 11: collegamento di 2 display

Collegamento di 2 display
Collegamento di 2 display
Collegamento di 2 display
Collegamento di 2 display

Collegare due schermi 128 x 64 al tuo progetto è facile.

Hai solo bisogno di dissaldare il resistore 0Ohm dall'indirizzo 0x78 e metterlo su 0x7A e quindi utilizzare l'indirizzo 0x3D nel tuo codice invece del 0x3C predefinito.

Ti starai chiedendo perché stiamo usando l'indirizzo 0x3C e 0x3D e non gli effettivi 0x78 e 0x7A. Arduino accetta indirizzi a 7 bit e non indirizzi hardware a 8 bit. Quindi, dobbiamo prima convertire l'indirizzo a 8 bit in binario, quindi tagliare il bit meno significativo per ottenere i 7 bit. Quindi converti i 7 bit in HEX per ottenere gli indirizzi 0x3C o 0x3D che inserisci nel tuo codice.

Innanzitutto, inizializza il display assegnandogli un nome univoco:

Adafruit_SSD1306 display1(OLED_REST);

Adafruit_SSD1306 display2(OLED_REST);

Quindi nel tuo codice usa il display 1 e il display 2 per chiamare le istruzioni di inizio con gli indirizzi del dispositivo al loro interno:

display1.begin(SSD1306_SWITCHCAPVCC, 0x3C); // mostra 1 indirizzo operativo 0x3C

display2.begin(SSD1306_SWITCHCAPVCC, 0x3D); // mostra 2 op address 0x3D

Ecco fatto, ora puoi andare avanti e fare quello che vuoi usando Display 1 o Display 2 nel resto del tuo codice. Ho fornito un esempio con questo tutorial.

Il cablaggio è esattamente lo stesso di quello che abbiamo fatto prima, praticamente devi solo aggiungere un altro display agli stessi pin I2C di Arduino o NodeMCU. Sulla base degli indirizzi, l'MCU invia quindi i dati sulla linea dati I2C.

Passaggio 12: collegamento di più di 2 display

Collegamento di più di 2 display
Collegamento di più di 2 display
Collegamento di più di 2 display
Collegamento di più di 2 display
Collegamento di più di 2 display
Collegamento di più di 2 display

Ora, cosa succede se vuoi collegare più di 2 display?

Arduino ha un numero limitato di pin e quindi non puoi avere più di una certa quantità di shield collegati ad esso. Inoltre, ha solo una coppia di bus I2C.

Quindi, come possiamo collegare più di 2 display I2C a un Arduino? Il trucco è usare un multiplexer TCA9548.

TCA9548 consente a un singolo microcontrollore di comunicare con un massimo di '64 sensori' tutti con lo stesso o diverso indirizzo I2C assegnando un canale univoco a ciascun sub-bus slave del sensore.

Quando parliamo di inviare dati su 2 fili a più dispositivi, abbiamo bisogno di un modo per indirizzarli. È come il postino che arriva da un'unica strada e lascia i pacchetti di posta in case diverse perché hanno scritti indirizzi diversi.

Il Multiplexer si collega alle linee 3V3, GND, SDA e SCL del microcontrollore. I sensori slave sono collegati a una delle otto porte slave SCL/SDA sulla scheda. I canali vengono selezionati inviando al TCA9548A il suo indirizzo I2C (0x70 {default} - 0x77) seguito dal numero di canale (0b0000001 - 0b10000000). Si potrebbero avere al massimo 8 di questi multiplexer collegati tra loro su indirizzi 0x70-0x77 in modo da controllare 64 delle stesse parti indirizzate I2C. Collegando i tre bit di indirizzo A0, A1 e A2 al VIN è possibile ottenere diverse combinazioni degli indirizzi. Spiegherò questo in modo approfondito nel mio prossimo tutorial sulla breakout board TCA9548A. Per ora, basta collegare 8 OLED a questa scheda e dare una rapida occhiata al codice.

Connessione:

VIN a 5V (o 3.3V)

GND a terra

Orologio da SCL a I2C

Dati da SDA a I2C

Quindi collegare i sensori a VIN, GND e utilizzare uno dei bus multiplex SCn / SDn

Ora, il codice Int inizia includendo la libreria "Wire" e definendo l'indirizzo del multiplexer.

#include "Wire.h"

#includere

#define MUX_Address 0x70 // TCA9548A Indirizzo encoder

Quindi dobbiamo selezionare la porta con cui vogliamo comunicare e inviare i dati su di essa utilizzando questa funzione:

void tcaselect(uint8_t i) {

se (i > 7 ritorna);

Wire.beginTransmission(MUX_Address);

Wire.write(1 << i);

Wire.endTransmission();

}

Successivamente inizializzeremo il display nella sezione di configurazione chiamando "u8g.begin();" per ogni display collegato al MUX "tcaselect(i);"

Una volta inizializzato, possiamo quindi fare ciò che vogliamo semplicemente chiamando la funzione "tcaselect(i);" dove "i" è il valore del bus multiplexato e quindi invia i dati e l'orologio di conseguenza.

Passaggio 13: vantaggi e svantaggi

Vantaggi e svantaggi
Vantaggi e svantaggi

L'immagine di un OLED è bellissima. Tuttavia, anche gli OLED hanno

svantaggi. Poiché gli schermi OLED contengono materiale organico, la loro durata è più breve dei display LCD. Inoltre, molti display OLED si bruciano dopo aver mostrato la stessa immagine per molto tempo. Dopo un burn-in, l'immagine rimane sullo schermo anche dopo aver mostrato un'altra immagine. Quindi assicurati di continuare ad aggiornare lo schermo ogni pochi secondi. L'acqua può danneggiare istantaneamente i materiali organici di questi display.

Vantaggi

Non c'è bisogno di una retroilluminazione

I display sono molto sottili e leggeri

Basso consumo energetico

Gli angoli di visualizzazione sono più ampi degli LCD

La luminosità e il contrasto sono fantastici

Alta velocità e tempi di risposta ridotti

Colore nero intenso

Svantaggi

Tecnologia costosa

Ciclo di vita breve

Gli OLED hanno maggiori probabilità di bruciare

Danneggiamento da parte dell'acqua

Passaggio 14: errori comuni

Errori comuni
Errori comuni

Per concludere il tutorial parliamo di alcuni errori comuni

le persone fanno durante l'utilizzo di questi display:

- Controlla sempre tre volte i pin prima di utilizzarlo nel tuo progetto

- Scegli l'indirizzo della libreria corretto nel file di intestazione e nel tuo codice

#define SSD1306_I2C_ADDRESS 0x3C // in Adafruit_SSD1306.h

e

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // nel tuo codice

Se l'indirizzo è sbagliato, l'OLED non visualizzerà nulla

- La dimensione del display deve essere modificata nel driver prima che possa essere utilizzato. Se non viene modificato riceverai un messaggio di errore quando tenti di verificare il codice

#error ("Altezza errata, correggere Adafruit_SSD1306.h!");

- Se usi NodeMCU assicurati di sostituire OLED_RESET da 4 a LED_BUILTIN

#define OLED_RESET LED_BUILTIN

Ho scene di persone che fanno ogni sorta di cose usando questo display OLED. Alcuni hanno persino realizzato videogiochi e tutto il resto. Non sono davvero interessato a realizzare un videogioco usando questo piccolo display. Tuttavia, ora ti lascerò esplorare la tua immaginazione e venire fuori con idee sorprendenti.

Passaggio 15: collegamenti

- Blog:

- Aggiungi immagine:

- Testo personalizzato:

- Libreria di visualizzazione Adafruit:

- Libreria Adafruit GFX:

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

Se vuoi usare il display più piccolo usa il 128_32 di default altrimenti per il display più grande commenta il 128_32 e decommenta il 128X64 NO_ACK nel tuo codice (basta decommentare il tipo di schermo che stai usando) (i caratteri sono nella libreria dei caratteri)

Consigliato: