Sommario:
- Passaggio 1: cose che impareremo oggi
- Passaggio 2: requisiti hardware
- Passaggio 3: cos'è un display OLED?
- Passaggio 4:
- Passaggio 5: sguardo più ravvicinato
- Passaggio 6: libreria
- Passaggio 7:
- Passaggio 8: cablaggio 128 X 64/32 OLED
- Passaggio 9: codice
- Passaggio 10: personalizzazione del testo e aggiunta di immagini
- Passaggio 11: collegamento di 2 display
- Passaggio 12: collegamento di più di 2 display
- Passaggio 13: vantaggi e svantaggi
- Passaggio 14: errori comuni
- Passaggio 15: collegamenti
Video: Display OLED I2C Tutorial Arduino/NodeMCU: 15 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
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
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?
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:
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
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
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:
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
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
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
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
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
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
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
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:
Arduino e VL53L0X Time-of-Flight + Tutorial display OLED: 6 passaggi
Arduino e VL53L0X Time-of-Flight + Tutorial display OLED: In questo tutorial impareremo come visualizzare la distanza in mm utilizzando il sensore Time-of-Flight VL53L0X e il display OLED.Guarda il video
Display LCD I2C / IIC - Utilizzare un display LCD SPI sul display LCD I2C utilizzando il modulo SPI su IIC con Arduino: 5 passaggi
Display LCD I2C / IIC | Utilizzare un display LCD SPI per il display LCD I2C utilizzando il modulo da SPI a IIC con Arduino: Ciao ragazzi poiché un normale LCD 1602 SPI ha troppi fili da collegare, quindi è molto difficile interfacciarlo con arduino ma c'è un modulo disponibile sul mercato che può convertire il display SPI in display IIC, quindi è necessario collegare solo 4 fili
Come controllare il display Oled I2C con Arduino: 9 passaggi (con immagini)
Come controllare il display Oled I2C con Arduino: questo è un tutorial molto semplice su come controllare il display Oled I2C con Arduino Se ti piace questo Instructable Iscriviti al mio canale https://www.youtube.com/ZenoModiff
Display LCD I2C / IIC - Converti un LCD SPI nel display LCD I2C: 5 passaggi
Display LCD I2C / IIC | Convertire un display LCD SPI in display LCD I2C: l'utilizzo del display lcd spi richiede troppe connessioni, il che è davvero difficile da fare, quindi ho trovato un modulo che può convertire l'affissione a cristalli liquidi i2c all'affissione a cristalli liquidi spi quindi iniziamo
Arduboy Clone con Arduino Nano e display Oled I2C: 3 passaggi
Arduboy Clone con Arduino Nano e display I2C Oled: una versione economica del clone di Arduboy con cui puoi giocare a una serie di giochi Arduboy originali