#include <WiFi.h>
#include <HTTPClient.h>
#include "DHTesp.h"
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
// ================= BLYNK =================
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6nkTwSnLO"
#define BLYNK_TEMPLATE_NAME "J0404241152"
#define BLYNK_AUTH_TOKEN "sf7ZNWnSJ-RSxZIGdCR2nOymDJSRxMjm"
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// ================= DHT =================
DHTesp dht;
const int DHT_PIN = 15;
#include <BlynkSimpleEsp32.h>
// ================= TFT =================
#define TFT_CS 5
#define TFT_DC 2
#define TFT_RST 4
Adafruit_ILI9341 tft(TFT_CS, TFT_DC, TFT_RST);
// ================= LED =================
const int LED_BLYNK = 26;
const int LED_TS = 27;
// ================= TIMER =================
unsigned long lastBlynkSend = 0;
unsigned long lastTSSend = 0;
const unsigned long intervalBlynk = 2000;
const unsigned long intervalTS = 15000;
// ================= THINGSPEAK =================
String writeApiKey = "HA9DCWRFWDCN4TTO";
String serverUrl = "http://api.thingspeak.com/update";
void drawHeader() {
tft.fillScreen(ILI9341_BLACK);
tft.fillRect(0, 0, 240, 40, ILI9341_NAVY);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 12);
tft.print("DATA SENSOR");
}
void updateValues(float temp, float hum) {
tft.fillRect(0, 60, 240, 100, ILI9341_BLACK);
tft.setTextColor(ILI9341_GREEN);
tft.setTextSize(2);
tft.setCursor(10, 70);
tft.print("Suhu: ");
tft.print(temp);
tft.print(" C");
tft.setCursor(10, 100);
tft.print("Hum : ");
tft.print(hum);
tft.print(" %");
}
void setup() {
Serial.begin(115200);
pinMode(LED_BLYNK, OUTPUT);
pinMode(LED_TS, OUTPUT);
dht.setup(DHT_PIN, DHTesp::DHT22);
tft.begin();
tft.setRotation(0);
drawHeader();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run();
unsigned long now = millis();
TempAndHumidity data = dht.getTempAndHumidity();
if (!isnan(data.temperature) && !isnan(data.humidity)) {
updateValues(data.temperature, data.humidity);
if (now - lastBlynkSend >= intervalBlynk) {
lastBlynkSend = now;
if (Blynk.connected()) {
Blynk.virtualWrite(V0, data.temperature);
Blynk.virtualWrite(V1, data.humidity);
digitalWrite(LED_BLYNK, HIGH);
delay(50);
digitalWrite(LED_BLYNK, LOW);
}
}
if (now - lastTSSend >= intervalTS) {
lastTSSend = now;
String url = serverUrl +
"?api_key=" + writeApiKey +
"&field1=" + String(data.temperature, 2) +
"&field2=" + String(data.humidity, 2);
HTTPClient http;
http.begin(url);
int code = http.GET();
http.end();
if (code > 0) {
digitalWrite(LED_TS, HIGH);
delay(50);
digitalWrite(LED_TS, LOW);
}
}
}
}