#include "DHTesp.h"
#include <Wire.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#define DHT_PIN 32
#define LDR_PIN 33
#define Soil_Moist 27
#define Pin_Pump 16
// Karakter LDR
const float GAMMA = 0.7;
const float RL10 = 50;
DHTesp dhtSensor;
// Karakter Soil Moist
int dry = 0;
int wet = 4095;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
u8g2.begin();
u8g2.clearBuffer();
}
void loop() {
int analogValue = analogRead(LDR_PIN);
int Mois1 = analogRead(Soil_Moist);
digitalWrite(Pin_Pump, HIGH);
//Intensitas Cahaya
float voltage = analogValue / 4096. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
//Sensor Temperature dan Kelembapan
TempAndHumidity data = dhtSensor.getTempAndHumidity();
//Sensor Soil Moisture
int Moist = map (Mois1, wet, dry, 100, 0);
if (Moist >= 40){
digitalWrite(Pin_Pump, LOW);
}
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Light Intensity: "+ String(lux) + "lux");
Serial.println("Soil_Moisture: " + String(Moist));
// Set font and draw each variable on the display
u8g2.setFont(u8g2_font_b16_t_japanese3); // Choose a suitable font
u8g2.clearBuffer();
// Display temperature
u8g2.setCursor(9, 16);
u8g2.print("Temp: ");
u8g2.print(data.temperature);
u8g2.print(" C");
// Display humidity
u8g2.setCursor(9, 32);
u8g2.print("Humid: ");
u8g2.print(data.humidity);
u8g2.print(" %");
// Display soil moisture
u8g2.setCursor(9, 48);
u8g2.print("Moist: ");
u8g2.print(Moist);
u8g2.print(" %");
// Display lux
u8g2.setCursor(9, 64);
u8g2.print("Light: ");
u8g2.print(lux);
u8g2.print(" Lux");
u8g2.sendBuffer(); // Transfer internal memory to the display
delay(2000); // Update every second
}