/*
ESP32 HTTPClient Example
PVS 2/3
*/
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHTTYPE DHT22
#define DHT_Pin 26
#define LUX_Pin A6
DHT DHT_sensor(DHT_Pin,DHTTYPE);
float humi;
float temp;
int light;
float lux;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
/***************************************/
const int Relay1_Pin = 2;
const int Relay2_Pin = 4;
const int Relay3_Pin = 15;
const int SW1_Pin = 12;
const int SW2_Pin = 14;
const int SW3_Pin = 27;
String s = " ";
/**************************************/
// Google sc cript Ip and reguired credentials
String GOOGLE_SCRIPT_URL = "https://script.google.com/macros/s/AKfycbyR9Vh7Z3uovVXDn026OxIYLrRwsK8NB7mWyUb-TdqLl5Jy7_nrcYw4m7v6NGTqLHZ_pg/exec";
String manualMode_GOOGLE_SCRIPT_URL = "https://script.google.com/macros/s/AKfycbz4vNkfaaZIVBa4Lb1xNeY6V5A4xWR8H8mf-TdQFAjLlx4MJExXoDSE4yKpSnhHgQCWvw/exec";
unsigned long previousTime1 = millis();
long timeInterval1 = 10000; //10 วินาที
int currentTime ;
String hh_time_on;
String mm_time_on;
String hh_time_off;
String mm_time_off;
String hh_time_now;
String mm_time_now;
int Mode = 0;
String ADMIN;
void setup() {
Serial.begin(115200);
/***************sensor*****************/
DHT_sensor.begin();
pinMode(LUX_Pin, INPUT);
/***************sensor*****************/
pinMode(Relay1_Pin, OUTPUT);
pinMode(Relay2_Pin, OUTPUT);
pinMode(Relay3_Pin, OUTPUT);
pinMode(SW1_Pin, INPUT_PULLUP);
pinMode(SW2_Pin, INPUT_PULLUP);
pinMode(SW3_Pin, INPUT_PULLUP);
WiFi.begin(ssid, password, 6);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.print("OK! IP=");
Serial.println(WiFi.localIP());
}
void loop() {
unsigned long currentTime = millis();
/***************sensor*****************/
humi = DHT_sensor.readHumidity();
temp = DHT_sensor.readTemperature();
light = analogRead(LUX_Pin);
float voltage = light / 4096. * 3.3;
float resistance = 2000 * voltage / (1 - voltage / 3.3);
lux = pow(33 * 1e3 * pow(10, 0.7) / resistance, (1 / 0.7));
/***************sensor*****************/
//controlTime();
if(currentTime - previousTime1 >= timeInterval1){
previousTime1 = currentTime;
dataLogger();
controlRelay();
}
if(Mode == 0){
controlSensor();
}else{
Manual();
Mode = 1;
}
}
void Manual(){
if(digitalRead(SW1_Pin) == 0){
Serial.println("SW1");
digitalWrite(Relay1_Pin,!digitalRead(Relay1_Pin));
manualMode();
controlRelay();
}
if(digitalRead(SW2_Pin) == 0){
Serial.println("SW2");
digitalWrite(Relay2_Pin,!digitalRead(Relay2_Pin));
manualMode();
controlRelay();
}
delay(200);
}
void controlSensor(){
if(temp > 30.0){
digitalWrite(Relay1_Pin, HIGH);
}else{
digitalWrite(Relay1_Pin, LOW);
}
if(lux < 100){
digitalWrite(Relay2_Pin, HIGH);
}else{
digitalWrite(Relay2_Pin, LOW);
}
}
void controlRelay(){
String R1 = s.substring(0, 1);
String R2 = s.substring(2, 3);
String sMode = s.substring(4, 5);
Serial.println(R1);
Serial.println(R2);
Serial.println(Mode);
int relay_number1 = R1.toInt();
int relay_number2 = R2.toInt();
Mode= sMode.toInt();
digitalWrite(Relay1_Pin,relay_number1);
digitalWrite(Relay2_Pin,relay_number2);
}
void controlTime(){
if(hh_time_on == hh_time_now && mm_time_on == mm_time_now ){
digitalWrite(Relay3_Pin, HIGH);
}
if(hh_time_off == hh_time_now && mm_time_off == mm_time_now ){
digitalWrite(Relay3_Pin, LOW);
}
}
void dataLogger(){
//String urlFinal= "https://script.google.com/macros/s/"+ GOOGLE_SCRIPT_ID + "/exec?FIELD1="+ string_temp +"&FIELD2="+ string_humi +"&FIELD3="+string_lux;
String urlFinal= GOOGLE_SCRIPT_URL+"?FIELD1="+ temp +"&FIELD2="+ humi +"&FIELD3="+lux;
Serial.print("Post data to spreadsheet!");
Serial.println(urlFinal);
// Object http form HTTPClient
HTTPClient http;
// Connect to WebApp with URL
http.begin(urlFinal.c_str());
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
// Get HTTP status Code
int httpcode = http.GET();
Serial.print("HTTP status Code: ");
Serial.println(httpcode);
// Getting response from webApp
String payload;
if (httpcode > 0){
payload = http.getString();
Serial.println("Payload : "+ payload);
s = payload;
}
http.end();
}
void manualMode(){
bool Relay1 = digitalRead(Relay1_Pin);
bool Relay2 = digitalRead(Relay2_Pin);
String urlFinal= manualMode_GOOGLE_SCRIPT_URL+"?SW1="+ Relay1 +"&SW2="+ Relay2;
Serial.print("Post data to spreadsheet!");
Serial.println(urlFinal);
// Object http form HTTPClient
HTTPClient http;
// Connect to WebApp with URL
http.begin(urlFinal.c_str());
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
// Get HTTP status Code
int httpcode = http.GET();
Serial.print("HTTP status Code: ");
Serial.println(httpcode);
// Getting response from webApp
String payload;
if (httpcode > 0){
payload = http.getString();
Serial.println("Payload : "+ payload);
s = payload;
}
http.end();
previousTime1 = millis();
}