#include <WiFi.h>
#include <HTTPClient.h>
// Ganti dengan informasi WiFi Anda
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak API URL dan API Keys
const char* server = "http://api.thingspeak.com/update";
const char* writeApiKey = "ZZSLDWS6V48K7SMX"; // Write API Key
const char* readApiKey = "G6CGYCXTKIV7U3N6"; // Read API Key
// Pin LED pada ESP32
const int ledPin = 5;
void setup() {
Serial.begin(115200);
// Menyiapkan pin LED sebagai OUTPUT
pinMode(ledPin, OUTPUT);
// Hubungkan ke WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// URL untuk membaca nilai dari ThingSpeak (menggunakan Read API Key)
String url = String("http://api.thingspeak.com/fields/1.json?api_key=") + readApiKey;
http.begin(url);
// Mengambil respon dari ThingSpeak
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
String payload = http.getString();
Serial.println("Response from ThingSpeak:");
Serial.println(payload);
// Ambil nilai dari field "LED" (misalnya, menggunakan JSON)
int ledStatus = parseLEDStatus(payload);
// Kontrol LED berdasarkan nilai dari ThingSpeak
if (ledStatus == 1) {
digitalWrite(ledPin, HIGH); // LED ON
Serial.println("LED ON");
} else {
digitalWrite(ledPin, LOW); // LED OFF
Serial.println("LED OFF");
}
} else {
Serial.println("Error on HTTP request");
}
// Mengirim data ke ThingSpeak (menggunakan Write API Key)
int ledStatus = digitalRead(ledPin); // Membaca status LED
String postData = "api_key=" + String(writeApiKey) + "&field1=" + String(ledStatus);
http.begin(server); // Mulai HTTP request ke endpoint update
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Kirimkan data (POST)
int httpResponseCodePost = http.POST(postData);
if (httpResponseCodePost > 0) {
Serial.println("Data sent to ThingSpeak: " + postData);
Serial.println("Response code: " + String(httpResponseCodePost));
} else {
Serial.println("Error on HTTP POST request");
}
http.end();
} else {
Serial.println("WiFi Disconnected");
}
// Cek status setiap 15 detik
delay(15000);
}
// Fungsi untuk mengurai data JSON dari ThingSpeak (mengambil nilai LED)
int parseLEDStatus(String payload) {
int ledValue = 0;
int startIndex = payload.indexOf("field1") + 8;
int endIndex = payload.indexOf(",", startIndex);
String ledString = payload.substring(startIndex, endIndex);
ledValue = ledString.toInt();
return ledValue;
}