clock — Esp32 Devkit C V4 simulation

An interactive Esp32 Devkit C V4 circuit simulation you can run free in your browser on Velxio, by tareq-neoaz.

Components

Sketch code

#include <Wire.h>
#include <RTClib.h>
#include <U8g2lib.h>
#include <DHT.h>

#define DHT_PIN 4
#define DHT_TYPE DHT22
#define OLED_SDA 21
#define OLED_SCL 22

U8G2_SH1107_SEEED_128X128_1_HW_I2C display(U8G2_R0, U8X8_PIN_NONE);
RTC_DS1307 rtc;
DHT dht(DHT_PIN, DHT_TYPE);

unsigned long lastDHTRead = 0;
float temperature = 0;
float humidity = 0;

void setup() {
  Serial.begin(115200);
  Wire.begin(OLED_SDA, OLED_SCL);

  display.begin();
  display.clearBuffer();
  display.setFont(u8g2_font_ncenB08_tr);
  display.drawStr(0, 20, "Starting...");
  display.sendBuffer();

  dht.begin();

  if (!rtc.begin()) {
    display.clearBuffer();
    display.drawStr(0, 20, "RTC not found!");
    display.sendBuffer();
    while (1);
  }

  // Uncomment ONLY if RTC lost power (no battery)
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  // DHT every 2 sec
  if (millis() - lastDHTRead > 2000) {
    float t = dht.readTemperature();
    float h = dht.readHumidity();
    if (!isnan(t) && !isnan(h)) {
      temperature = t;
      humidity = h;
    }
    lastDHTRead = millis();
  }

  // Get time
  DateTime now = rtc.now();

  char timeStr[9];
  char dateStr[20];
  sprintf(timeStr, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  sprintf(dateStr, "%02d/%02d/%04d", now.day(), now.month(), now.year());

  // Draw
  display.clearBuffer();

  display.setFont(u8g2_font_logisoso24_tn);
  int timeWidth = display.getStrWidth(timeStr);
  display.drawStr((128 - timeWidth) / 2, 35, timeStr);

  display.setFont(u8g2_font_ncenB10_tr);
  int dateWidth = display.getStrWidth(dateStr);
  display.drawStr((128 - dateWidth) / 2, 65, dateStr);

  char tempStr[16];
  char humStr[16];
  sprintf(tempStr, "%.1f C", temperature);
  sprintf(humStr, "%.1f %%", humidity);

  display.setFont(u8g2_font_ncenB08_tr);
  display.drawStr(10, 95, tempStr);
  display.drawStr(70, 95, humStr);

  display.sendBuffer();

  delay(100);
}

More projects by tareq-neoaz