TFT Shield 2.4 ” touch per Wemos D1 mini

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.
Vediamo le sue caratteristiche.

TFT touch Wemos D1

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.

TFT touch Wemos D1Altre informazioni sul tipo di display potranno essere trovate nell’articolo Display TFT Risoluzione 320×240 2,8″ – ILI9341

TFT touch Wemos D1
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.

TFT touch Wemos D1

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.

TFT touch Wemos D1

Se lo acquisterete presso il sito potrete usufruire di uno sconto del 3% inserendo il codice di sconto ADRIROBOT_20

Collegamenti

Questa shield può essere collegato al dispositivo di controllo in diversi modi, vediamoli

TFT touch Wemos D1

  1. Utilizzando i connettori presenti sul lato inferiore della scheda per la connessione con la WeMos D1 Mini

    TFT touch Wemos D1

    Come potete notare i retro di questo shield (versione 1.1.0) è leggermente diverso dalla versione predicente, in particolare riguardo al connettore per il display che nella versione precedente era nella parte superiore, non visibile.

  2. 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.TFT touch Wemos D1
  3. Può essere utilizzato il TFT I2C Connector Shield for WEMOS D1 (che aggiunge anche i connettori per il bus I2C)

TFT touch Wemos D1

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.

TFT touch Wemos D1

D1 miniGPIOShield
NC*(D1/D2/D3/D4)NC*(5/4/0/2)TFT_LED
RST*(D1/D3/D4))RST*(5/0/2)TFT_RST
D815TFT_DC
D713MOSI
D612MISO
D514SCK
D016TFT_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

TFT touch Wemos D1

Con un altro Sketch si è testato il funzionamento della funzione Touchscreen

TFT touch Wemos D1

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

TFT touch Wemos D1

TFT touch Wemos D1

Download Sketch

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>

#define TFT_CS D0
#define TFT_DC D8
#define TFT_RST D1
#define TS_CS D3

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);
}