Für ein neues Projekt, habe ich mir ein 1.8" TFT Display ST7735R für das Arduino bestellt.

Was ich damit genau bauen möchte, werde ich in einem weiteren Beitrag zeigen. Zuerst einmal hat es mich ganz schön lange beschäftigt, das Display überhaupt ans Laufen zu bekommen.

Arduino 1.8 TFT Display ST7735R

Verkabelung

Wie ihr sehen könnt, sind bei meinem Display die Pins:

RST, CS, D/C, DIN, CLK, VCC, BL und GND

angelötet.

Allerdings hat gefühlt, das ganze Internet, das Display welches NC, CS, MOSIN, MISO, CLK, usw... verwendet. Diese Pins sind bei mir zwar auf der Platine, allerdings nicht angelötet. Ob sie funktionieren würden, wenn ich sie selber belege, habe ich nicht geteset.

Nach einer längeren Suche im Internet, habe ich jedoch gefunden, wie ich das ganze anschließen muss.

TFT Display Arduino UNO
RST 7
CS 9
D/C 8
DIN 11
CLK 13
VCC +5V
BL +3.3V
GND GND

Wichtig: Die Pins RST, CS, D/C, DIN und CLK müssen über einen 1kΩ Widerstand geführt werden! Das Display überlebt keine 5Volt auf diesen Pins, die das Arduino UNO hat.

Die richtige Library finden

Ich habe zwei getestet.

1. Das Libraries_v7.zip von HIER. Dies hat bei mir funktioniert. Das ganze habe ich auf meinem MacBook getestet.

2. Auf meinem Windows PC nutze ich DIESE Library.

Das ich zwei Libraries nutze hat keinen wirklichen Grund. Ich hatte nur ein paar durchprobiert, bis das Display endlich ging. Zusätzlich sind einige Tage vergangen, befor ich den Blogbeitrag geschrieben hatte.

Display Testen

Als erstes habe ich das enthaltene Beispiel Adafruit_ST7735_AS/examples/TFT_Rainbow_ST7735.ino geteset, um zu überprüfen ob das Display überhaupt funktioniert. Dies ist mit der 1. Library gemacht.

Arduino 1.8 TFT Display ST7735R Rainbow Beispiel

Der erste eigene Versuch

Auf meinem Windows PC habe ich dann ein kleines Programm geschrieben, um eigene Daten auf dem TFT Display anzuzeigen. Wie oben erwähnt, nutze ich unter Windows die 2. Library.

Arduino 1.8 TFT Display ST7735R Spielerei Wie man erkennen kann, soll das ganze noch ausgebaut werden. Darauf werde ich aber in einem neuen Beitrag nochmal zurückkommen.

// DHT22 Struct
struct Humidity {
  float humidity;
  float temperature;
};

//TFT Settings
#include <TFT_ST7735.h>
#include <SPI.h>


#include "DHT.h"


#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

TFT_ST7735 tft = TFT_ST7735();

void setup(void) {

  Serial.begin(9600);
  dht.begin();

  tft.init();
  tft.setRotation(1);
  tft.fillScreen(ST7735_BLACK);

}

void loop() {
  struct Humidity humidity;

  humidity = getHumidity();


  displayTemperature(humidity);
  displayHumidity(humidity);
  delay(2000);
}


Humidity getHumidity() {
  struct Humidity humidity;
  humidity.humidity =  dht.readHumidity();
  humidity.temperature = dht.readTemperature();

  return humidity;
}

void displayTemperature(Humidity humidity) {
  tft.setCursor(0, 0, 1);

  //tft.fillRoundRect(0, 0, 64, 80, 5, ST7735_WHITE);
  tft.drawRoundRect(0, 64, 80, 62, 1, ST7735_BLUE); //x,y,w,h

  tft.setCursor(5, 65, 2);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.print("Temperatur");

  int color = TFT_BLUE;
  if (humidity.temperature >= 19) {
    color = TFT_GREEN;
  }
  if (humidity.temperature >= 25) {
    color = TFT_YELLOW;
  }
  if (humidity.temperature >= 27) {
    color = TFT_RED;
  }

  tft.setCursor(7, 85, 4);
  tft.setTextColor(color, TFT_BLACK);
  tft.print(humidity.temperature);

  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.drawCircle(65, 115, 2, TFT_WHITE);
  tft.setCursor(70, 115, 1); //x,y
  tft.print("C");
}

void displayHumidity(Humidity humidity) {
  tft.setCursor(0, 0, 1);

  //tft.fillRoundRect(0, 0, 64, 80, 5, ST7735_WHITE);
  tft.drawRoundRect(79, 64, 78, 62, 1, ST7735_BLUE); //x,y,w,h

  tft.setCursor(95, 65, 2); //85
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.print("Humidity");

  int color = TFT_GREEN;

  if (humidity.humidity >= 50) {
    color = TFT_YELLOW;
  }
  if (humidity.humidity >= 60) {
    color = TFT_RED;
  }

  tft.setCursor(87, 85, 4);
  tft.setTextColor(color, TFT_BLACK);
  tft.print(humidity.humidity);

  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setCursor(148, 115, 1); //x,y
  tft.print("%");
}

PS: Den SD-Karten Slot habe ich noch nicht getestet und werde ich wohl auch so schnell nicht testen. Sehe da im Moment keinen Einsatzzweck für.