/**************************************************************************
*
* ESP8266 NodeMCU (ESP-12E)mit ST7735S TFT Display (128x160 Pixel)
* und BME280 Luftdruck-, Temperatur- und Feuchtigkeitssensor.
*
*************************************************************************/
#include <Wire.h> // einbinden von Wire library (wird für I2C-Geräte benötigt)
#include <Adafruit_GFX.h> // einbinden von Adafruit graphics library
#include <Adafruit_ST7735.h> // einbinden von Adafruit ST7735 TFT library
#include <Adafruit_BME280.h> // einbinden von Adafruit BME280 sensor library
// LED Setup
int LEDrot = D0; // -> GPIO16
int LEDblau = D3; // -> GPIO0
// ST7735 TFT Modul
#define TFT_RST -1 // TFT-RST-Pin ist verbunden mit dem RST-Pin vom ESP8266
#define TFT_CS D8 // TFT-CS-Pin ist verbunden mit dem Pin D8 (GPIO15)
#define TFT_DC D4 // TFT-DC-Pin ist verbunden mit dem Pin D4 (GPIO2)
// Display-Objekt anlegen -> tft
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// I2C-Adresse für BME280 festlegen: 0x76 oder 0x77 (Achtung: 0x77 ist die Standard-Adresse)
#define BME280_I2C_ADDRESS 0x76
// Sensor-Objekt anlegen -> bme280
Adafruit_BME280 bme280;
void setup(void)
{
//LED initialisieren -> LED aus
pinMode(LEDrot, OUTPUT); // Pin D0 ist ein Ausgang.
pinMode(LEDblau,OUTPUT); // Pin D3 ist ein Ausgang.
digitalWrite(LEDrot, LOW); // Schalte die LED an Pin D0 aus. D0 ist beim Start des ESP8266 auf HIGH.
digitalWrite(LEDblau, LOW); // Schalte die LED an Pin D3 aus.
//TFT-Display initialisieren
tft.initR(INITR_BLACKTAB); // ST7735S initialisieren
tft.fillScreen(ST7735_BLACK); // Displayfläche mit Farbe füllen
tft.drawFastHLine(0, 30, tft.width(), ST7735_WHITE); // horizontale Linie an Position (0, 30) zeichnen
tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // Textfarbe (weiss auf schwarz)setzen
tft.setTextSize(1); // Textgröße = 1
tft.setCursor(4, 1); // Cursor auf Pixelposition (4, 1) setzen
tft.print("ESP8266 + ST7735 TFT");
tft.setCursor(19, 15); // Cursor auf Pixelposition (19, 15) setzen
tft.print("WETTER STATION");
// BME280 Sensor initilisieren
Wire.begin(D2, D1); // I2C Pins setzen [SDA = D2, SCL = D1], Taktrate ist 100kHz
if( bme280.begin(BME280_I2C_ADDRESS) == 0 )
{ // Rückmeldung Verbindungsfehler oder falsche Geräteadresse!
tft.setTextColor(ST7735_RED, ST7735_BLACK); // Textfarbe (rot auf schwarz)setzen
tft.setTextSize(2); // Textgröße = 2
tft.setCursor(5, 76); // Cursor auf Pixelposition (5, 76) setzen
tft.print("Connection");
tft.setCursor(35, 100); // Cursor auf Pixelposition (35, 100) setzen
tft.print("Error");
while(1) // Warten
delay(1000);
}
tft.drawFastHLine(0, 76, tft.width(), ST7735_WHITE); // horizontale Linie bei (0, 76)
tft.drawFastHLine(0, 122, tft.width(), ST7735_WHITE); // horizontale Linie bei (0, 122)
tft.setTextColor(ST7735_RED, ST7735_BLACK); // Textfarbe (rot auf schwarz)setzen
tft.setCursor(25, 39); // Cursor auf Pixelposition (25, 39) setzen
tft.print("TEMPERATUR =");
tft.setTextColor(ST7735_CYAN, ST7735_BLACK); // Textfarbe (cyan auf schwarz) setzen
tft.setCursor(25, 85); // Cursor auf Pixelposition (25, 85) setzen
tft.print("LUFTFEUCHTE =");
tft.setTextColor(ST7735_GREEN, ST7735_BLACK); // Textfarbe (grün auf Schwarz) setzen
tft.setCursor(25, 131); // Cursor auf Pixelposition (25, 131) setzen
tft.print("LUFTDRUCK =");
tft.setTextSize(2); // Textgröße = 2
// print °C
tft.drawCircle(89, 56, 2, ST7735_YELLOW); // Kreis für Grad-Zeichen ( ° )
tft.setCursor(95, 54); // Cursor auf Pixelposition (95, 54) setzen
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // Textfarbe (gelb auf schwarz) setzen
tft.print("C");
}
// Hauptprogramm
void loop()
{
// Sensorwerte vom BME280 auslesen
float temp = bme280.readTemperature(); // Temperatur in °C
float humi = bme280.readHumidity(); // Luftfeuchte in %
float pres = bme280.readPressure(); // Luftdruck in Pa
// Daten auf Display ausgeben
// 1: Temperatur (in °C)
tft.setCursor(11, 54);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // Textfarbe (gelb auf schwarz) setzen
if(temp < 0) // wenn temp < 0
tft.printf( "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
else // temp >= 0
tft.printf( " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );
// 2: Luftfeuchte (in %)
tft.setCursor(23, 100);
tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK); // Textfarbe (magenta auf schwarz) setzen
tft.printf( "%02u.%02u %%", (int)humi, (int)(humi * 100) % 100 );
// 3: Luftdruck (in hPa)
tft.setCursor(3, 146);
tft.setTextColor(0xFD00, ST7735_BLACK); // Textfarbe (orange auf schwarz) setzen
tft.printf( "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100) );
tft.setCursor(91, 146);
tft.print("hPa");
delay(5000); // Display aktualisieren
}
Comments