Nei progetti elettronici è spesso necessario visualizzare dati e informazioni in modo chiaro e immediato.
In questo articolo analizzeremo il modulo Crowtail OLED SSD1306 di Elecrow, un piccolo display grafico da 128×64 pixel semplice da utilizzare sia con Arduino che ESP32.
il Crowtail–OLED è una soluzione pratica ed economica. Questo display comunica tramite interfaccia I²C e permette di mostrare testi, simboli e semplici grafiche con un’eccellente leggibilità.
La tecnologia OLED garantisce immagini nitide e ben leggibili senza necessità di retroilluminazione, offrendo un elevato contrasto, bassi consumi e un’ottima visibilità anche da angolazioni elevate.
È particolarmente indicato per dashboard, strumenti di misura e interfacce utente compatte.

Indice
Caratteristiche del Crowtail OLED 128×64
- Colore di visualizzazione: Blu/Nero;
- Risoluzione: 128 × 64;
- Interfaccia: I2C;
- Tensione: 5V (3.3V vedi nota nella descrizione del circuito);
- Ampio intervallo di temperatura operativa: da −20°C a 70°C;
- Dimensioni (mm): 40.0 (L) × 20.0 (W) × 11.5 (H).
Link utili forniti dal venditore
Dove trovare il Crowtail OLED SSD1306
Il Crowtail OLED SSD1306 può essere acquistato presso il sito della Elecrow, il suo costo al momento della scrittura del post si aggira sui 4 €
Il display è contenuto all’interno in una bustina plastica richiudibile
![]() |
![]() |
Nella busta troviamo:
- 1 x OLED Crowtail
- 1 x Cavo tipo Crowtail 4 Pin
Descrizione dello schema elettrico del modulo OLED
Lo schema del modulo Crowtail OLED 128×64 è composto da due sezioni principali:
- Il circuito di gestione del display OLED SSD1306 (U1)
- Il regolatore di tensione MIC5205‑3.3 (U2) che fornisce l’alimentazione a 3,3 V necessaria al display.

Sezione display OLED – SSD1306 (U1)
Il cuore del circuito è il controller grafico SSD1306, utilizzato in moltissimi display OLED 128×64.
Necessita di alcuni componenti esterni per stabilizzare alimentazione e segnali.
Resistenze
R3 – 7 kΩ Pull‑up per la linea SDA (I2C)
R4 – 10 kΩ Pull‑up per la linea SCL (I2C)
R5 – 4,7 kΩ Pull‑up aggiuntivo o resistenza di configurazione (dipende dalla variante del modulo)
Queste resistenze garantiscono che le linee I2C siano correttamente mantenute allo stato logico alto quando non attive.
Condensatori
C1 – 1 µF
C2 – 1 µF
C3 – 4,7 µF
Sono condensatori di bypass e filtraggio, utilizzati per stabilizzare la tensione di alimentazione del display e ridurre il rumore elettrico.
Diodi
Diodo D1 – 1N4148
Un diodo di segnale molto veloce, nel contesto del display, può servire come protezione sulla linea di alimentazione.
Sezione alimentazione – regolatore MIC5205‑3.3 (U2)
Il display SSD1306 richiede 3,3 V, quindi lo schema include un regolatore di tensione dedicato.
Quello utilizzato è un MIC5205‑3.3, regolatore LDO (Low Dropout), uscita fissa 3,3 V.
Fornisce una corrente massima tipica: 150 mA, rumore molto basso
Richiede alcuni condensatori esterni per stabilità
C8 – 10 µF (ingresso) Stabilizza la tensione in ingresso (VCC_IN)
C9 – 10 µF (uscita) Stabilizza la tensione di uscita (3,3 V)
C10 – 100 nF (bypass) Collegato al pin BYP per ridurre il rumore e migliorare la stabilità
Pin principali del MIC5205
VIN → ingresso da VCC_IN
VOUT → uscita regolata a 3,3 V
GND → massa
EN → enable (attiva/disattiva il regolatore)
BYP → collegamento al condensatore C10 per riduzione rumore
Nota: I moduli basati su chip SSD1306 sono generalmente progettati per funzionare sia a 3,3 V sia a 5 V. Tuttavia, in questo specifico schema, Elecrow ha inserito un regolatore di tensione a 3,3 V: questo suggerisce che l’alimentazione prevista sul connettore debba essere superiore (tipicamente 5 V). Poiché il display SSD1306 lavora normalmente con una logica compresa tra 1,65 V e 3,3 V, il regolatore integrato garantisce il corretto funzionamento del modulo, come confermato anche dai test effettuati.
Collegamenti principali del circuito
Sul connettore J1 sono presenti i 4 pin di collegamento
- Le linee SDA e SCL sono mantenute a livello logico alto (pull-up) verso 3,3 V tramite apposite resistenze VCC e GND per l’alimentazione

Libreria di gestione per il display OLED
Per utilizzare il display OLED è necessario installare l’apposita libreria. Può essere cercata tra le librerie installabili nell’IDE, basterà inserire nel campo di ricerca “Adafruit_SSD1306“.
Sarà anche mostrata una finestra che segnala che la libreria ha una dipendenza con la libreria grafica “Adafruit GFX Library“. Procedete premendo su “Install all”.
Per altre informazioni su come installare le librerie vedete l’articolo Arduino – Tutorial, come installare una libreria
Alcuni test del display
Vediamo adesso due prove del display, una collegandolo a un ESP32-C3 Supermini e una usando un Arduino UNO o equivalente.
Collegamento Crowtail OLED SSD1306 con Arduino
Proviamo ora il nostro display collegandolo ad Arduino. Sotto lo schema dei collegamenti.


NOTA: Nel test è stata utilizzata, al posto della scheda Arduino UNO, una scheda KS0486 Keyestudio PLUS completamente compatibile con l’ambiente di sviluppo Arduino IDE. Contiene tutte le funzioni della scheda Arduino UNO R3 e alcuni miglioramenti che ne rafforzano notevolmente la funzione.
Sulla scheda sono presenti dei connettori per collegare direttamente i moduli. È possibile configurare i pin digitali per lavorare a una tensione di 3.3V evitando così di dover ricorrere a un traslatore di livello o l’inserimento di resistenze. La sezione di alimentazione è in grado di erogare 5V 2A.
In questo caso si è utilizzato lo specifico connettore I2C.

Codice utilizzato
#include
#include
#include
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char* lines[] =
{
"Test Crowtail-OLED",
"Driver SSD1306-I2C",
"di ELECROW",
"WWW.ADRIROBOT.IT"
};
const int totalLines = 4;
const int lineHeight = 14;
const int startY = 10;
char buffer[50];
void drawCenteredText(int y, const char *text)
{
int16_t x1, y1;
uint16_t w, h;
display.getTextBounds(text, 0, y, &x1, &y1, &w, &h);
int x = (SCREEN_WIDTH - w) / 2;
display.setCursor(x, y);
display.print(text);
}
void setup()
{
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println("SSD1306 non trovato");
while (1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop()
{
for (int l = 0; l < totalLines; l++)
{
int len = strlen(lines[l]);
for (int i = 1; i <= len; i++)
{
display.clearDisplay();
// Disegna le righe già completate
for (int k = 0; k < l; k++)
{
drawCenteredText(
startY + (k * lineHeight),
lines[k]);
}
// Disegna la riga corrente progressivamente
strncpy(buffer, lines[l], i);
buffer[i] = '\0';
drawCenteredText(
startY + (l * lineHeight),
buffer);
display.display();
delay(40);
}
delay(100);
}
delay(1000);
}

Collegamento Crowtail OLED SSD1306 con ESP
Vediamo ora un’applicazione leggermente più complessa. Realizzeremo un semplice orologio/datario utilizzando un ESP32-C3 Supermini, potete trovare maggiori informazioni nell’articolo ESP32-C3 SuperMini e Expansion board

Precisione di un orologio sincronizzato tramite NTP
La precisione dell’orologio è dato utilizzando il protocollo NTP (Network Time Protocol) che consente di sincronizzare l’orologio interno dell’ESP32 con il server di riferimento su Internet.
In una tipica rete Wi-Fi domestica:
- Precisione rispetto al server NTP: 10-100 ms
- In condizioni ottimali: 1-10 ms
- Risoluzione dell’ora restituita dall’ESP32: fino ai microsecondi, ma la precisione reale dipende dalla rete.
Quindi un orologio NTP è perfetto per:
- visualizzare data e ora;
- registrare eventi;
- sincronizzare dispositivi.
Codice dell’orologio/datario
Sotto il codice utilizzato, prima di caricarlo nella memoria del dispositivo ricordarsi di inserire i dati di configurazione della vostra rete WI-FI.
Il codice è ben commentato e dovrebbe essere comprensibile
/* --------------------
CONFIGURAZIONE WIFI
--------------------- */
const char* ssid = "NOME_WIFI";
const char* password = "PASSWORD_WIFI";
#include
#include
#include
#include
#include "time.h"
// Dimensioni display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Pin I2C ESP32-C3 SuperMini
#define I2C_SDA 8
#define I2C_SCL 9
// Oggetto display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
/* --------------------
CONFIGURAZIONE WIFI
--------------------- */
const char* ssid = "NOME_WIFI";
const char* password = "PASSWORD_WIFI";
// Server NTP
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600; // Italia: +1h
const int daylightOffset_sec = 3600; // Ora legale
void setup() {
Serial.begin(115200);
// Inizializzazione I2C
Wire.begin(I2C_SDA, I2C_SCL);
// Inizializzazione display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Errore display SSD1306");
while (true)
;
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// Connessione WiFi
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Connessione WiFi...");
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
display.print(".");
display.display();
}
display.clearDisplay();
display.setCursor(0, 0);
display.println("WiFi connesso!");
display.display();
delay(1000);
// Configurazione NTP
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}
void loop() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Errore NTP");
display.display();
delay(1000);
return;
}
char ora[16];
char data[16];
strftime(ora, sizeof(ora), "%H:%M:%S", &timeinfo);
strftime(data, sizeof(data), "%d/%m/%Y", &timeinfo);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(10, 10);
display.println(ora);
display.setTextSize(1);
display.setCursor(25, 40);
display.println(data);
display.setCursor(15, 55);
display.println("WWW.ADRIROBOT.IT");
display.display();
delay(1000);
}
Raccolta display LCD, TFT, OLED, E-paper
Una panoramica delle varie tipologie di display utilizzati nei vari progetti presenti sul sito.
Dai più semplici LCD 16×2, 7 segmenti a led, passando poi per i TFT con touch screen , quelli tipo OLED.
I link rimandano alle varie sezioni in cui i vari display sono descritti e in qui sono presenti progetti che li utilizzano









