I have copy pasted the entire code into this comment
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "time.h"
#include <WiFi.h>
#include "BluetoothSerial.h"
#define SCREEN_WIDTH 128 // OLED display width
#define SCREEN_HEIGHT 64 // OLED display height in pixels
#define OLED_RESET -1 // OLED Reset Pin
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
BluetoothSerial SerialBT;
// Check if Bluetooth configs are enabled
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run make menuconfig
to and enable it
#endif
const char* ssid = "dasari-5g-guest";
const char* password = "dasar1h0m3";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = -18000;
const int daylightOffset_sec = 3600;
String message = "";
char incomingChar;
int onhour;
int onminute;
int offhour = onhour;
int offminute = onminute + 1;
byte HOUR;
byte MIN;
int pir = digitalRead(34);
void setup() {
pinMode(34, INPUT_PULLUP); //PIR Sensor
pinMode(25, OUTPUT); //Relay
Serial.begin(115200);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}
display.clearDisplay(); //Clears the Splash Screen
SerialBT.begin("ESP32");
Serial.println("The device started, now you can pair it with bluetooth!");
//connect to WiFi
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("CONNECTED");
//init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop() {
printLocalTime();
turnOnLight();
}
void turnOnLight() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
if (SerialBT.available()) {
char incomingChar = SerialBT.read();
if (incomingChar != '\n') {
message += String(incomingChar);
}
else {
message = "";
}
if (message.length() == 5) {
int onminute = message.substring(3, 5).toInt();
Serial.println(onminute);
int onhour = message.substring(0, 2).toInt();
Serial.println(onhour);
}
}
HOUR = timeinfo.tm_hour;
MIN = timeinfo.tm_min;
if (HOUR == onhour && MIN == onminute) {
Serial.println("SANITIZING");
digitalWrite(25, HIGH);
if (pir == LOW) {
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 30);
display.print("SANITIZING");
Serial.println("SANITIZING");
delay(300);
}
else {
digitalWrite(25, LOW);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 30);
display.print("MOTION DETECTED!");
Serial.println("MOTION DETECTED!");
delay(300);
}
display.display();
display.clearDisplay();
}
else if (HOUR == offhour && MIN == offminute) {
Serial.println("LIGHT OFF");
digitalWrite(25, LOW);
}
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
Serial.println(&timeinfo, "%A, %B %d %H:%M:%S");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(&timeinfo, "%A, %B %d");
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.print(&timeinfo, "%H:%M:%S");
if (HOUR != onhour && HOUR != offhour && MIN != offminute && MIN != onminute) {
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 30);
display.print("IDLE");
Serial.println("IDLE");
}
display.display();
display.clearDisplay();
}