/*
#define BLYNK_TEMPLATE_ID "TMPL6q1s-E6W9"
#define BLYNK_TEMPLATE_NAME "Quickstart Template"
#define BLYNK_AUTH_TOKEN "I_x1sglwFyk_WdBVO_GDnF-87RsrU1qj"
#define BLYNK_PRINT Serial
#include <WiFi.h> //Library WiFi
#include <WiFiClient.h> //Library WiFiClient
#include <BlynkSimpleEsp32.h>
*/
#include <OneButton.h>
#include <DHTesp.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Data Wifi
//char ssid[] = "Wokwi-GUEST";
//char pass[] = "";
// Pin Sensor
#define DHT_PIN 32
#define LDR_PIN 33
#define Soil_Moist 27
#define Pin_Pump 16
#define Button_Pin 19
OneButton button(Button_Pin, true);
// Karakter LDR
const float GAMMA = 0.7;
const float RL10 = 50;
DHTesp dht;
// Karakter Soil Moist
int dry = 0;
int wet = 4095;
//inisiasi data
float temperature;
float humidity;
int Moist;
float lux;
int notified = 0; //define notifed as 0
int timedelay= 60000L; //set timer to run get data once every minute or 60,000 miliseconds
void sensor(){
int analogValue = analogRead(LDR_PIN);
int Mois1 = analogRead(Soil_Moist);
//Intensitas Cahaya
float voltage = analogValue / 4096. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
//Sensor Temperature dan Kelembapan
temperature = dht.getTemperature();
humidity = dht.getHumidity();
//Sensor Soil Moisture
Moist = map (Mois1, wet, dry, 100, 0);
if (Moist <= 40){
digitalWrite(Pin_Pump, LOW);
}
else {
digitalWrite(Pin_Pump, HIGH);
}
//koneksi ke Blynk
//Blynk.virtualWrite(V4, lux);// Send moisture level to virtual pin 5
//Blynk.virtualWrite(V5, Moist);// Send temperature to virtual pin 6
//Blynk.virtualWrite(V6, humidity);// Send humidity to virtual pin 7
//Blynk.virtualWrite(V7, temperature);// Send heat index to virtual pin 8
}
void 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(temperature);
u8g2.print(" C");
// Display humidity
u8g2.setCursor(9, 32);
u8g2.print("Humid: ");
u8g2.print(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(1000); // Update every second
}
void setup() {
pinMode(Pin_Pump, OUTPUT);
Serial.begin(9600); // Debug console
//Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // connect to blynk
dht.setup(DHT_PIN, DHTesp::DHT22);//run DHT sensor
button.attachClick(klik);
button.attachDoubleClick(onDoubleClick);
// put your setup code here, to run once:
u8g2.begin();
}
void loop() {
button.tick(); // check the status of the button
delay(10);
//Blynk.run(); // Run blynk
static unsigned long lastReadTime = 0;
if (millis() - lastReadTime > 5000) { // Read every 5 seconds
sensor();
lastReadTime = millis();
}
//Serial.println("Temp: " + String(temperature) + "°C");
//Serial.println("Humidity: " + String(humidity) + "%");
//Serial.println("Light Intensity: "+ String(lux) + "lux");
//Serial.println("Soil_Moisture: " + String(Moist));
//delay(2000);
}
void klik() {
display();
Serial.println("diklik");
}
void onDoubleClick() {
u8g2.clearDisplay(); // Clear the display when turning off
u8g2.sendBuffer();
}