Alla ricerca di un display TFT per un mio progetto con Arduino, ho trovato in vendita su diversi siti cinesi dei display basati sul chip ST7735 di Sitronix (datasheet).
Il chip ST7735 offre una interfaccia SPI (Serial Peripheral Interface) ma la piedinatura dei display che ho ricevuto “sembra” riportare i classici PIN del bus I2C (SDA, SCL…):
Si tratta in realtà solo di una nomenclatura poco corretta; il significato dei PIN è il seguente:
- SDA -> MOSI (segnale Master Out Slave In del bus SPI)
- SCL -> SCK (segnale di clock del bus SPI)
- CS -> SS (segnale di Slave Select del bus SPI)
- RST -> reset
- DC -> Data/Command (pin utilizzato per distinguere l’invio di dati o comandi al display)
- BLK -> Backlight (abilita la retro-illuminazione)
Una volta noto il significato dei diversi PIN, il collegamento ad Arduino è semplice.
Per prima cosa identifichiamo – in base alla nostra scheda Arduino – quali PIN corrispondono ai segnali del bus SPI. Per gli altri, possiamo scegliere liberamente tra i PIN liberi.
Ad esempio per un Arduino Uno ho effettuato i seguenti collegamenti:
(come vedete, ho collegato il pin BLK direttamente a Vcc per tenere sempre accesa la retro-illuminazione. E’ anche possibile collegarlo ad un PIN di Arduino per poterla controllare via software, ad esempio per esigenze di power saving).
Per comandare il display, dobbiamo utilizzare una apposita libreria. La mia preferenza va a quelle sviluppate da Adafruit, in particolare:
- Adafruit-GFX-Library per la visualizzazione di elementi grafici (testo, forme, immagini) sullo schermo
- Adafruit-ST7735-Library per il controllo del nostro particolare display
Le due librerie – installabili tramite il Library Manager dell’IDE di Arduino – lavorano insieme per consentirci di utilizzare al meglio il display.
Adafruit ha preparato un ottimo tutorial per il loro utilizzo, qui vi voglio solo indicare come configurare il display rispetto ai collegamenti che vi ho riportato sopra:
#define TFT_CS 10 #define TFT_RST 2 #define TFT_DC 3 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); |
Ecco in esecuzione l’esempio “graphictest” fornito insieme alla libreria: