#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <HTTPClient.h>
#include <WiFi.h>
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST"; // Ganti dengan SSID WiFi Anda
const char* password = ""; // Ganti dengan Password WiFi Anda
// Konfigurasi ThingSpeak
const char* server = "http://api.thingspeak.com/update";
const char* writeAPIKey = "0744612I6RU5K8YU"; // Write API Key dari ThingSpeak
// Inisialisasi LCD 16x2 (alamat I2C bisa bervariasi)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definisi pin LED
const int ledHigh = 26; // LED Hijau
const int ledMedium = 27; // LED Kuning
const int ledLow = 14; // LED Merah
// Definisi pin sensor
const int sensorPin = 32; // Pin data soil moisture sensor
void setup() {
Wire.begin(21, 22);
// Inisialisasi komunikasi Serial
Serial.begin(9600);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Connecting...");
// Koneksi ke WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
lcd.setCursor(0, 1);
lcd.print(".");
}
Serial.println("\nWiFi Connected!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Connected!");
pinMode(ledHigh, OUTPUT);
pinMode(ledMedium, OUTPUT);
pinMode(ledLow, OUTPUT);
// Inisialisasi pin sensor sebagai input
pinMode(sensorPin, INPUT);
}
void loop() {
// Baca nilai dari sensor kelembaban tanah
int sensorValue = analogRead(sensorPin);
// Debug nilai sensor
Serial.print("Soil Moisture Level: ");
Serial.println(sensorValue);
// Tampilkan status kelembaban di LCD dan kontrol LED
lcd.clear();
if (sensorValue > 3500) {
digitalWrite(ledHigh, HIGH);
digitalWrite(ledMedium, LOW);
digitalWrite(ledLow, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: Basah ");
} else if (sensorValue > 1500) {
digitalWrite(ledHigh, LOW);
digitalWrite(ledMedium, HIGH);
digitalWrite(ledLow, LOW);
lcd.setCursor(0, 1);
lcd.print("Status: Cukup ");
} else {
digitalWrite(ledHigh, LOW);
digitalWrite(ledMedium, LOW);
digitalWrite(ledLow, HIGH);
lcd.setCursor(0, 1);
lcd.print("Status: Kering ");
}
// Kirim data ke ThingSpeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "?api_key=" + writeAPIKey + "&field4=" + String(sensorValue);
http.begin(url);
int httpResponseCode = http.GET(); // Mengirim data dengan metode GET
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("WiFi Disconnected!");
}
// Tunggu 15 detik sebelum mengirim pembaruan lagi (sesuai aturan ThingSpeak)
delay(1000);
}