#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
#include <ESP32Servo.h>
#include <DHT.h>
#define DHTPIN 27 // Pin DHT22
#define DHTTYPE DHT22 // Tipe DHT22
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String serverName = "https://api.thingspeak.com/update?api_key=CJXXTL28KC4N0GZG&field1=";
String serverName2 = "https://api.thingspeak.com/channels/2759394/status.json?api_key=JRM9UMD690GPQT70";
Servo servoku;
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
servoku.attach(19); // Pin untuk Servo
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nWiFi Connected. IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca data dari sensor DHT!");
return;
}
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C, Kelembapan: ");
Serial.println(kelembapan);
// Kirim data ke ThingSpeak (WRITE)
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = serverName + String(suhu) + "&field2=" + String(kelembapan);
http.begin(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP Response code (WRITE): ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error sending data: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("WiFi Disconnected");
}
// Baca data dari ThingSpeak (READ)
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverName2); // URL untuk membaca data
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
String payload = http.getString();
Serial.println("Payload: " + payload);
// Parse JSON untuk mendapatkan field3
JSONVar jsonData = JSON.parse(payload);
if (JSON.typeof(jsonData) == "undefined") {
Serial.println("Parsing JSON gagal!");
return;
}
int servoAngle = atoi((const char*)jsonData["field3"]); // Ambil nilai field3
Serial.print("Angle Servo (field3): ");
Serial.println(servoAngle);
// Kontrol servo berdasarkan nilai field3
servoku.write(servoAngle);
Serial.println("Servo bergerak ke " + String(servoAngle) + " derajat.");
} else {
Serial.print("Error reading data: ");
Serial.println(httpResponseCode);
}
http.end();
}
delay(10000); // Tunggu 5 detik sebelum iterasi berikutnya
}