#include <DHTesp.h>
#include <WiFi.h>
#include <PCD8544.h>
#include "driver/gpio.h"
#include <SPI.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Blynk.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#include <BlynkSimpleEsp32.h>
DHTesp dht;
const char* ssid     = "TIM-69381033";
const char* password = "DT6vrJYAt6Z4bJ64";
char auth[] = "2c9cf057d5cd4207962e49220c646e19";
int freq = 2000;
int channel = 0;
int resolution = 8;
int runMinutes = 0;
int runHours = 0;
int secsRemaining = 0;
int runSeconds = 0;
static PCD8544 lcd = PCD8544(14, 13, 27, 26, 15);
#define BLYNK_PRINT Serial
#define NTP_OFFSET  3600 // In seconds 
#define NTP_INTERVAL 60 * 1000    // In miliseconds
#define NTP_ADDRESS  "1.it.pool.ntp.org"
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET, NTP_INTERVAL);
BLYNK_WRITE(V1) {
  runHours = param[0].asLong() / 3600;
  secsRemaining = param[0].asLong() % 3600;
  runMinutes = secsRemaining / 60;
  runSeconds = secsRemaining % 60;
}
void setup() {
  gpio_set_direction( GPIO_NUM_23, GPIO_MODE_OUTPUT);
  gpio_set_level( GPIO_NUM_23, 1);
  dht.setup(22);
  Blynk.begin(auth, ssid, password);
  ledcSetup(channel, freq, resolution);
  ledcAttachPin(12, channel);
  lcd.begin(84, 48);
  timeClient.begin();
}
void loop()
{
  Blynk.run();
  timeClient.update();
  float temperature = dht.getTemperature();
   Blynk.virtualWrite(V6, temperature);.
  String formattedTime = timeClient.getFormattedTime();
  lcd.clear();
  // digital clock display of the time
  lcd.setCursor(20, 1);
  lcd.print(formattedTime);
  int ore = timeClient.getHours();
  int minuti = timeClient.getMinutes();
  int secondi = timeClient.getSeconds();
  if (minuti == runMinutes && ore == runHours)
  {
    ledcWriteTone(channel, 500);
    delay(500);
    ledcWriteTone(channel, 0);
  }
  delay(500);
   }








