#include <ESP32Servo.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#include <NTPClient.h>
#include <time.h>
Servo solarPanel;
#define LDR_PIN 36
const float GAMMA = 0.7;
const float RL10 = 50;
float angle;
const int servoPin = 18;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
WiFiClient client;
unsigned long myChannelNumber =2640744;
const char * myWriteAPIKey = "FFDT5E57MR42HEKJ";
int statusCode;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 19800, 60000);
void setup() {
solarPanel.attach(servoPin);
Serial.begin(115200);
pinMode(LDR_PIN, INPUT);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
delay(1000);
}
void getwifi() {
if(WiFi.status()!=WL_CONNECTED)
{
Serial.print("Attempting to Connect.....!");
while(WiFi.status()!=WL_CONNECTED)
{
WiFi.begin(ssid,pass);
delay(5000);
}
}
Serial.println("\nConnected...");
}
void loop() {
getwifi();
int analogValue = analogRead(36);
float voltage = analogValue / 4099. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
timeClient.update();
time_t now = timeClient.getEpochTime();
setenv("TZ", "Asia/Kolkata", 1);
tzset();
struct tm * timeinfo = localtime(&now);
int hour = timeinfo->tm_hour;
int minute = timeinfo->tm_min;
if(hour>=7 && hour<11)
{ angle=45; }
else if(hour>=11 && hour<14)
{ angle=90; }
else if(hour>=14 && hour<17)
{ angle=135; }
else if(hour>=17 && hour<=18)
{ angle=179; }
else{ angle=0; }
solarPanel.write(angle);
Serial.println("Time:"+String(hour)+":"+String(minute));
Serial.println("Angle:"+String(angle));
Serial.println("Lux:"+String(lux));
Serial.println("Voltage:"+String(voltage));
ThingSpeak.setField(1,hour);
ThingSpeak.setField(2,minute);
ThingSpeak.setField(3,angle);
ThingSpeak.setField(4,lux);
ThingSpeak.setField(5,voltage);
statusCode = ThingSpeak.writeFields(myChannelNumber,myWriteAPIKey);
if(statusCode==200)
{
Serial.println("Channel Update Successful...");
}
else
{
Serial.println("Problem Writing data: HTTp error code:"+String(statusCode));
}
delay(15000);
}