Codice Arduino e video per display OLED SSD1306 128 x 32 con I2C
In questo tutorial esploreremo come usare il display OLED SSD1306 128 x 32 con comunicazione I2C su Arduino. L'obiettivo è visualizzare vari elementi come testo, rettangoli e valori dinamici come tensione e temperatura sullo schermo. Questa configurazione è ideale per progetti che richiedono una soluzione di visualizzazione compatta ed efficiente.

Passeremo in rassegna i componenti hardware necessari, le istruzioni per il cablaggio e il codice Arduino per mettere tutto in funzione. Per una guida visiva, assicurati di guardare il video che accompagna questo tutorial (nel video a 00:00).
Hardware spiegato
I componenti chiave per questo progetto includono il display OLED SSD1306, un modulo a basso consumo che utilizza la comunicazione I2C per un'interfaccia semplice. Il display ha una risoluzione di 128 x 32 pixel, rendendolo adatto alla visualizzazione di testo e grafica semplice.
Per controllare il display, useremo la scheda Arduino, che invierà comandi e dati tramite I2C. L'Arduino gestisce la logica per visualizzare le informazioni utilizzando librerie comeAdafruit_GFXeAdafruit_SSD1306. Queste librerie semplificano il processo di comunicazione e consentono di disegnare facilmente forme e testo.
Dettagli della scheda tecnica
| Produttore | Adafruit |
|---|---|
| Numero di parte | SSD1306 |
| Tensione logica/IO | 3.3 - 5 V |
| Tensione di alimentazione | 3.3 - 5 V |
| Assorbimento di corrente | ~20 mA (tipico) |
| Risoluzione del display | 128 x 32 pixel |
| Interfaccia | I2C |
| Dimensioni | 128 x 32 mm |
| Note / varianti | Disponibili in varie dimensioni e interfacce |
- Verifica l'indirizzo I2C, solitamente 0x3C per gli OLED.
- Assicurarsi che l'alimentazione sia adeguata per evitare danni.
- Usare resistenze di pull-up sulle linee SDA e SCL se necessario.
- Mantieni i collegamenti corti per ridurre il rumore sul segnale I2C.
- Considerare la dissipazione del calore se si alimentano più moduli.
Istruzioni di cablaggio

Per collegare il display OLED SSD1306, prima collega il pin VCC del display all'uscita 5V dell'Arduino. Successivamente, collega il pin GND a uno dei pin di massa (GND) dell'Arduino. Per la comunicazione I2C, collega il pin SDA del display al pin SDA dell'Arduino, che è A4 per l'UNO. Poi collega il pin SCL del display al pin SCL dell'Arduino, che è A5 per l'UNO. Se stai usando un modello di Arduino diverso, fai riferimento alla mappatura specifica dei pin SDA e SCL.
Per componenti aggiuntivi, se hai un LED che vuoi controllare, collegalo al pin 9 tramite una resistenza da 330 ohm. Assicurati di collegare l'altro capo della resistenza all'anodo del LED, mentre il catodo deve andare a massa. Questa configurazione permetterà al LED di accendersi quando il pin 9 viene attivato.
Esempi di codice e guida passo passo
Nel codice Arduino, iniziamo includendo le librerie necessarie per il display OLED. Un identificatore chiave èdisplay, che è un'istanza diAdafruit_SSD1306classe. Il display viene inizializzato insetup()funzione, nella quale cancelliamo anche il display per prepararlo al disegno.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}Nelloop()funzione, definiamo una variabile stringavStringper memorizzare il valore della tensione, che viene aggiornato dinamicamente. IlrobojaxText()La funzione viene utilizzata per visualizzare testo sullo schermo alle coordinate specificate.
void loop() {
String vString = String(count, 3);
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
display.display();
count += 0.173;
delay(2000);
}IlrobojaxText()La funzione è fondamentale per posizionare e visualizzare il testo. Prende come parametri la stringa di testo, le coordinate x e y, la dimensione del testo e un valore booleano per determinare se il display debba essere aggiornato immediatamente.
void robojaxText(String text, int x, int y, int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x, y);
display.println(text);
if(d) {
display.display();
}
}Questa funzione imposta la dimensione del testo, il colore e la posizione del cursore prima di stampare il testo. Ricorda di guardare il video per una spiegazione completa del codice (nel video a 10:00).
Dimostrazione / Cosa aspettarsi
Quando il codice viene caricato sull'Arduino, il display OLED dovrebbe mostrare i valori di tensione, temperatura e capacità aggiornandosi dinamicamente ogni due secondi. Dovresti vedere anche un rettangolo disegnato intorno agli elementi di testo. Se il display non mostra nulla, verifica che le connessioni siano corrette e che l'indirizzo I2C corrisponda a quello specificato nel codice.
Marcatori temporali del video
- 00:00- Introduzione al progetto
- 02:00- Istruzioni per il cablaggio
- 05:00- Revisione del codice
- 10:00- Dimostrazione dell'output
/*
* Questo è un esempio per i nostri OLED monocromatici basati su driver SSD1306.
*
* Questo esempio è per un display di dimensioni 128x32 che utilizza I2C.
*
* Se ricevi l'errore: Adafruit_GFX.h non trovato, scarica la libreria Adafruit-GFX
* https://github.com/adafruit/Adafruit-GFX-Library
*
* Acquista questo modulo OLED su Amazon: https://amzn.to/36zFvTb
*
* Scritto da Limor Fried/Ladyada per Adafruit Industries.
* Licenza BSD, controlla license.txt per ulteriori informazioni.
* Tutto il testo sopra e la schermata di avvio devono essere inclusi in qualsiasi ridistribuzione.
*
* Guarda il video per questo codice per impararlo completamente.
* Guarda il video qui: https://youtu.be/RjyulqVsz2o
* Questo codice è offerto "così com'è" senza alcuna garanzia.
* Aggiornato da Ahmad Shamshiri per il tutorial video di Robojax.com
* il 18 marzo 2018 alle 10:21 ad Ajax, Ontario, Canada.
* Per favore, visualizza altri codici e video di Robojax su http://robojax.com/learn/arduino
* Se condividi questo codice, devi mantenere questa nota di copyright.
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;
/*
* Collegamento PIN:
* Collegamento pin vedi: https://www.arduino.cc/en/Reference/Wire
* per UNO: SDA a A4, SCL a A5
* per Mega2560: SDA a 20, SCL a 21
* per Leonardo: SDA a 2, SCL a 3
* per Due: SDA a 20, SCL a 21
* VCC a 5V
* GND a GND :-)
*/
// queste sono la larghezza e l'altezza del display che sono 128 x 32
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH 128
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
// per impostazione predefinita, genereremo l'alta tensione dalla linea da 3,3 V internamente! (carino!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inizializza con l'indirizzo I2C 0x3C (per il 128x32)
display.display();
delay(2000);
// Svuota il buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3); // utilizzando un float e il
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
robojaxText("V", 110, 3, 1, false);
robojaxText("Temperature: 32C", 4, 11, 1, false);
robojaxText("Capacity: 92.86L", 4, 21, 1, false);
// display.disegnaLinea(1, 37, 100, 37, BIANCO);
display.drawRect(1, 1, 126,31, WHITE);
// display.drawCircle(63,31, 31, BIANCO);
// display.iniziascrolladestra(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String testo, int x, int y, int dimensione, boolean d)
* testo è la stringa di testo da stampare
* x è la posizione intera x del testo
* y è la posizione intera y del testo
* dimensione è la dimensione del testo, 1, 2, 3 ecc
* d è vero o falso. Se vero, il display viene aggiornato.
*/
void robojaxText(String text, int x, int y,int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
if(d){
display.display();
}
// delay(100);
}
Cose di cui potresti avere bisogno
-
AmazonAcquista OLED 128x32 da Amazonamzn.to
-
AliExpressAcquista SSD1306 OLED 128x32 da AliExpresss.click.aliexpress.com
Risorse e riferimenti
-
EsternoLibreria Adafruit-GFX (da GitHub)github.com
-
EsternoLibreria SSD1306 (da GitHub)github.com
File📁
Nessun file disponibile.