#include <Adafruit_SSD1306.h>
#include <esp_task_wdt.h>
#include <DHT.h>
#define DHT_PIN 13
#define WDT_TIMEOUT 10 // 5 seconds
#define DHT_TYPE DHT22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 display(SCREEN_WIDTH,SCREEN_HEIGHT, &Wire);
DHT dhtSensor(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
}
dhtSensor.begin();
pinMode(17, INPUT_PULLUP); // mha gud
pinMode(4, INPUT_PULLUP); // manual
pinMode(16, INPUT_PULLUP); // auto
pinMode(2, OUTPUT);
Serial.println("Hello, ESP32!");
esp_task_wdt_deinit();
// Define the WDT configuration
esp_task_wdt_config_t wdt_config = {
.timeout_ms = WDT_TIMEOUT * 1000, // Convert seconds to milliseconds
//.idle_core_mask = (1 << configNUM_CORES - 1) ,
.trigger_panic = true // Trigger panic on timeout
};
// Initialize WDT with the configuration
esp_task_wdt_init(&wdt_config);
esp_task_wdt_add(NULL); // Add current task to WDT
}
void showoled(float value,float cov,bool key)
{
if(key)
{
display.clearDisplay();
display.display();
display.setTextSize(0.5);
display.setTextColor(WHITE);
display.setCursor(0,0);
//display.println(F("ON"));
// display.setCursor(60,0);
display.println(F("Temp : "));
display.setCursor(50,0);
display.println(value);
display.setCursor(0,15);
/*display.println(F("Address : "));
display.setCursor(60,15);
display.println(add);*/
display.setCursor(0,25);
display.println(F("hum : "));
display.setCursor(40,25);
display.println(cov);
display.display();
}
}
const float GAMMA = 0.7;
const float RL10 = 50;
float rl_temp,rl_hum;
int time_end=0/*, analogValue =0*/,poten;
bool toggle =true,onclick = false;
void loop() {
if(millis() - time_end >= 1000)
{
rl_temp = dhtSensor.readTemperature();
rl_hum = dhtSensor.readHumidity();
poten = analogRead(34);
int analogValue = analogRead(2);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Light value is ");
Serial.println(analogValue);
Serial.print("Poten value is ");
Serial.println(poten);
Serial.print("Temp in dht 22 is : ");
Serial.println(rl_temp);
Serial.print("hum in dht 22 is : ");
Serial.println(rl_hum);
int real_value = 255 - (analogValue /15.8);
time_end = millis();
if(digitalRead(17) == HIGH)
{
//Serial.println("Try not Feed");
esp_task_wdt_reset();
}
else if(digitalRead(17) == LOW)
{
Serial.println("Try not Feed");
}
if(digitalRead(16) == LOW)
{
Serial.println("Auto mode led will blink 1s");
digitalWrite(2,toggle);
//analogWrite(2,poten);
}
else if(digitalRead(4) == LOW)
{
Serial.println("Manual mode");
if(onclick)
{
onclick = false;
Serial.println("light off");
}
else
{
onclick = true;
Serial.println("light on");
}
//analogWrite(2,poten);
digitalWrite(2,onclick);
}
else
{
//Serial.println("Depend on ldr ");
//analogWrite(2,real_value);
//igitalWrite(2,toggle);
//analogWrite(2,poten);
}
toggle = !toggle;
}
showoled(rl_temp,rl_hum,true);
delay(10); // this speeds up the simulation
}