//**********BLYNK, identitas device*****************************
#define BLYNK_TEMPLATE_ID "TMPL6N9sCCuem"
#define BLYNK_TEMPLATE_NAME "DHT11 OLED"
#define BLYNK_AUTH_TOKEN "1KuTaP7WV0wmB7bwTiad6wJrZLDjzwp1"

//**********BLYNK, library**************************************
#include <BlynkSimpleEsp32.h>
BlynkTimer timer;

//*********DHT22, library****************************************
#include "DHTesp.h"

//*********OLED**************************************************
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//**********BLYNK, ssid, pass, token****************************
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

//*********DHT22, deklarasi pin**********************************
const int DHT_PIN = 12;
DHTesp dhtSensor;
float suhu;
float kelembapan;

//*********OLED**************************************************
#define lebarOLED 128
#define tinggiOLED 64
Adafruit_SSD1306 OLED(lebarOLED, tinggiOLED, &Wire, -1);


//*****BLYNK, kirim nilai sensor*****************************
void sendSensor()
{
    //*********DHT22, membaca suhu dan kelembaban******************
  TempAndHumidity  data = dhtSensor.getTempAndHumidity();
  suhu=data.temperature;
  kelembapan=data.humidity;

  //*****SERIAL MONITOR, menampilkan data suhu dan kelembaban****
  OLED.clearDisplay();
  OLED.setCursor(0,0);
  OLED.println("Suhu:");
  OLED.print(suhu);
  OLED.println("C");
  OLED.println("Kelembapan:");
  OLED.print(kelembapan);
  OLED.println("%");
  OLED.display();

  
  //*****BLYNK, kirim nilai sensor*****************************
  Blynk.virtualWrite(V0, suhu);
  Blynk.virtualWrite(V1, kelembapan);
}

void setup() {
   //********BLYNK, mulai koneksi ke blynk***********************
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(1000L, sendSensor);
  
  //*****SERIAL MONITOR, setting baud rate***********************
  Serial.begin(115200);

  //*****DHT 22, setting*****************************************
  dhtSensor.setup(DHT_PIN, DHTesp::DHT22);

  //*********OLED**************************************************
   if(!OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C))
  {
    Serial.print(F("Gagal memulai OLED"));
    while(1);
  }
  delay(2000);
  OLED.clearDisplay();
  OLED.setTextSize(1);
  OLED.setTextColor(WHITE);
}

void loop() {
 //********BLYNK, menjalankan blynk****************************
  Blynk.run();
  timer.run();
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND