La libreria U8g2 per i display monocromatici

La U8g2 è una libreria pensata per i dispositivi embedded. Essa supporta i display monocromatici OLEDs e LCDs. Include molti comandi per il tracciamento di figure 2D primitive (linea, cerchio e rettangolo), supporta molti font per la scrittura del testo, senza alcuna limitazione sull'altezza delle lettere ma, ovviamente, necessita di molta memoria a microcontrollore per gestire tali operazioni. Vediamola in dettaglio.

Introduzione

Come detto prima, si tratta di una potente libreria grafica per differenti modelli monocromatici di display OLEDs e LCDs. Oltre a prevedere svariati comandi grafici, essa prevede centinaia di fonts, con cui scrivere testi sul display. Al momento essa supporta i seguenti controller di display: SSD1305, SSD1306, SSD1309, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, T6963, RA8835, LC7981, PCD8544, PCF8812, UC1604, UC1608, UC1610, UC1611, UC1701, ST7565, ST7567, ST7588, NT7534, IST3020, ST7920, LD7032, KS0108, SED1520, SBN1661, MAX7219.

Connessione del display

Per la connessione fisica del display occorre conoscere, innanzitutto, la sua risoluzione e il modello di controller che esso monta a bordo. Le tipologie di display sprovvisti di controller, purtroppo, non sono gestiti dalla libreria. Gli esempi di cablaggio che seguono sono relativi al display dalle misure di 128x64 pixel che monta il controller ST7920. Per utilizzare correttamente un display occorre inizializzarlo attraverso un appropriato "constructor ", ad esempio la seguente funzione predispone un buffer di pagina dalla dimensione di 128 bytes:

U8G2_ST7920_128X64_1_SW_SPI(rotation, clock, data, cs [, reset])

nel caso specifico per il display in questione.

Cablaggio per il bus

L'invio delle informazioni al display avviene attraverso un bus di dati, formato da due o più collegamenti. Esse seguono un preciso protocollo di trasmissione attraverso una serie di specifici comandi. Il bus viene selezionato collegando alcuni specifici pin del display a massa (oV) oppure a Vcc (5V). Ad esempio, nel circuito stampato del modulo oLED SSD1306 vi sono alcune piazzole saldabili, etichettate con BS0, BS1 e BS2, come mostrato in figura 1.

Figura 1: cablaggio del modulo oLED SSD1306

Figura 1: cablaggio del modulo oLED SSD1306

Generalmente i bus configurabili sono i seguenti:

  • 3SPI, 3-wire SPI con tre segnali, Clock, Data and Chip-Select;
  • 4SPI, 4-Wire SPI con quattro segnali, Clock, Data, Chip-Select e una linea addizionale per i comandi e dati;
  • I2C, IIC or TWI con due segnali: Clock (SCL) and Data (SDA);
  • 8080, un bus a 8 bit che richiede ben 8 linee più i segnali per la selezione del chip e dello strobe;
  • 6800: un altro protocollo a 8 bit.

E' consigliabile, comunque, consultare il datasheet del display, come abbiamo sempre ribadito in ogni nostra pubblicazione.

Collegamento del display

Un display può essere collegato a una scheda di sviluppo come, ad esempio, Arduino, ESPertino, Raspberry Pi e mille altre. Questo, ovviamente, per permettere il transito dei dati dalla scheda al display. Per questo motivo occorre utilizzare alcuni pin per il collegamento. Ad esempio, utilizzando la scheda Arduino, un buon schema di collegamento potrebbe essere il seguente:

Pin del Display Pin di Arduino
E, Clock 13
RW, Data, MOSI 11
RS, Chip Select 10
RST, Reset 8

Si ricorda, inoltre, di collegare entrambi i dispositivi alla massa in comune e alimentare il display con la corretta tensione di alimentazione.

Inizializzazione della libreria

Completata la parte hardware è possibile lavorare, adesso, sul software. Il primo passo da compiere è quello d'inizializzare la libreria U8g2. Essa necessita di conoscere, ovviamente, quali sono i pin di uscita della scheda di sviluppo che sono connessi al display. Questo serve per indirizzare chiaramente le porte di lavoro. Occorre specificare correttamente l'ordine dei parametri all'interno del costruttore, secondo il seguente modello:

U8G2_ST7920_128X64_1_SW_SPI(rotation, clock, data, cs [, reset])

I parametri sono, quindi, i seguenti, rispettando l'ordine:

  • La rotazione;
  • Il pin di clock;
  • Il pin dei dati;
  • Il pin CS;
  • L'eventuale pin di reset.

Per esempio, un valido utilizzo del costruttore è il seguente:

U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, 13, 11, 10, 8);

Ecco alcuni esempi di costruttori, validi anche per altri display e tipologie di bus:

  • U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI;
  • U8G2_SSD1306_128X64_VCOMH0_1_4W_SW_SPI;
  • U8G2_SH1106_128X64_VCOMH0_1_4W_SW_SPI;
  • U8G2_SH1106_128X64_VCOMH0_1_SW_I2C;
  • U8G2_SSD1306_128X32_UNIVISION_2_4W_HW_SPI;
  • U8G2_SSD1306_64X48_ER_1_8080;
  • U8G2_SSD1325_NHD_128X64_F_2ND_4W_HW_SPI;
  • U8G2_SSD1327_SEEED_96X96_2_SW_I2C;
  • U8G2_UC1608_ERC24064_1_4W_SW_SPI;
  • e molti altri.

E' disponibile una lunga lista con tutti i costruttori possibili, circa un centinaio. Il seguente esempio mostra come scrivere un testo sul display, il classico "Hello World!", in modo molto semplice, come mostrato anche in figura 2.

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, 13, 11, 10, 8);
void setup(void) {
  u8g2.begin();
}
void loop(void) {
  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_ncenB14_tr);
    u8g2.drawStr(0,24,"Hello World!");
  } while ( u8g2.nextPage() );
}

Le varie costanti per la scelta dei font, della rotazione e degli altri parametri sono contenute nel file d'inclusione "U8g2lib.h".

Figura 2: visualizzazione di un testo sul display

Figura 2: visualizzazione di un testo sul display

Le modalità di visualizzazione

La libreria U8g2 sopporta tre tipologie di visualizzazione, differenti tra loro per modo grafico e risorse impiegate:

  • Modalità a pieno schermo;
  • Modalità pagina;
  • Modalità a solo carattere (U8x8).

Modalità a pieno schermo

Questa modalità di funzionamento risulta essere molto veloce e prevede tutte le procedure e funzioni per il disegno (vedi figura 3) e la visualizzazione dei dati. L'unico neo è quello di richiedere un considerevole ammontare di memoria RAM. Occorre eseguire l'inizializzazione con il seguente costruttore:

U8G2_ST7920_128X64_ F _SW_SPI(rotation, clock, data, cs [, reset])
Figura 3: utilizzo della grafica

Figura 3: utilizzo della grafica

Modalità pagina

Tale modalità è lenta ma esige poca memoria RAM e prevede tutte le funzionalità grafiche. Il relativo costruttore è il seguente:

U8G2_ST7920_128X64_ 1 _SW_SPI(rotation, clock, data, cs [, reset])

Modalità a solo carattere (U8x8)

Infine, in modo testo, la gestione avviene in maniera estremamente veloce ma senza grafica. Non utilizza alcuna memoria RAM ma è disponibile solo per alcuni modelli di display. Un esempio di costruttore è il seguente:

U8X8_ST7565_EA_DOGM128_4W_SW_SPI(clock, data, cs, dc [, reset])

Conclusione

E' possibile approfondire l'argomento con la consultazione dei files d'inclusione e lo studio delle sintassi delle varie funzioni.

 

2 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 25 luglio 2018
  2. Giovanni Di Maria Giovanni Di Maria 25 luglio 2018

Scrivi un commento

EOS-Academy