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
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#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;
/*
* PIN connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
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.drawLine(1, 37, 100, 37, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
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.