top of page
  • Immagine del redattoreRobNico

Arduino display OLED 128x64

Aggiornamento: 19 feb 2020


In questa post vedremo come utilizzare un display OLED con l’Arduino UNO.

Il display che utilizzeremo in questo articolo ha una risoluzione di 128×64 pixel ed è molto piccolo 0,96 pollici. Vuol dire uno schermo che misura circa 2.5 cm per 1.3 cm, ha un solo colore (bianco e nero). I display OLED ci permettono di visualizzare informazioni per i nostri progetti, come ad esempio temperatura, pressione, tensione ecc. Il tipo di tecnologia utilizzato consente di avere questi display molto luminosi, molto sottili e dal consumo ridotto, la buona risoluzione fa si che anche delle scritte con caratteri molto piccoli restino ben visibili.


Il display utilizzato in questa prova e del tipo con interfaccia a due fili I2C, come si vede nella foto ha solo 4 pin, positivo (VCC) e massa (GND) di alimentazione a 5 volt dc, e i due fili dell’interfaccia seriale SCL (serial clock) e SDA serial data., Il driver che pilota il display è un SSD1306, tensione di alimentazione dai 3,3V ai 6V circa.


Materiale Software:


Colleghiamo il display all’Arduino UNO come da immagine:


Adesso bisogna scoprire l’indirizzo I2C del display, per farlo ci viene in aiuto un piccolo codice chiamato I2C scanner (https://playground.arduino.cc/Main/I2cScanner). Esso cercherà gli indirizzi I2C dei dispositivi connessi tramite I2C all’Arduino e li invierà tramite seriale. Caricatelo su Arduino IDE e aprite la finestra del monitor seriale, impostate 9600 baud e dovreste avere una cosa simile a questa: (possiamo caricarlo anche dalla cartella esempi / wire / scanner)


Una volta terminato apriamo il monitor seriale dove ci verrà visualizzato un risultato del genere:


In questo caso, l’indirizzo del display è “0x3C”. Prendiamone nota e proseguiamo con il prossimo passo.

Installiamo le librerie necessarie andando su sketch > #include libreria> gestione librerie. Nel box di ricerca cerchiamo “adafruit GFX“, clicchiamo sul risultato “Adafruit GFX library” e installiamo l’ultima versione. Ripetiamo l’operazione per la libreria “Adafruit SSD1306” sempre installando l’ultima versione.

Ora sarà necessario impostare alla libreria Adafruit SSD1306 il tipo di display che stiamo utilizzando (con quale risoluzione), per assicurare il corretto funzionamento del display. Per farlo abbiamo bisogno di aprire la cartella in cui sono salvate le librerie di Arduino. In Windows: apriamo l’esplora file e andiamo in documenti > arduino > libraries.


Una volta arrivati alla lista di librerie apriamo la cartella “Adafruit_SSD1306” e apriamo il file “Adafruit_SSD1306.h” con Notepad++. Raggiungiamo la riga, dove vedremo le seguenti righe:


// ONE of the following three lines must be #defined:

//#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen

#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen

//#define SSD1306_96_16 ///< DEPRECATED: old way to specify 96x16 screen


Di default la risoluzione abilitata è quella di 128×32. Per modificarla in quella utilizzata dal display che stiamo usando cioè (128×64) sarà necessario modificare la riga “#define SSD1306_128_32” e rimuovere il commento alla riga “// #define SSD1306_128_64” in questo modo:


// ONE of the following three lines must be #defined:

#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen

//#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen

//#define SSD1306_96_16 ///< DEPRECATED: old way to specify 96x16 screen


Salviamo e chiudiamo il tutto, ora apriamo l'IDE di arduino ed incolliamo e carichiamo il seguente codice modificando l’indirizzo I2C annotato in precedenza . Caricando questo codice sull’Arduino, verrà visualizzata sul display la scritta “ArduRob Robotica Educativa” per modificarla ci basterà modificare la stringa all’interno dell’istruzione “display.println(“ ”);.


 

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);

#if (SSD1306_LCDHEIGHT != 64)

#error("Height incorrect, please fix Adafruit_SSD1306.h!");

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Impostare l'indirizzo i2c annotato in precedenza

display.clearDisplay(); //Pulisce il buffer da inviare al display

display.setTextSize(2); //Imposta la grandezza del testo

display.setTextColor(WHITE); //Imposta il colore del testo (Solo bianco)

display.setCursor(0,0); //Imposta la posizione del cursore (Larghezza,Altezza)

display.println("ArduRob"); //Stringa da visualizzare

display.setTextSize(1); //Imposta la grandezza del testo

display.println("Robotica Educativa"); //Stringa da visualizzare

display.display(); //Invia il buffer da visualizzare al display

}

void loop() {

}


 

Il testo viene creato nella posizione in cui si trova il cursore, in questo caso è impostato sulle coordinate 0 lunghezza e 0 altezza del display. Per spostarlo e quindi posizionare il testo altrove o aggiungerne degli altri, è necessario modificare l’istruzione “display.setCursor(0,0);” modificando il primo 0 il cursore verrà spostato attraverso l’asse x (lunghezza), il secondo 0 invece sposterà il cursore attraverso l’asse y (altezza). Il punto 0,0 si troverà in alto a sinistra del display.

Inoltre è possibile modificare la grandezza del testo cambiando il valore dell’istruzione “display.setTextSize(1);” modificando il valore 1 la grandezza del testo cambierà.


Ecco alcune funzioni che ti aiuteranno a gestire la libreria display OLED per scrivere testo o disegnare grafica semplice.


display.clearDisplay () - tutti i pixel sono spenti

display.drawPixel (x, y, color) - traccia un pixel nelle coordinate x, y

display.setTextSize (n) - imposta la dimensione del carattere, supporta le dimensioni da 1 a 8

display.setCursor (x, y) - imposta le coordinate per iniziare a scrivere il testo

display.print ("message") - stampa i caratteri nella posizione x, y


In questo prossimo codice vediamo un progetto che mostra le letture di temperatura e umidità sul display OLED, usando il sensore di temperatura e umidità DHT11


Per completare questo progetto sono necessari i seguenti componenti:


Display OLED da 0,96 pollici

Arduino Uno

Sensore di temperatura e umidità DHT11

breadboard

Resistenza da 4.7k Ohm (o resistore da 10k Ohm )

Fili di ponticello


Assemblare il circuito seguendo il prossimo schema elettrico.


Nota: se stai usando un modulo con un sensore DHT, normalmente viene fornito con solo tre pin. I pin dovrebbero essere etichettati in modo da sapere come collegarli. Inoltre, molti di questi moduli sono già dotati di un resistore di pull up interno, quindi non è necessario aggiungerne uno al circuito.


Per questo progetto è necessario aggiungere la libreria per il sensore DHT che puoi scaricare qui.

Dopo aver installato tutte le librerie necessarie, puoi caricare il seguente codice.


 

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <DHT.h>


#define DHTPIN 2

#define DHTTYPE DHT11

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);


// Initialize DHT sensor

DHT dht(DHTPIN, DHTTYPE);


void setup() {

Wire.begin();

dht.begin();

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// Impostare l'indirizzo i2c

}


void displayTempHumid(){

delay(2000);

// La lettura della temperatura o dell'umidità

float h = dht.readHumidity();

// Leggi la temperatura come Celsius

float t = dht.readTemperature();

// Leggi la temperatura come Fahrenheit

float f = dht.readTemperature(true);


// Verifica se le letture non sono riuscite ed esci in anticipo (per riprovare).

if (isnan(h) || isnan(t) || isnan(f)) {

display.clearDisplay(); // cancellare il display

display.setTextColor(WHITE); //impostazione del colore

display.setTextSize(1); //imposta la dimensione del carattere

display.setCursor(5,0); //imposta le coordinate del cursore

display.print("Impossibile leggere dal sensore DHT!");

return;

}

display.clearDisplay();

display.setTextColor(WHITE);

display.setTextSize(1);

display.setCursor(0,0);

display.print("Umidita: ");

display.print(h);

display.print(" %\t");

display.setCursor(0,20);

display.print("Temperatura: ");

display.print(t);

display.print(" C");

display.setCursor(0,40);

display.print("Temperatura: ");

display.print(f);

display.print(" F");

}

void loop() {

displayTempHumid();

display.display();

}


 

Dopo aver cablato il circuito e caricato il codice, il display OLED mostra le letture di umidità e temperatura (entrambe in gradi Celsius e Fahrenheit). Le letture del sensore vengono aggiornate sul display ogni due secondi.



 

2.324 visualizzazioni0 commenti

Post recenti

Mostra tutti

Kommentare


bottom of page