#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
// --- Konfigurasi WiFi Anda ---
const char* ssid = "Wokwi-GUEST"; // Ganti dengan nama WiFi Anda
const char* password = ""; // Ganti dengan password WiFi Anda
// --- Konfigurasi ThingSpeak Anda ---
const char* thingspeakHost = "api.thingspeak.com";
const char* thingspeakApiKey = "00WUH4KSFA0J11YA"; // Ganti dengan Write API Key ThingSpeak Anda!
const unsigned long thingspeakUpdateInterval = 5000; // Update setiap 5 detik (dalam milidetik)
// --- Konfigurasi Sensor DHT ---
#define DHTPIN 13 // Pin ESP32 yang terhubung ke pin data DHT
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT11 atau DHT22)
DHT dht(DHTPIN, DHTTYPE);
// --- Konfigurasi Pin Potensiometer ---
const int potensiometerArusPin = 34; // GPIO 34 (ADC1_CHANNEL_6)
const int potensiometerTeganganPin = 35; // GPIO 35 (ADC1_CHANNEL_7)
// --- Variabel untuk menyimpan data ---
unsigned long lastThingSpeakUpdate = 0;
float temperature = 0.0;
float humidity = 0.0;
int rawArusValue = 0;
int rawTeganganValue = 0;
// --- Fungsi untuk menghubungkan ke WiFi ---
void connectToWiFi() {
Serial.print("Menghubungkan ke WiFi ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung!");
Serial.print("Alamat IP: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200); // Inisialisasi komunikasi serial
dht.begin(); // Memulai sensor DHT
// Mengatur resolusi ADC untuk potensiometer menjadi 12-bit (0-4095)
analogReadResolution(12);
connectToWiFi(); // Panggil fungsi untuk menghubungkan ke WiFi
}
void loop() {
// --- Baca Data dari Sensor DHT ---
humidity = dht.readHumidity();
temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca dari sensor DHT!");
} else {
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" °C, Kelembaban: ");
Serial.print(humidity);
Serial.println(" %");
}
// --- Baca Data dari Potensiometer ---
rawArusValue = analogRead(potensiometerArusPin);
rawTeganganValue = analogRead(potensiometerTeganganPin);
Serial.print("Potensio Arus (Raw ADC): ");
Serial.print(rawArusValue);
Serial.print(", Potensio Tegangan (Raw ADC): ");
Serial.println(rawTeganganValue);
// --- Kirim Data ke ThingSpeak ---
if (millis() - lastThingSpeakUpdate > thingspeakUpdateInterval) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://api.thingspeak.com/update?api_key=";
url += thingspeakApiKey;
url += "&field1="; // Field 1 untuk Suhu
url += String(temperature);
url += "&field2="; // Field 2 untuk Kelembaban
url += String(humidity);
url += "&field3="; // Field 3 untuk Nilai Potensio Arus
url += String(rawArusValue);
url += "&field4="; // Field 4 untuk Nilai Potensio Tegangan
url += String(rawTeganganValue);
Serial.print("Mengirim data ke ThingSpeak: ");
Serial.println(url);
http.begin(url);
int httpCode = http.GET(); // Mengirim permintaan GET
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
String payload = http.getString();
Serial.print("Respon ThingSpeak: ");
Serial.println(payload);
}
} else {
Serial.printf("Error HTTP: %s\n", http.errorToString(httpCode).c_str());
}
http.end(); // Mengakhiri koneksi HTTP
} else {
Serial.println("WiFi tidak terhubung, tidak dapat mengirim data ke ThingSpeak. Mencoba menghubungkan kembali...");
connectToWiFi(); // Coba hubungkan kembali jika WiFi terputus
}
lastThingSpeakUpdate = millis(); // Perbarui waktu terakhir update
}
delay(5000); // Jeda 5 detik sebelum pembacaan berikutnya
}