#include <WiFi.h> // Library untuk menggunakan modul WiFI ESP
#include <HTTPClient.h> // Panggil library HTTPClient yang menyediakan banyak metode yang akan membantu kita bekerja dengan fungsionalitas HTTP
#include "DHTesp.h" // untuk membaca sensor DHT
const int DHT_PIN = 15;
const int LDR_PIN = 2;
DHTesp dhtSensor;
float hum;
float temp;
float ldr;
int redVal = 0;
int greenVal = 0;
int blueVal = 0;
const float gama = 0.7;
const float rl10 = 50;
HTTPClient httpku; // Membuat Objec bernama "httpku"
const char *ssid = "Wokwi-GUEST"; // SSID yang anda ingin terhunung dengan ESP
const char *password = ""; // Password dari SSID Tersebut
String serverName = "https://api.thingspeak.com/update?api_key="; // Nama target server
String apiKey = "AHJIX82LF8YABOSM";
void setup() {
Serial.begin(115200);
pinMode(5, OUTPUT); // LED Red
pinMode(18, OUTPUT); // LED Green
pinMode(19, OUTPUT); // LED Blue
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
WiFi.mode(WIFI_STA); // Station Mode : ESP32 dapat connect ke AP
WiFi.begin(ssid, password); // Mencoba terhubung ke jaringan ke SSID dan Password yg telah didefinisikan
while (WiFi.status() != WL_CONNECTED) { // Tunggu hingga ESP berhasil terkoneksi ke WiFi
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
hum = data.humidity;
temp = data.temperature;
Serial.print("Temperature:");
Serial.println(temp);
Serial.print("Humidity:");
Serial.println(hum);
int nilaildr = analogRead(LDR_PIN);
nilaildr = map(nilaildr, 4095, 0, 1024, 0); //mengubah nilai pembacaan sensor LDR dari nilai ADC arduino menjadi nilai ADC ESP32
float voltase = nilaildr / 1024.*5;
float resistansi = 2000 * voltase / (1-voltase/5);
float kecerahan = pow(rl10*1e3*pow(10,gama)/resistansi,(1/gama));
Serial.print("LDR:");
Serial.println(kecerahan);
sendToThingspeak(temp, hum, ldr);
updateIndicator(temp);
}
void sendToThingspeak(float temperature, float humidity, int ldr) {
// Menyiapkan data yang akan dikirim dengan metode POST
String postData = serverName + apiKey;
postData += "&field1=" + String(temperature);
postData += "&field2=" + String(humidity);
postData += "&field3=" + String(ldr);
Serial.print("Connecting to ");
Serial.println(serverName);
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
//kurang
int httpResponseCode = http.POST(postData);
if (httpResponseCode>0) {
Serial.print("Data sent to Thingspeak. Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.println("Error sending data to Thingspeak");
}
httpku.begin(postData.c_str()); // Mendefinisikan Spesific URL tujuan request
int httpCode = httpku.POST(postData); // Mengirimkan Request dengan POST Method dan mengembalikan nilai respon
http.end();
}
void updateIndicator(float temperature) {
if (temperature > 40) {
redVal = 255;
greenVal = 0;
blueVal = 0;
digitalWrite(5, HIGH); // Turn on Red LED
digitalWrite(18, LOW); // Turn off Green LED
digitalWrite(19, LOW); // Turn off Blue LED
} else if (temperature > 35) {
redVal = 255;
greenVal = 255;
blueVal = 0;
digitalWrite(5, HIGH); // Turn off Red LED
digitalWrite(18, HIGH); // Turn on Green LED
digitalWrite(19, LOW); // Turn off Blue LED
} else {
redVal = 0;
greenVal = 0;
blueVal = 255;
digitalWrite(5, LOW); // Turn off Red LED
digitalWrite(18, HIGH); // Turn off Green LED
digitalWrite(19, LOW); // Turn on Blue LED
}
}