Questo display monocromo 128×32 I2C OLED prodotto dalla Adafruit (codice prodotto 931) presenta diagonale di 1″ , ma è molto leggibile grazie all’alto contrasto di un display OLED.
Il modulo è simile a quello presente nell’articolo Display OLED 0.91″ 128×32 pixel – SSD1306
Indice
Descrizione
Il display presenta 128×32 singoli pixel bianchi OLED, ciascuno è acceso o spento dal chip controller. In questo caso non è richiesta alcuna retroilluminazione e questo riduce l’assorbimento di potenza necessaria.
L’integrato pilota è il modello SSD1306 (datasheet) che comunica tramite il protocollo I2C. Sono necessari solo 3 pin per comunicare con il chip sul display OLED, due dei quali sono il pin I2C dati / clock. Il display OLED e il driver richiedono un’alimentazione di 3,3 V e 3,3 V sono i livelli logici per la comunicazione.
Caratteristiche
Dimensioni: | PCB : 20mm x 35mm ( 0.8 " x 1.4" ) |
Area di visualizzazione : | 7 x 25 mm |
Spessore : | 4mm |
Diagonale del monitor : | 0.91 " |
Numero di pixel : | 128 × 32 |
Profondità colore : | Monocromatico (Bianco) |
Modulo di costruzione : | COG |
Modulo Dimensioni ( mm ) : | 46.30 × 11.50 × 1.45 |
Dimensioni del pannello ( mm ) : | 30.00 × 11.50 × 1.45 |
Area attiva ( mm ) : | 22,384 × 5,584 |
Pixel Pitch ( mm ) : | 0.175 × 0.175 |
Formato Pixel ( mm ) : | 0,159 × 0,159 |
Duty : | 1/32 |
Luminosità ( cd/m2 ) : | 150 ( Typ ) @ 7.25V |
Interfaccia: | I2C |
Indirizzo I2C: | 7 bit 0x3C - 0x3D , selezionabile con ponticelli |
Modulo compatibile
Un modulo compatibile all’OLED 128×32 I2C Adafruit è quello analizzato in questo articolo Display OLED 0.91″ 128×32 pixel – SSD1306
Circuito elettrico
Per rendere più semplice il collegamento del display OLED 128×32 I2C Adafruit, è stato aggiunto un regolatore di tensione a 3.3V e un traslatore di livello, questo lo rende compatibile con qualsiasi microcontrollore a 5V come Arduino, resta comunque possibile alimentarlo a 3.3V utilizzando il pin disponibile sul connettore.
I requisiti di alimentazione dipendono un po’ da quanto del display è acceso ma in media il display assorbe circa 20mA dalla rete di alimentazione 3.3V
La sezione del display/processore è basata sull’integrato SSD1306 (Datasheet) che è un single-chip CMOS driver per display tipo OLED / PLED ( Organic Light Emitting Diode, Polymer light-emitting diodes).
Questa sezione del circuito permette di traslare i livelli tra i 3.3 e i 5V. Sono utilizzati dei transistor FET tipo BSS138 (Datasheet)
La sezione alimentatrice formata dal regolatore tipo RT9193 (Datasheet) di tipo LDO Ultra-Low Noise, Ultra-Fast che fornisce in uscita 3,3V con 300mA di corrente
Connettore d’ingresso con i pin di alimentazione e d’interfaccia
Collegamento del display ad Arduino
Il collegamento è molto semplice, basterà seguire quanto visibile nella foto sottostante
Libreria di gestione
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 “Install all”.
Per altre informazioni su come installare le librerie potete leggere Arduino – Tutorial, come installare una libreria
Semplice programma di test
Tra gli esempi della libreria potrete trovare un programma test che mostrerà molti effetti visivi. L’immagine seguente è un breve programma che mostra dei testi, l’effetto è visibile nel breve video
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); } void loop() { // Cancellazione schermo e buffer display.clearDisplay(); display.display(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.println("www.adrirobot.it"); display.setTextColor(BLACK, WHITE); display.println("TEST OLED 128x32"); display.setTextColor(WHITE); display.setTextSize(2); display.println("ABCDEFGHIL"); display.display(); delay(2000); display.clearDisplay(); display.setCursor(0, 0); display.println("123456789"); display.println("abcdefghi"); display.display(); delay(2000); } |
Creazione bitmap
È possibile creare un’immagine bitmap da visualizzare utilizzando il programma LCD Assistant.
LCD Assistant è uno strumento gratuito per la conversione di bitmap monocromatici per matrici di dati di facile utilizzo con programmi per sistemi embedded con microcontrollori e display grafici LCD monocromatici.
In primo luogo si dovrà creare la vostra immagine utilizzando un qualsiasi tipo di software di grafica come Photoshop o Paint, il formato dovrà essere di 128×32, e salvare come Monocrome Bitmap (bmp).
Per convertire un’immagine da un file bitmap in array di dati selezionare dal comando di menu File “Load image“.
Nel campo Size deve apparire le dimensioni del display, nel nostro caso Width 128 e Height 32, nel campo Pixel/byte lasciare indicato 8.
Nel capo Table name indicare il nome che sarà poi da indicare nel programma.
A questo punto si potrà salvare il file selezionando il comando dal menu “File ” “Salva output” . L’array di dati sarà salvato con il nome del file specificato
Quindi, basterà copiare il file nel progetto e utilizzare il nome dell’array come parametro per la funzione che visualizza bitmap sul display LCD.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); // metti qui la bitmap. const unsigned char PROGMEM adrirobot[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x8F, 0xFE, 0x3F, 0xF8, 0x63, 0xFF, 0x0F, 0xFF, 0x1F, 0xF8, 0x7F, 0xF9, 0xFF, 0xE0, 0x07, 0xFF, 0x9F, 0xFF, 0x3F, 0xF8, 0x67, 0xFF, 0x0F, 0xFF, 0xBF, 0xFC, 0x7F, 0xF9, 0xFF, 0xE0, 0x06, 0x03, 0x9C, 0x03, 0x3F, 0xF8, 0x67, 0xFF, 0x0C, 0x03, 0xB0, 0x1C, 0x60, 0x18, 0x0F, 0xE0, 0x06, 0x01, 0x9C, 0x03, 0x30, 0x18, 0x66, 0x03, 0x0C, 0x03, 0xB0, 0x0C, 0x60, 0x18, 0x0F, 0xE0, 0x06, 0x01, 0x9C, 0x03, 0x30, 0x18, 0x66, 0x03, 0x0C, 0x03, 0xB0, 0x0C, 0x60, 0x18, 0x0E, 0x00, 0x06, 0x01, 0x9C, 0x03, 0x30, 0x18, 0x66, 0x03, 0x0C, 0x03, 0xB0, 0x0C, 0x60, 0x18, 0x0C, 0x00, 0x06, 0x01, 0x9C, 0x03, 0x30, 0x18, 0x66, 0x03, 0x0C, 0x03, 0xB0, 0x0C, 0x60, 0x18, 0x0C, 0x00, 0x06, 0x01, 0x9C, 0x03, 0x30, 0x18, 0x66, 0x03, 0x0C, 0x03, 0xB0, 0x0C, 0x60, 0x18, 0x0C, 0x00, 0x06, 0x01, 0x9C, 0x03, 0x30, 0x18, 0x67, 0x03, 0x0C, 0x03, 0xB0, 0x0C, 0x60, 0x18, 0x0C, 0x00, 0x07, 0xFF, 0x9C, 0x03, 0x3F, 0xFE, 0x67, 0xFF, 0xCC, 0x03, 0xBF, 0xFC, 0x60, 0x18, 0x0C, 0x00, 0x07, 0xFF, 0xDC, 0x03, 0x3F, 0xFE, 0x77, 0xFF, 0xCC, 0x03, 0xBF, 0xFE, 0x60, 0x18, 0x0C, 0x00, 0x0F, 0xFF, 0xDE, 0x03, 0x3C, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xBF, 0xFE, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDE, 0x03, 0x38, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xB8, 0x06, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDE, 0x03, 0x38, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xB8, 0x06, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDE, 0x03, 0x38, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xB8, 0x06, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDE, 0x03, 0x38, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xB8, 0x06, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDE, 0x03, 0x38, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xB8, 0x06, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDE, 0x03, 0x38, 0x06, 0x77, 0x80, 0xCC, 0x07, 0xBC, 0x06, 0x60, 0x38, 0x0C, 0x00, 0x0E, 0x01, 0xDF, 0xFF, 0x38, 0x06, 0x77, 0x80, 0xCF, 0xFF, 0xBF, 0xFE, 0x7F, 0xF8, 0x0C, 0x00, 0x0E, 0x01, 0xCF, 0xFF, 0x38, 0x06, 0x77, 0x80, 0xCF, 0xFF, 0x3F, 0xFE, 0x7F, 0xF8, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #if(SSD1306_LCDHEIGHT !=32) #error("Height incorrect,please fix Adafruit_SSD1306.h!"); #endif void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //inizializzare con I2C addr 0x3C (per il 128x32) display.clearDisplay(); display.drawBitmap(0, 0, adrirobot, 128, 32, WHITE); display.display(); } void loop() { } |
Esempio di utilizzo – Articoli in cui si parla del display
Tra i vari articoli che ho scritto per il blog Elettronica Open Source, due hanno avuto tra i protagonisti il display OLED 128×32 I2C Adafruit, sotto una breve riassunto del contenuto
L’Evaluation Kit XMC 2GO di Infineon come scheda sensori per i robot ROBI
Molti lettori sapranno che dal 16 gennaio 2014 è in vendita, presso le edicole, l’opera ROBI edita dalla DeAgostini, la cui vendita on-line, invece, era già iniziata l’11 novembre 2013. Venduta a fascicoli, permette la costruzione di un piccolo robot umanoide alto 34 cm, i movimenti del corpo sono dati da 20 servomotori digitali, mentre una scheda di riconoscimento vocale, gli permette di comprendere dei comandi e rispondere a tono in lingua italiana.
Il robot non dispone, però, di sensori quali: temperatura, luminosità, controllo del consumo della batteria, una possibilità era di realizzare un piccolo modulo da inserire all’interno del corpo del robot.
L’occasione è arrivata con il contest dal titolo “50 schede in regalo basate su ARM Cortex: Infineon premia le vostre idee” che offre l’opportunità di ricevere scheda XMC 2GO un Evaluation Kit per microcontrollore basata su un XMC1100.
INA219: il sensore di corrente/tensione per monitorare un motore al lavoro
Il sensore tipo INA219 prodotto dalla Texas Instruments, permette di misurare la tensione e la corrente fornite da una fonte di energia, nel nostro caso una batteria, comunicando i dati mediante un’interfaccia I2C.
L’integrato controlla sia la caduta shunt sia la tensione di alimentazione, con tempi di conversione e filtraggio programmabili. I dati vengono mostrati su un piccolo display di tipo OLED, anch’esso connesso tramite l’interfaccia I2C.
Nell’articolo, ne vedremo l’utilizzo per controllare il funzionamento di un piccolo motore elettrico. Per la sua gestione, si è utilizzato un modulo Arduino, rendendo il dispositivo facile da programmare usufruendo delle librerie già disponibili. Vedere anche l’articolo Come misurare corrente/tensione con il sensore INA219