Questo piccolo display misura solamente 30×24 mm, la diagonale è di 0,96″ (area 13,7 x21,7 mm) con una risoluzione di display 80×160 pixel, driver ST7735, full colors (65K).
Il display è del tipo In-Plane Switching o IPS. Il collegamento è effettuato tramite un’interfaccia SPI.
Vedere anche l’articolo Display IPS 1.3″ 240×240/ST7789 – Arduino
Indice
Caratteristiche del modulo display 80×160 ST7735
- LCD IPS da 0,96″ con ampio angolo di visione di ±80°
- Display RGB a colori
- Display 80×160 ad alta risoluzione
- Area: 13,7×21.7mm
- Dimensioni modulo: 30x24x12 m
- Interfaccia SPI
- Controller display ST7735
- Tensione di alimentazione 3,3 V
Interfaccia SPI
Questo display incorpora un interfaccia SPI che fornisce aggiornamenti rapidi del display.
Poiché è un dispositivo di sola scrittura, non è necessario che la SPI MISO sia collegata.
L’interfaccia è dotata del pin CS (Chip Select ) che permette di avere altri dispositivi SPI sullo stesso bus contemporaneamente.
Connettore del modulo
La connessione al display avviene tramite un header a 8 pin.
PIN | Descrizione |
---|---|
GND | Pin GND in comune con l'MCU. |
VCC | Pin alimentazione 3,3 V. Da MCU o da fonte esterna |
SCL | SPI SCL (Clock) |
SDA | SPI MOSI (Dati) |
RES | Ripristino LCD, necessario una volta dopo l'accensione |
DC | Dati/Comando. Determina il tipo di dati da inviare al display. HIGH= Comando, LOW = Dati |
CS | SPI data/command selection pin |
BLK | Controllo retroilluminazione. Se scollegato è sempre attiva |
Schema elettrico del modulo
Lo schema del modulo display 80×160 ST7735 è molto semplice
Video di presentazione
Display a colori TFT ST7735 160×128 – 1.77″ – SPI
Un display basato sul driver ST7735 era già stato utilizzato per il display utilizzato con la scheda Arduino ESPLORA. In quel caso la sua misura è di 1,77″ di diagonale, con risoluzione di 160 x 128 pixel.
Per ulteriori informazioni vedere il link.
Libreria per driver ST7735
Per gestire il display si dovranno utilizzare alcune librerie, sotto riportate:
La prima libreria Arduino-ST7735 potrà essere installata tramite il gestore della libreria Arduino IDE ricercando “Arduino-ST7789”. La libreria è compatibile anche con display che utilizzano il driver ST7735.
Al momento dell’installazione vi sarà chiesto di aggiungere anche la libreria Adafruit seesaw, cliccare su Install all.
A fine installazione vi sarà data conferma
La seconda libreria è quella grafica Adafruit che può essere installata tramite il gestore della libreria Arduino IDE ricercando “gfx“.
Per informazioni su come fare, vedere l’articolo Arduino – Tutorial, come installare una libreria
Gestione del display
Nei demo della libreria ci sono vari esempi che contengono le istruzioni per i due tipi di driver e per il collegamento a varie schede di controllo. Per il collegamento con Arduino sono sufficienti le impostazioni sottostanti.
I 2 file di libreria sono inclusi nel codice principale come mostrato di seguito, l’inclusione della libreria Arduino SPI è facoltativa!
1 2 3 | #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789 #include <SPI.h> |
Le connessioni dei pin del modulo TFT ST7735 (CS, RST e DC) sono definite come mostrato di seguito.
Gli altri pin del display (SDA e SCL) sono collegati ai pin SPI hardware di Arduino (pin digitale 11 e pin digitale 13).
1 2 3 | #define TFT_CS 10 // pin CS #define TFT_RST 8 // pin RESET pin #define TFT_DC 9 // pin Data/Command |
La libreria Adafruit ST7735 viene inizializzata con questa riga:
1 | Adafruit_ST7735 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); |
Infine, il display TFT viene inizializzato utilizzando il seguente comando:
1 | tft.initR(INITR_MINI160x80); // Init ST7735S mini display |
Test di base del display
Materiale utilizzato per il test di base
Sotto sono riportati i componenti minimi per il test del display 80×160 ST7735
Display 80×160 ST7735 | |
Cavi di collegamento |
Collegamento del display
Il modulo display 80×160 ST7735 funziona a 3,3 V. Il modulo non è dotato di un proprio regolatore da 3,3 V e quindi deve essere alimentato direttamente con 3,3 V.
Sul retro del modulo si trovano: un transistor con la sigla J3Y (S8050 – datasheet), alcuni resistori, e un condensatore che forniscono il controllo della retroilluminazione.
Il pin BLK può essere lasciato scollegato, in questo caso si lascerà sempre accesa la retroilluminazione.
Sotto è riportato lo schema dei collegamenti con la scheda Arduino.
Si è utilizzata una scheda 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.
Altra particolarità: alla scheda possono essere collegati dispositivi, nel nostro caso il display, alimentati a 3,3V o a 5V, un deviatore permette di scegliere la tensione disponibile sui pin.
Nel caso si utilizzi un normale Arduino è necessario utilizzare un convertitore di livello logico bidirezionale. La sua funzione è di convertire livelli logici da 5 V a 3,3 V e viceversa.
Lo schema è molto semplice, di solito formato da un MOSFET a canale N, tipo BSS138 e una coppia di resistori pull-up per realizzare lo spostamento di livello bidirezionale. Per realizzarne uno a più canali occorre ripetere lo schema più volte.
Per maggiori informazioni vedere l’articolo Convertitore di livello logico bidirezionale 4 canali. Sfortunatamente, il display ha cinque ingressi di segnale da 3,3 V e gli shifter di livello hanno di solito al massimo quattro canali.
In questo caso si è inserita una resistenza limitatrice ad 1kΩ sulla linea SCL.
Sketch utilizzato
Sotto è riportato lo sketch utilizzato per i test, in questo caso delle sole funzioni di testo.
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 | #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735 #include <SPI.h> #define TFT_CS 10 // pin CS #define TFT_RST 8 // pin RESET pin #define TFT_DC 9 // pin Data/Command #define WHITE 0xFFFF #define BLACK 0x0000 #define BLUE 0xF800 #define BRED 0XF81F #define GRED 0XFFE0 #define GBLUE 0X07FF #define RED 0x001F #define MAGENTA 0xF81F #define GREEN 0x07E0 #define CYAN 0x7FFF #define YELLOW 0xFFE0 #define BROWN 0XBC40 #define BRRED 0XFC07 #define GRAY 0X8430 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); void setup(void) { Serial.begin(9600); tft.initR(INITR_MINI160x80); // Init ST7735S mini display tft.setRotation(3); } void loop() { tft.fillScreen(BLACK); tft.setTextSize(2); tft.setCursor(0, 0); tft.setTextColor(RED); tft.println("TEST DI PROVA"); delay (1000); tft.setCursor(0, 20); tft.setTextColor(GRAY); tft.println("Displ.ST7735"); tft.setTextColor(BLUE); tft.setCursor(15, 40); tft.println("160x80 RGB"); delay (500); tft.setTextSize(1); tft.setCursor(30, 70); tft.setTextColor(GREEN); tft.println("WWW.ADRIROBOT.IT"); delay (1000); } |
Realizziamo un orologio con termometro
Un esempio di utilizzo del display è la realizzazione di un orologio con termometro. I principali componenti utilizzati sono oltre al display 80×160 ST7735:
- Un Real-Time Clock Module DS1302
- Un sensore analogico di temperatura LM35
Real-Time Clock Module DS1302
Il Modulo RTC con DS1302 si collega ad Arduino tramite un interfaccia SPI, fornisce le informazioni relative a secondi, minuti, ore, giorno, data, mese e anno.
La fine del data mese viene regolata automaticamente per mesi con meno di 31 giorni e viene corretto l’anno bisestile, l’orologio funziona nei formati 12 ore e 24 ore con indicazione AM/PM.
Il chip DS1302 integra 31 bytes di RAM statica, è progettato per funzionare con una potenza molto bassa, meno di 1μW e prevede due alimentazioni: VCC2 per l’alimentazione principale e VCC1 per la batteria.
L’interfacciamento del DS1302 con un microprocessore è semplificata dall’utilizzo di una interfaccia seriale, per la comunicazione con l’orologio e la RAM sono utilizzati i pin CE, I/O e SCLK.
I dati possono essere trasferiti dall’orologio alla RAM 1 byte alla volta oppure in un unico invio da 31 bytes.
Per maggiori informazioni vedere l’articolo Real-Time Clock Module DS1302 con Arduino
Sensore analogico di temperatura LM35
Il sensore di temperatura utilizzato si basa sul sensore lineare LM35 a semiconduttore. Può essere utilizzato per rilevare la temperatura dell’aria ambiente.
Questo sensore offre un intervallo funzionale compreso tra 0 e 100 gradi Celsius. La sensibilità è di 10 mV per grado Celsius. La tensione di uscita è proporzionale alla temperatura.
In questo caso il sensore è Ks0022 keyestudio LM35 Linear Temperature Sensor
Sotto è riportato un esempio di gestione del sensore, il valore della tensione letto tramite la porta di ingresso analogico viene poi convertito nel valore di temperatura utilizzando come riferimento la tensione di alimentazione che può essere 5 o 3,3V.
Nel caso specifico, per la particolarità della scheda utilizzata, la tensione di alimentazione sarà di 5V ma quella di riferimento, usata per la conversione, sarà di soli 3.3V.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | int tempC; float temperatura; int tempPin = A0; void setup() { Serial.begin(9600); } void loop() { tempC = analogRead(tempPin); //read the value from the sensor temperatura = (3.3 * tempC * 100.0) / 1024.0; //convert the analog data to temperature Serial.print("Temperatura - "); Serial.print(temperatura, 1); Serial.println(" °C"); delay(1000); } |
Materiale utilizzato
Sotto sono riportati i componenti minimi per il test del display 80×160 ST7735
Display IPS 80×160 | |
Real-Time Clock Module DS1302 |
Modulo sensore LM35 |
Cavi di collegamento |
Schema dei collegamenti
Noterete una particolarità, l’alimentazione del modulo non è presa dai canonici pin +5V e GND ma dai pin digitali D2 (+5V) e D3 (GND).
Per questo motivo dopo averli impostati come OUTPUT, tramite il comando digitalWrite il pin D3 che è collegato a GND del modulo viene portato a livello LOW, mentre il pin D2 collegato a VCC del modulo viene portato a livello HIGH,
Codice utilizzato
Sotto è riportato il codice utilizzato.
Per impostare l’orologio occorre inserire almeno una volta le informazioni che saranno memorizzate e mantenute poi tramite l’alimentazione fornita dalla batteria.
Per fare questo occorrerà togliere il segno di commento alle linee sotto riportate e inserire i dati del momento in cui si trasferirà il programma nella memoria di Arduino. Ricordandosi poi di commentarle nuovamente o cancellarle.
1 2 3 4 5 | // Le seguenti linee possono essere commentate per utilizzare // i valori già memorizzati nel DS1302 rtc.setDOW(SATURDAY); // Imposta il giorno della settimana rtc.setTime(16, 36, 0); // Imposta l'ora (Formato 24hr) rtc.setDate(1, 09, 2022); // Imposta la data |
Segue il listato del programma completo
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735 #include <DS1302.h> //Libreria RTC #include <SPI.h> #include <Wire.h> #define VCC 2 // +5V #define GND 3 // GND #define TFT_CS 10 // pin CS #define TFT_RST 8 // pin RESET pin #define TFT_DC 9 // pin Data/Command #define WHITE 0xFFFF #define BLACK 0x0000 #define BLUE 0xF800 #define BRED 0XF81F #define GRED 0XFFE0 #define GBLUE 0X07FF #define RED 0x001F #define MAGENTA 0xF81F #define GREEN 0x07E0 #define CYAN 0x7FFF #define YELLOW 0xFFE0 #define BROWN 0XBC40 #define BRRED 0XFC07 #define GRAY 0X8430 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); // Creazione oggetto RTC DS1302 rtc(6, 5, 4); //Impostazione LM35 int tempC; float temperatura; int tempPin = A0; void setup(void) { pinMode(VCC, OUTPUT); // imposta 'VCC' come output pinMode(GND, OUTPUT); // imposta 'GND' come output digitalWrite(VCC, HIGH); // Portiamo VCC a 5V digitalWrite(GND, LOW); // Portiamo GND a 0V delay (500); // Imposta RTC in run-mode e disabilita la protezione da scrittura rtc.halt(false); rtc.writeProtect(false); // Imposta la comunicazione seriale Serial.begin(9600); // Le seguenti linee possono essere commentate per utilizzare // i valori già memorizzati nel DS1302 //rtc.setDOW(SATURDAY); // Imposta il giorno della settimana //rtc.setTime(16, 36, 0); // Imposta l'ora (Formato 24hr) //rtc.setDate(1, 09, 2022); // Imposta la data tft.initR(INITR_MINI160x80); // Init ST7735S mini display tft.setRotation(3); tft.fillScreen(BLACK); } void loop() { // // Invia giorno della settimana // Serial.print(rtc.getDOWStr()); // Serial.print(" "); // // // Invia data // Serial.print(rtc.getDateStr()); // Serial.print(" -- "); // // // Invia ora // Serial.println(rtc.getTimeStr()); // Scrive i valori sul display tft.fillScreen(BLACK); tft.setTextSize(2); data (); // Scrive su LCD la data ora (); // Scrive su LCD l'ora temp(); // Scrive temperatura logo (); // Scrive logo // Aspetta un secondo prima di ripetere delay (1000); } void data () { tft.setCursor(10, 0); tft.setTextColor(RED); tft.print(rtc.getDOWStr()); tft.print(" "); tft.print(rtc.getDateStr(1)); } void ora() { tft.setCursor(35, 20); tft.setTextColor(BLUE); tft.print(rtc.getTimeStr()); } void temp() { tempC = analogRead(tempPin); //lettura sensore //conversione temperatura = (3.3 * tempC * 100.0) / 1024.0; tft.setCursor(15, 45); tft.setTextColor(BROWN); tft.print("Temp. "); tft.print(temperatura, 1); tft.print((char)247); //mostra il carattere gradi } void logo() { tft.setTextSize(1); tft.setCursor(30, 70); tft.setTextColor(GREEN); tft.println("WWW.ADRIROBOT.IT"); } |
Altri moduli display
Panoramica di altre tipologie di display utilizzati nei vari progetti presenti sul sito. Dai più semplici LCD 16×2, passando per i TFT con touch screen e quelli tipo OLED.