#include <WiFi.h>
#include <ThingSpeak.h>
#include "DHTesp.h"
// Konfigurasi WiFi
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// Konfigurasi ThingSpeak
WiFiClient client;
unsigned long myChannelNumber = 2785297;
const char* myWriteAPIKey = "52LFSN12A37WRK9X";
// Pin sensor ultrasonik
#define TRIG_PIN1 23
#define ECHO_PIN1 22
#define TRIG_PIN2 19
#define ECHO_PIN2 18
#define DHT_PIN 4 // DHT22
DHTesp dht;
float readDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
void connectToWiFi() {
Serial.print("Menghubungkan ke WiFi");
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
unsigned long startAttemptTime = millis();
const unsigned long wifiTimeout = 30000; // 30 detik
while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < wifiTimeout) {
delay(1000);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi Terhubung!");
} else {
Serial.println("\nGagal terhubung ke WiFi.");
}
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
dht.setup(DHT_PIN, DHTesp::DHT22);
connectToWiFi();
if (WiFi.status() == WL_CONNECTED) {
ThingSpeak.begin(client);
}
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi terputus. Mencoba menyambung kembali...");
connectToWiFi();
}
float distance1 = readDistance(TRIG_PIN1, ECHO_PIN1);
float distance2 = readDistance(TRIG_PIN2, ECHO_PIN2);
float temperature = dht.getTemperature();
float humidity = dht.getHumidity();
Serial.print("Jarak 1: ");
Serial.print(distance1);
Serial.println(" cm");
Serial.print("Jarak 2: ");
Serial.print(distance2);
Serial.println(" cm");
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.println(" %");
if (WiFi.status() == WL_CONNECTED) {
ThingSpeak.setField(1, distance1);
ThingSpeak.setField(2, distance2);
ThingSpeak.setField(3, temperature);
ThingSpeak.setField(4, humidity);
int response = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (response == 200) {
Serial.println("Data terkirim ke ThingSpeak!");
} else {
Serial.print("Gagal mengirim data. HTTP error: ");
Serial.println(response);
}
} else {
Serial.println("WiFi terputus.");
}
delay(15000);
}