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.
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.
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.
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.