FabGarden

Ein IOT Projekt mit einem ESP8266 Microcontroller zur besseren Pflege der FabLab Pflanzen. Dies ist ein noch nicht abgeschlossenes Projekt. Anregungen, Verbesserungsvorschläge und Erweiterungen sind herzlich willkommen!

Das FabGarden Modul ist es mit einem DHT11 Luftdruck- und Temperatursensor, einem kapazitiven analogen Hygrometer und – für die Ausgabe vor Ort – mit einem 0,96 Zoll OLED Display I2C (128 x 64 Pixel) versehen. Für den späteren Betrieb einer Pumpe ist bereits ein Relais eingebunden, dass über eine netzwerkinterne Webseite angesprochen werden kann.

Derzeit ist nur an einem Testbetrieb gedacht, bei dem die verschiedenen Zustände des Bodens beobachetet werden sollen: smart.fablab-bremen.org

Kompiliert mit der Arduino IDE 1.8.13 mit der Bibliothek MySqL Connector 1.1.1. und dem esp8266 Modul Version 1.8.3. Neuere Versionen führen derzeit bei der Verbindung mit dem SQL_Server zum Absturz (Stand: 4.6.21).

#include <Wire.h>
#include "DHT.h"        // DHT11  Bibliothek
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

#include <ESP8266mDNS.h>
#define HOSTNAME "FabGarden"


#define DHTTYPE DHT11   // DHT 11
#define dht_dpin 0      //GPIO-0 D3

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// FabLab Logo
static const uint8_t logo_bmp[2048] = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x03, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x0f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00
  , 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x00, 0x20, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x1c, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x1f, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x1f, 0xc0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x1f, 0xf0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x04, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x1f, 0xf8, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x0c, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfc, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x0c, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xfe, 0x03, 0x80, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00
  , 0x1c, 0x1f, 0xff, 0xf0, 0x03, 0xfc, 0x18, 0x0f, 0x03, 0x80, 0x00, 0x0f, 0xfe, 0x03, 0x8f, 0xe0
  , 0x1c, 0x1f, 0xff, 0xc0, 0x00, 0xfc, 0x00, 0x07, 0x83, 0x80, 0x00, 0x3f, 0xff, 0x03, 0xff, 0xf8
  , 0x1c, 0x1f, 0xff, 0xc0, 0x00, 0x7c, 0x00, 0x03, 0xc3, 0x80, 0x00, 0x3f, 0xff, 0x83, 0xff, 0xfc
  , 0x3c, 0x1f, 0xff, 0xc0, 0x00, 0x7c, 0x00, 0x01, 0xc3, 0x80, 0x00, 0x00, 0x03, 0x83, 0xe0, 0x1c
  , 0x3c, 0x00, 0x1f, 0xcf, 0xf0, 0x3c, 0x07, 0x81, 0xe3, 0x80, 0x00, 0x00, 0x03, 0x83, 0x80, 0x1c
  , 0x3c, 0x00, 0x03, 0xff, 0xf0, 0x3c, 0x1f, 0xc1, 0xe3, 0x80, 0x00, 0x00, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x00, 0x03, 0xff, 0xf8, 0x3c, 0x1f, 0xc1, 0xe3, 0x80, 0x00, 0x00, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x00, 0x03, 0xff, 0xf8, 0x3c, 0x1f, 0xc0, 0xe3, 0x80, 0x00, 0x00, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x00, 0x03, 0xf0, 0x00, 0x3c, 0x1f, 0xc0, 0xe3, 0x80, 0x00, 0x00, 0x03, 0xc3, 0x80, 0x0e
  , 0x7c, 0x0f, 0xff, 0xe0, 0x00, 0x3c, 0x1f, 0xc0, 0xe3, 0x80, 0x00, 0x1f, 0xff, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0xc0, 0x00, 0x3c, 0x1f, 0xc0, 0xe3, 0x80, 0x00, 0x3f, 0xff, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0x80, 0x00, 0x3c, 0x1f, 0xc0, 0xe3, 0x80, 0x00, 0x3c, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0x81, 0xf8, 0x3c, 0x1f, 0xc0, 0xe3, 0x80, 0x00, 0x78, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0x83, 0xf8, 0x3c, 0x1f, 0xc0, 0xc3, 0x80, 0x00, 0x70, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0x83, 0xf8, 0x3c, 0x1f, 0xc1, 0x83, 0x80, 0x00, 0x70, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0x83, 0xf0, 0x3c, 0x1f, 0xc1, 0x03, 0x80, 0x00, 0x70, 0x01, 0xc3, 0x80, 0x0e
  , 0x7c, 0x1f, 0xff, 0x81, 0xc0, 0x3c, 0x03, 0x81, 0x03, 0x80, 0x00, 0x70, 0x03, 0xc3, 0x80, 0x1c
  , 0x7c, 0x1f, 0xff, 0x80, 0x00, 0x3c, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x78, 0x1f, 0xc3, 0xf0, 0x1c
  , 0x7c, 0x1f, 0xff, 0xc0, 0x00, 0x3c, 0x00, 0x00, 0x01, 0xff, 0xfe, 0x3f, 0xff, 0xc3, 0xff, 0xfc
  , 0x7c, 0x1f, 0xff, 0xc0, 0x08, 0x3c, 0x10, 0x00, 0x01, 0xff, 0xfe, 0x3f, 0xf9, 0xc3, 0xbf, 0xf8
  , 0x3c, 0x1f, 0xff, 0xf0, 0x38, 0x3c, 0x3c, 0x00, 0x00, 0xff, 0xfe, 0x1f, 0xc1, 0xc3, 0x87, 0xf0
  , 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x07, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x07, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x03, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x01, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x3f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x07, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};


//DHT Variable
float h = 0.0; //Luftfeuchte level
float t = 0.0; //Temperature in celcius

//Kapazitiver Sensor
const int AirValue = 822;
const int WaterValue = 426;
const int SensorPin = A0;
int soilMoistureValue = 0;
int soilmoisturepercent = 0;

//Pumpe
int Solenoid = 14;      // GPIO14---D5 - Relais
int value = LOW; // Schalter aus

//MySQL
IPAddress server_addr(XXX,XXX,XXX,XXX); // IP of the MySQL *server* here
char user[] = "username";              // MySQL user login username
char password[] = "password";        // MySQL user login password

// ---------- Query --------------
char INSERT_DATA[] = "INSERT INTO fabgarden.daten (temperatur, luftfeuchtigkeit, bodenfeuchte) VALUES (%s, %s, %s)";
char query[128];
char temp[50];
char luftfeuchte[50];
char soil[50];

//WLAN
const char* ssid = "WLAN SSID";
const char* pass = "WLAN PASSWORD";


//Konstante für die Schleife
int i = 0;

WiFiClient client;
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;


DHT dht(dht_dpin, DHTTYPE);
WiFiServer server(80);


void setup(void)
{
  dht.begin();
  Serial.begin(9600);
  delay(10);
  //Lampe AN
  pinMode(LED_BUILTIN, OUTPUT);

  pinMode(Solenoid, OUTPUT);       //D5 deiniert als Output
  digitalWrite(Solenoid, LOW);     //und vorläufig deaktiviert

  // CVerbindung mit WiFi
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);     //Begin WiFi

  WiFi.hostname(HOSTNAME);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");


  // IP address im seriellen Monitor darstellen
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");


  //Intialisierung des Displays (I2C) mit der Addresse 0x3C (128x64)

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
}


//hier werden die Sensordaten aktualisiert
void akt() {
  soilMoistureValue = analogRead(SensorPin);  //Bodenfeuchte Sensor l
  soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);

  h = dht.readHumidity();    //Luftfeuchte
  t = dht.readTemperature(); //Temperatur
}

// -------------- LOOP -------------

void loop() {

  //Aufruf der jeweils aktualisierten Daten
  akt();

  if (soilmoisturepercent < 0) {
    soilmoisturepercent = 0;
  }
  if (soilmoisturepercent > 100) {
    soilmoisturepercent = 100;
  }


  /* bis zur Festlegung der Startdaten für die Pumpe deaktiviert...
    if (soilmoisturepercent >10 )  {   //Motor ON
    digitalWrite(Solenoid, HIGH);
    value = HIGH;
    }
    if (soilmoisturepercent <10 )   {  //Motor OFF
    digitalWrite(Solenoid, LOW);
    value = LOW;
    }
  */


  //Aufruf der Webseite
  web();

  Serial.println(i);


  //Übertragung der Daten auf den MySQL Server mit Pause 10 = 75 sec, 22 = 2.35 min
  i = i + 1;
  if (i >= 21) {
    serv();
    //Serial.println(" ");
    //Serial.println(value);
    //Serial.println(t);
    //Serial.println(h);
    //Serial.println(soilmoisturepercent);
  }



 
  displTemp();     //Aufruf Display Temperatur
  delay(2000);
  displLuftf();   //Aufruf Display Luftfeuchte
  delay(2000);
  displ();     //Aufruf Display Bodenfeuchte
  delay(2000);
  testdrawbitmap();     //Aufruf Display Werbeeinblendung
  delay(500);
}
// ------------- MySQL ---------------
void serv() {
  //Verbindung mit Server herstellen
  i = 0;
  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password)) {
    delay(500);
    // Initialisierung der Query Class Instance
    MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);

    Serial.println("----------------");
    // Save
    dtostrf(t, 5, 2, temp);
    Serial.println(temp);
    dtostrf(h, 5, 2, luftfeuchte);
    Serial.println(luftfeuchte);
    dtostrf(soilmoisturepercent, 5, 2, soil);
    Serial.println(soil);
    sprintf(query, INSERT_DATA, temp, luftfeuchte, soil);
    cur_mem->execute(query);

    // Löschung des Cursors zum Freigeben von Arbeitsspeicher
    delete cur_mem;
    Serial.println("Data recorded.");

  }
  else
    //Serial.println("FAILED.");
    Serial.println("Connection failed.");
  conn.close();
 

}


// ------------- WEB ----------
void web() {

  // Check ob eine Client verbunden ist
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Warten bis der Client Daten sendet
  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  // Lesen der erten Zeile des Requests
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();


  if (request.indexOf("/Solenoid=ON") != -1)  {   //Motor ON
    digitalWrite(Solenoid, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/Solenoid=OFF") != -1)  {  //Motor OFF
    digitalWrite(Solenoid, LOW);
    value = LOW;
  }


  // Ausgabe der Antwort für den Client
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<head>");
  client.println("<meta name='viewport' content='width=device-width, initial-scale=1.0, user-scalable=no'>");
  client.println("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
  client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
  client.println("body{margin-top: 20px;} h1 {color: magenta; margin: 20px auto 30px;}");
  client.println("p {font-size: 24px;color: #444444;margin-bottom: 10px;}");
  client.println("</style>");
  client.println("</head>");
  client.println("<body>");
  client.println("<h1 align=center>FabGarden</h1><br><br>");

  client.print("<div id='very'>");
  client.print("Temperature in Celsius =");
  client.println(t);
  client.println("<br>");
  client.print("Humidity =");
  client.println(h);
  client.print(" %");
  client.println("<br>");
  client.println();
  client.print("Moisture Level Percentage =");
  if (soilmoisturepercent < 0) {
    soilmoisturepercent = 0;
  }
  client.print(soilmoisturepercent);
  client.print("%");
  client.println("<br><br>");
  if (value == HIGH)
    client.println("Motor/Pump Operational");
  else
    client.print("Motor/Pump at Halt");
  client.print("</div>");

  client.println("<br><br>");
  client.println("<a href=\"/Up=ON\"\"><button>Update = Temperature  Humidity Moisture Values</button></a><br />");
  client.println("<a href=\"/Solenoid=ON\"\"><button>Motor Pump On </button></a>");
  client.println("<a href=\"/Solenoid=OFF\"\"><button>Motor Pump Off </button></a><br />");

  client.println("<br><br>");
  client.println("<br>");
  client.println("</body>");
  client.println("</html>");
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
}


// --- Steuerung des Displays für die Bodenfeuchte ---
void displ() {
    display.setCursor(0, 5); //oled display
    display.setTextSize(3);
    display.setTextColor(WHITE);
    display.println("Bodenf.");

    display.setCursor(30, 40); //oled display
    display.setTextSize(3);
    display.setTextColor(WHITE);
    display.println(soilmoisturepercent);
    display.setCursor(70, 40);
    display.setTextSize(3);
    display.println(" %");
    display.display();
    delay(250);
    display.clearDisplay();
}

// --- Steuerung des Displays für die Temperatur  ----
void displTemp() {
  display.setCursor(0, 5); //oled display
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.println("Temp");

  display.setCursor(0, 40); //oled display
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.println(t);
  display.setCursor(85, 40);
  display.setTextSize(3);
  display.println(" C");
  display.display();
  delay(250);
  display.clearDisplay();
}


// --- Steuerung des Displays für die Luftfeuchte ---
void displLuftf() {
  display.setCursor(0, 5); //oled display
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.println("Luftf.");

  display.setCursor(0, 40); //oled display
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.println(h);
  display.setCursor(85, 40);
  display.setTextSize(3);
  display.println(" %");
  display.display();
  delay(250);
  display.clearDisplay();
}


// --- Werbung ---

void testdrawbitmap(void) {
  display.clearDisplay();
  display.display();
  delay(50);

  display.drawBitmap(0, 0, logo_bmp, SCREEN_WIDTH, SCREEN_HEIGHT, 1);
  display.display();
  delay(200);

  display.clearDisplay();
  display.display();
  delay(50);

  display.drawBitmap(0, 0, logo_bmp, SCREEN_WIDTH, SCREEN_HEIGHT, 1);
  display.display();
  delay(200);
  display.clearDisplay();
  
}