Il modulo Wemos D1 Mini disponeva già di un piccolo display OLED da 0.66″ montato su uno shield, vedere articolo OLED Shield per Wemos D1 mini, a questo si è aggiunto un display TFT 2.4″ a colori con funzione Touch , risoluzione di 340×240, montato anch’esso su uno Shield.
Per altri shield specifici per Wemos D1 mini vedere l’articolo Wemos D1 mini – Raccolta Shield disponibili
Indice
Caratteristiche
Il Wemos LCD TFT Shield 2.4 Pollici a colori con Touch è stato progettato non solo per essere utilizzato con la scheda WeMos D1 Mini, ma è compatibile anche con la WeMos D1 Mini Pro e Lolin D32 Pro.
Il display offre una risoluzione di 340×240 pixel, è utilizza il driver ILI9341 come controller per il display LCD ed il chip XPT2046 come controller per la funzione touch.
Altre informazioni sul tipo di display potranno essere trovate nell’articolo Display TFT Risoluzione 320×240 2,8″ – ILI9341
L’alimentazione è a 3,3 V c.c. e nel caso sia collegato con il modulo Wemos D1 viene prelevata da quest’ultimo. Le misure dello shield sono 71mm x 43mm.
Il Wemos D1 mini deve essere collegato sul retro del display touch screen TFT da 2,4 “, lasciando tutti i pin GPIO accessibili, grazie alle doppie righe di intestazione.
Dove trovare il display
Il Wemos LCD TFT Shield 2.4 Pollici con Touch per Wemos D1 Mini, può essere acquistato presso il sito Homotix, la versione testata ha un costo di 11,30 € al momento della pubblicazione di questo articolo.
Se lo acquisterete presso il sito potrete usufruire di uno sconto inserendo il codice di sconto ADRIROBOT
Collegamenti
Questa shield può essere collegato al dispositivo di controllo in diversi modi, vediamoli
- Utilizzando i connettori presenti sul lato inferiore della scheda per la connessione con la WeMos D1 Mini
- Collegato alla WeMos Lolin D32 Pro utilizzando l’apposito connettore ed il cavetto a 12pin, acquistabile separatamente e ideale per la connessione anche con altre schede ESP32 o altre dev-board compatibili con questa tipologia di connessione.
- Può essere utilizzato il TFT I2C Connector Shield for WEMOS D1 (che aggiunge anche i connettori per il bus I2C)
Numerazione di pin utilizzati
Questa tabella mostra la mappatura dei pin interni quando utilizzata come shield che collegata ad una scheda esterna.
Per TFT_LED , TFT_RST e TS_CS , questa mappatura può essere modificata chiudendo i ponti di saldatura sul retro del display.
Nota: NC predefinito per TFT_LED significa “retroilluminazione sempre attiva”.
La mappatura dei pin predefinita lascia i pin I2C D1 e D2 , così come D4 , A0 , TX e RX disponibili per altri scopi.
D1 mini | GPIO | Shield |
---|---|---|
NC*(D1/D2/D3/D4) | NC*(5/4/0/2) | TFT_LED |
RST*(D1/D3/D4)) | RST*(5/0/2) | TFT_RST |
D8 | 15 | TFT_DC |
D7 | 13 | MOSI |
D6 | 12 | MISO |
D5 | 14 | SCK |
D0 | 16 | TFT_CS |
D3*(D1/D2/D4) | 0*(5/4/2) | TS_CS |
Libreria per gestire il display
Per utilizzare il LOLIN Display TFT 2.4” abbiamo bisogno in via preliminare di 3 librerie: Adafruit_GFX (Libreria per la gestione della parte grafica), Adafruit_ILI9341 (libreria per la gestione del driver del display) e XPT2046_Touchscreen (libreria per la gestione del driver per la parte touch).
le prime due potranno essere caricate ricercandole con l’apposita funzione dell’IDE
Per quella relativa al driver del Touchscreen, consiglio di utilizzare la funzione che carica il fil zip.
Nel caso venisse segnalato i seguente errore
Occorrerà ricercare anche la libreria Adafruit_BusIO
Occorre inoltre assicurarsi che venga utilizzato il core ESP8266 più recente per Arduino (vedi), altrimenti il display potrebbe non funzionare correttamente
Il pin D0 (GPIO16) non funzionerà quando si utilizza la versione precedente del core ESP8266 per Arduino, la libreria Adafruit_ILI9341 utilizza le funzioni digitalPinToBitMask(), portOutputRegister(), portInputRegister() che nelle vecchie versioni del core ESP8266 per Arduino non funzionano correttamente a causa di alcuni bug (vedi note).
Per questo motivo occorre inserire nella sezione URL aggiuntive per il gestore schede il riferimento alla correzione del bug
per la gestione dei colori che il display può rappresentare, all’interno del file Adafruit_ILI9341.h sono già inserite le definizione di alcuni colori base, questi sono: BLACK, NAVY, DARKGREEN, DARKCYAN, MAROON, PURPLE, OLIVE, LIGHTGREY, DARKGREY, BLUE, GREEN, CYAN, RED, MAGENTA, YELLOW, WHITE, ORANGE, GREENYELLOW, PINK
Alcuni test
Il primo test è stato effettuato per provare la parte grafica
Con un altro Sketch si è testato il funzionamento della funzione Touchscreen
Un test più evoluto è quello che ha coinvolto anche il piccolo shield con il sensore DHT11. Questo può essere collegato direttamente al modulo WeMos D1 Mini
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 |
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_ILI9341.h> #define TFT_CS D0 //for D1 mini or TFT I2C Connector Shield (V1.1.0 or later) #define TFT_DC D8 //for D1 mini or TFT I2C Connector Shield (V1.1.0 or later) #define TFT_RST D1 //for D1 mini or TFT I2C Connector Shield (V1.1.0 or later) #define TS_CS D3 //for D1 mini or TFT I2C Connector Shield (V1.1.0 or later) Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST); #include <DHT.h> #define DHTTYPE DHT11 #define DHTPIN D4 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); delay(10); dht.begin(); tft.begin(); tft.fillScreen(ILI9341_BLACK); tft.setRotation(3); tft.setCursor(0, 0); tft.setTextColor(ILI9341_RED); tft.setTextSize(3); tft.println(" WWW.ADRIROBOT.IT"); tft.println(); tft.setTextSize(2); tft.setTextColor(ILI9341_GREEN); tft.println(" Uso sensore DHT 11"); tft.println(); tft.setTextColor(ILI9341_YELLOW); } void loop(void) { int h = dht.readHumidity(); int t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Fallito lettura dati da sensore DHT!"); return; } tft.fillRect(0,80, 240, 40, ILI9341_BLACK); tft.setCursor(0, 80); tft.print("Temperatura: "); tft.print(t); tft.println(" C"); tft.print("Umidita' : "); tft.print(h); tft.println(" %"); delay (1000); } |