#include "DHTesp.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET     -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

DHTesp dhtSensor;

void setup() {
  Serial.begin(115200);

  // Initialize OLED display
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  // Clear the display
  display.clearDisplay();

  // Set text size and color
  display.setTextSize(1);
  display.setTextColor(WHITE);

  dhtSensor.setup(13, DHTesp::DHT22);
  Serial.println("Hello, ESP32");
}

void loop() {
  TempAndHumidity data = dhtSensor.getTempAndHumidity();
  float temp = data.temperature;
  float humidity = data.humidity;

  // Clear the display
  display.clearDisplay();

  // Set cursor position
  display.setCursor(0, 0);

  // Print temperature
  display.print("Temp: ");
  display.print(temp, 2);
  display.print("C");

  // Print humidity
  display.setCursor(0, 10);
  display.print("Humidity: ");
  display.print(humidity, 1);
  display.print("%");

  // Display the content on OLED display
  display.display();

  // Print readings on serial monitor
  Serial.print("Temp: ");
  Serial.print(temp, 2);
  Serial.print("C, ");

  Serial.print("Humidity: ");
  Serial.print(humidity, 1);
  Serial.println("%");

  delay(1000);
}