Advertisement
RaspBar

ESP8266_BME280_ST7735.ino

Jul 6th, 2022 (edited)
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.29 KB | None | 0 0
  1. /**************************************************************************
  2.  *
  3.  * ESP8266 NodeMCU (ESP-12E)mit ST7735S TFT Display (128x160 Pixel)
  4.  * und BME280 Luftdruck-, Temperatur- und Feuchtigkeitssensor.
  5.  *
  6.  *************************************************************************/
  7.  
  8. #include <Wire.h>              // einbinden von Wire library (wird für I2C-Geräte benötigt)
  9. #include <Adafruit_GFX.h>      // einbinden von Adafruit graphics library
  10. #include <Adafruit_ST7735.h>   // einbinden von Adafruit ST7735 TFT library
  11. #include <Adafruit_BME280.h>   // einbinden von Adafruit BME280 sensor library
  12.  
  13. // LED Setup
  14. int LEDrot = D0; // -> GPIO16
  15. int LEDblau = D3; // -> GPIO0
  16.  
  17. // ST7735 TFT Modul
  18. #define TFT_RST   -1     // TFT-RST-Pin ist verbunden mit dem RST-Pin vom ESP8266
  19. #define TFT_CS    D8     // TFT-CS-Pin ist verbunden mit dem Pin D8 (GPIO15)
  20. #define TFT_DC    D4     // TFT-DC-Pin ist verbunden mit dem Pin D4 (GPIO2)
  21.  
  22. // Display-Objekt anlegen -> tft
  23. Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
  24.  
  25. // I2C-Adresse für BME280 festlegen: 0x76 oder 0x77 (Achtung: 0x77 ist die Standard-Adresse)
  26. #define BME280_I2C_ADDRESS  0x76
  27. // Sensor-Objekt anlegen -> bme280
  28. Adafruit_BME280  bme280;
  29.  
  30. void setup(void)
  31. {
  32.   //LED initialisieren -> LED aus
  33.   pinMode(LEDrot, OUTPUT);    // Pin D0 ist ein Ausgang.
  34.   pinMode(LEDblau,OUTPUT);    // Pin D3 ist ein Ausgang.
  35.   digitalWrite(LEDrot, LOW);  // Schalte die LED an Pin D0 aus. D0 ist beim Start des ESP8266 auf HIGH.
  36.   digitalWrite(LEDblau, LOW); // Schalte die LED an Pin D3 aus.
  37.  
  38.   //TFT-Display initialisieren
  39.   tft.initR(INITR_BLACKTAB);        // ST7735S initialisieren
  40.   tft.fillScreen(ST7735_BLACK);     // Displayfläche mit Farbe füllen
  41.   tft.drawFastHLine(0, 30,  tft.width(), ST7735_WHITE);   // horizontale Linie an Position (0, 30) zeichnen
  42.  
  43.   tft.setTextColor(ST7735_WHITE, ST7735_BLACK);  // Textfarbe (weiss auf schwarz)setzen
  44.   tft.setTextSize(1);               // Textgröße = 1
  45.   tft.setCursor(4, 1);              // Cursor auf Pixelposition (4, 1) setzen
  46.   tft.print("ESP8266 + ST7735 TFT");
  47.   tft.setCursor(19, 15);            // Cursor auf Pixelposition (19, 15) setzen
  48.   tft.print("WETTER STATION");
  49.  
  50.   // BME280 Sensor initilisieren
  51.   Wire.begin(D2, D1);               // I2C Pins setzen [SDA = D2, SCL = D1], Taktrate ist 100kHz
  52.   if( bme280.begin(BME280_I2C_ADDRESS) == 0 )
  53.   {  // Rückmeldung Verbindungsfehler oder falsche Geräteadresse!
  54.     tft.setTextColor(ST7735_RED, ST7735_BLACK);   // Textfarbe (rot auf schwarz)setzen
  55.     tft.setTextSize(2);             // Textgröße = 2
  56.     tft.setCursor(5, 76);           // Cursor auf Pixelposition (5, 76) setzen
  57.     tft.print("Connection");
  58.     tft.setCursor(35, 100);         // Cursor auf Pixelposition (35, 100) setzen
  59.     tft.print("Error");
  60.     while(1)  // Warten
  61.       delay(1000);
  62.   }
  63.  
  64.   tft.drawFastHLine(0, 76,  tft.width(), ST7735_WHITE);   // horizontale Linie bei (0, 76)
  65.   tft.drawFastHLine(0, 122,  tft.width(), ST7735_WHITE);  // horizontale Linie bei (0, 122)
  66.   tft.setTextColor(ST7735_RED, ST7735_BLACK);             // Textfarbe (rot auf schwarz)setzen
  67.   tft.setCursor(25, 39);                                  // Cursor auf Pixelposition (25, 39) setzen
  68.   tft.print("TEMPERATUR =");
  69.   tft.setTextColor(ST7735_CYAN, ST7735_BLACK);            // Textfarbe (cyan auf schwarz) setzen
  70.   tft.setCursor(25, 85);                                  // Cursor auf Pixelposition (25, 85) setzen
  71.   tft.print("LUFTFEUCHTE =");
  72.   tft.setTextColor(ST7735_GREEN, ST7735_BLACK);           // Textfarbe (grün auf Schwarz) setzen
  73.   tft.setCursor(25, 131);                                 // Cursor auf Pixelposition (25, 131) setzen
  74.   tft.print("LUFTDRUCK =");
  75.   tft.setTextSize(2);                                     // Textgröße = 2
  76.   // print °C
  77.   tft.drawCircle(89, 56, 2, ST7735_YELLOW);               // Kreis für Grad-Zeichen ( ° )
  78.   tft.setCursor(95, 54);                                  // Cursor auf Pixelposition (95, 54) setzen
  79.   tft.setTextColor(ST7735_YELLOW, ST7735_BLACK);          // Textfarbe (gelb auf schwarz) setzen
  80.   tft.print("C");
  81.  
  82. }
  83.  
  84. // Hauptprogramm
  85. void loop()
  86. {
  87.   // Sensorwerte vom BME280 auslesen
  88.   float temp = bme280.readTemperature();    // Temperatur in °C
  89.   float humi = bme280.readHumidity();       // Luftfeuchte in %
  90.   float pres = bme280.readPressure();       // Luftdruck in Pa
  91.  
  92.   // Daten auf Display ausgeben
  93.  
  94.   // 1: Temperatur (in °C)
  95.   tft.setCursor(11, 54);
  96.   tft.setTextColor(ST7735_YELLOW, ST7735_BLACK);  // Textfarbe (gelb auf schwarz) setzen
  97.   if(temp < 0)    // wenn temp < 0
  98.     tft.printf( "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
  99.   else            // temp >= 0
  100.     tft.printf( " %02u.%02u", (int)temp, (int)(temp * 100) % 100 );
  101.  
  102.   // 2: Luftfeuchte (in %)
  103.   tft.setCursor(23, 100);
  104.   tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK);  // Textfarbe (magenta auf schwarz) setzen
  105.   tft.printf( "%02u.%02u %%", (int)humi, (int)(humi * 100) % 100 );
  106.  
  107.   // 3: Luftdruck (in hPa)
  108.   tft.setCursor(3, 146);
  109.   tft.setTextColor(0xFD00, ST7735_BLACK);  // Textfarbe (orange auf schwarz) setzen
  110.   tft.printf( "%04u.%02u", (int)(pres/100), (int)((uint32_t)pres % 100) );
  111.   tft.setCursor(91, 146);
  112.   tft.print("hPa");
  113.   delay(5000);    // Display aktualisieren
  114. }
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement