#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <HTTPClient.h>
#define DHT_PIN 15
#define LDR_PIN 34
#define LED1_PIN 13
#define LED2_PIN 14
#define LED3_PIN 26
#define LED4_PIN 27
#define SERVO_PIN 32
#define SDA_PIN 21
#define SCL_PIN 22
DHT dht(DHT_PIN, DHT22);
Servo servo;
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int suhuBatasAtas = 30;
const int suhuBatasBawah = 18;
const int kelembapanBatasAtas = 80;
const int kelembapanBatasBawah = 40;
// Wi-Fi Credentials
const char* ssid = "Wokwi-GUEST"; // Ganti dengan SSID Wi-Fi kamu jika diperlukan
const char* password = ""; // Ganti dengan password jika diperlukan
// ThingSpeak API Key
const String apiKey = "YOUR_THINGSPEAK_API_KEY"; // Ganti dengan API Key ThingSpeak
WiFiClient client;
HTTPClient http;
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
dht.begin();
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(LED4_PIN, OUTPUT);
servo.attach(SERVO_PIN);
servo.write(0);
lcd.begin(20, 4);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selamat datang di sistem");
lcd.setCursor(0, 1);
lcd.print("pemantauan smart farming");
lcd.setBacklight(1);
delay(200);
// Connect to Wi-Fi
Serial.print("Mencoba menghubungkan ke Wi-Fi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Terhubung!");
Serial.println("IP Address: " + WiFi.localIP().toString());
}
void loop() {
// Baca sensor
int suhu = dht.readTemperature();
int kelembapan = dht.readHumidity();
int ldrValue = analogRead(LDR_PIN);
float lux = map(ldrValue, 0, 4095, 0, 1000);
// Kirim data ke ThingSpeak
sendToThingSpeak(suhu, kelembapan, lux);
// Kontrol LED dan Servo
kontrolLED(ldrValue);
kontrolServo(suhu);
// Tampilkan data di LCD
tampilkanDataLCD(suhu, kelembapan, lux);
delay(400);
}
void sendToThingSpeak(int suhu, int kelembapan, float lux) {
if (WiFi.status() == WL_CONNECTED) {
http.begin(client, "http://api.thingspeak.com/update");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Data untuk dikirim
String httpRequestData = "api_key=" + apiKey +
"&field1=" + String(suhu) +
"&field2=" + String(kelembapan) +
"&field3=" + String(lux);
// Kirim data ke ThingSpeak
int httpResponseCode = http.POST(httpRequestData);
if (httpResponseCode > 0) {
Serial.println("Data berhasil dikirim ke ThingSpeak");
} else {
Serial.println("Terjadi kesalahan saat mengirim data ke ThingSpeak");
}
http.end();
} else {
Serial.println("Wi-Fi tidak terhubung");
}
}
void kontrolLED(int ldrValue) {
if (ldrValue < 1000) {
digitalWrite(LED1_PIN, HIGH);
digitalWrite(LED2_PIN, HIGH);
digitalWrite(LED3_PIN, HIGH);
digitalWrite(LED4_PIN, HIGH);
} else {
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
digitalWrite(LED3_PIN, LOW);
digitalWrite(LED4_PIN, LOW);
}
}
void kontrolServo(int suhu) {
if (suhu > suhuBatasAtas) {
servo.write(90);
} else {
servo.write(0);
}
}
void tampilkanDataLCD(int suhu, int kelembapan, float lux) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(kelembapan);
lcd.print(" %");
lcd.setCursor(0, 2);
lcd.print("LDR: ");
lcd.print(lux);
lcd.print(" lux");
lcd.setCursor(0, 3);
if (suhu > suhuBatasAtas) {
lcd.print("Ventilasi: Terbuka");
} else {
lcd.print("Ventilasi: Tertutup");
}
delay(500);
}