//Marios Ideas
//DS3231 Tutorial
//Using DS3232.h library
//Formating date and time with dateFormat function (for Arduino board with >2kb SRAM)
//Taken from : https://github.com/jarzebski/Arduino-DS3231
//WiFi.begin("Wokwi-GUEST", "", 6);
#ifndef STASSID
#define STASSID "Wokwi-GUEST" // set your SSID
#define STAPSK "" // set your wifi password
#endif
/* Configuration of NTP */
//#define MY_NTP_SERVER "at.pool.ntp.org"
//#define MY_TZ "<-04>4"
#include <Wire.h>
#include "DS3231.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#include <Fonts/FreeSans9pt7b.h>
#include <DHT.h>
#include <WiFi.h>
#include "NTPClient.h" // https://github.com/arduino-libraries/NTPClient
#include <WiFiUdp.h>
WiFiUDP wifiUdp;
NTPClient timeClient(wifiUdp, "ca.pool.ntp.org", -4 * 3600, 60000); // Ajust for your location
#define DHT_SENSOR_PIN 15 // ESP32 pin GPIO21 connected to DHT11 sensor
#define DHT_SENSOR_TYPE DHT22
DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
DS3231 myRTC;
RTCDateTime dt;
//String txt;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 128 // OLED display height, in pixels
#define SDA_PIN 21 // Replace with the actual SDA pin
#define SCL_PIN 22 // Replace with the actual SCL pin
#define OLED_RESET -1// Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SH1107 display = Adafruit_SH1107(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET, 1000000, 100000);
#include "temp_bmp.h"
#include "screens.h"
void setup() {
Wire.begin(SDA_PIN, SCL_PIN);
Serial.begin(115200);
//myRTC.begin();
dht_sensor.begin();
display.begin(0x3D, false); // Address 0x3D default
if(!dht_sensor.read()) { // Address 0x3D for 128x64
Serial.println(F("DHT allocation failed"));
for(;;); // Don't proceed, loop forever
}
// start network
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
Serial.print("\n");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print ( "." );
delay(100);
}
Serial.println("\nWiFi connected");
Serial.println("start NTP");
timeClient.begin(); //
timeClient.update(); //
timeClient.forceUpdate(); //
Serial.println(timeClient.getFormattedTime ()); // hh mm ss
//Serial.println(timeClient.getFormattedDate()); // dd mm yyyy
if(!myRTC.begin()){ // Address 0x3D for 128x64
Serial.println(F("RTC allocation failed"));
for(;;); // Don't proceed, loop forever
}
if(!display.begin(0x3D, false)) { // Address 0x3D for 128x64
Serial.println(F("SH1107 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Set sketch compiling time only once and comment out
myRTC.setDateTime(__DATE__, __TIME__);
display.display();
delay(2000); // Pause for 2 seconds
// Clear the buffer
display.clearDisplay();
display.display();
}
void loop() {
// read Humidity in Relative %
float humi = dht_sensor.readHumidity();
// read temperature in Celsius
float tempC = dht_sensor.readTemperature();
dt = myRTC.getDateTime();
//Backgroud screen
background();
scr_H_T(humi,tempC);
//Draw the screen
display.display();
delay(1000);
}