/*************************************************
* LATIHAN 2 – Dual Cloud
* ESP32 + DHT22 + OLED + 2 LED
*************************************************/
#define BLYNK_PRINT Serial
// ===== BLYNK =====
#define BLYNK_TEMPLATE_ID "TMPL6dB9eXaFt"
#define BLYNK_TEMPLATE_NAME "Latihan DHT22 Naila Darussalamah"
#define BLYNK_AUTH_TOKEN "XYGwvHZS7chjU0jIZh-mpCkXjl6nSyT1"
// ===== INCLUDE =====
#include <WiFi.h>
#include <HTTPClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// ===== WIFI =====
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// ===== THINGSPEAK =====
String tsServer = "http://api.thingspeak.com/update";
String tsApiKey = "GADKOUR215F9HB1ZK";
// ===== PIN =====
#define DHT_PIN 15
#define LED_BLYNK 2
#define LED_TS 4
// ===== OLED =====
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// ===== OBJECT =====
DHTesp dht;
BlynkTimer timer;
float temperature, humidity;
// ===== KIRIM KE BLYNK =====
void sendBlynk() {
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
digitalWrite(LED_BLYNK, HIGH);
delay(100);
digitalWrite(LED_BLYNK, LOW);
}
// ===== KIRIM KE THINGSPEAK =====
void sendThingSpeak() {
HTTPClient http;
String url = tsServer +
"?api_key=" + tsApiKey +
"&field1=" + String(temperature) +
"&field2=" + String(humidity);
http.begin(url);
int httpCode = http.GET();
if (httpCode == 200) {
digitalWrite(LED_TS, HIGH);
delay(100);
digitalWrite(LED_TS, LOW);
}
http.end();
}
void setup() {
Serial.begin(115200);
pinMode(LED_BLYNK, OUTPUT);
pinMode(LED_TS, OUTPUT);
dht.setup(DHT_PIN, DHTesp::DHT22);
Wire.begin(21, 22);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(2000L, []() {
TempAndHumidity data = dht.getTempAndHumidity();
if (isnan(data.temperature)) return;
temperature = data.temperature;
humidity = data.humidity;
// OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("LATIHAN 2");
display.print("Temp: ");
display.print(temperature);
display.println(" C");
display.print("Hum : ");
display.print(humidity);
display.println(" %");
display.display();
sendBlynk();
});
timer.setInterval(15000L, sendThingSpeak);
}
void loop() {
Blynk.run();
timer.run();
}