#include <WiFi.h>
#include <Wire.h>
#include "DHTesp.h"
DHTesp dht;
// OLED
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,OLED_RESET);
// Blynk
#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""
#define BLYNK_AUTH_TOKEN ""
#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp32.h>
#include <ezTime.h>
Timezone local;
BlynkTimer timer;
// Define pin
#define button1 0
#define button2 2
#define DHT_PIN 15
#define led 4
#define SCL 22
#define SDA 21
#define relay 5
// STA mode
const char *ssid_STA = "Wokwi-GUEST";
const char *password_STA = "";
// Variable
float temperature;
float humadity;
// Blynk
BLYNK_CONNECTED() {
Blynk.sendInternal("utc", "time"); // Unix timestamp (with msecs)
Blynk.sendInternal("utc", "tz_rule"); // POSIX TZ rule
Blynk.sendInternal("meta", "get", "Number");
}
BLYNK_WRITE(InternalPinUTC) {
String cmd = param[0].asStr();
if (cmd == "time") {
const uint64_t utc_time = param[1].asLongLong();
UTC.setTime(utc_time / 1000, utc_time % 1000);
Serial.print("Unix time (UTC): "); Serial.println(utc_time);
} else if (cmd == "tz_rule") {
String tz_rule = param[1].asStr();
local.setPosix(tz_rule);
Serial.print("POSIX TZ rule: "); Serial.println(tz_rule);
}
}
BLYNK_WRITE(InternalPinMETA) {
String field = param[0].asStr();
if (field == "Number") {
String value = param[1].asStr();
Serial.print("Metadata Number: ");
Serial.println(value);
// Do something with Metadata value
}
}
BLYNK_WRITE(V0)
{
int pinValue = param.asInt();
Serial.print("BUTTON1 WAS PULLUP");
Blynk.virtualWrite(V4, pinValue);
digitalWrite(relay, pinValue);
}
BLYNK_WRITE(V1)
{
int pinValue = param.asInt();
Serial.println("BUTTON2 WAS PULLUP");
//Blynk.virtualWrite(V1, 0);
}
// void main
void setup(void) {
pinMode(led, OUTPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
pinMode(relay, OUTPUT);
Serial.begin(115200);
Serial.println();
Serial.println("Booting Sketch...");
// Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid_STA, password_STA);
timer.setInterval(1000L, function);
// OLED
if (! display.begin(SSD1306_SWITCHCAPVCC,SCREEN_ADDRESS)){
Serial.println(F("SSD1306 Allocation Failed"));
for(;;);
}
display.display();
display.clearDisplay();
// DHT22
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void loop(void) {
Blynk.run();
timer.run();
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
display.clearDisplay();
}
void dht_read() {
TempAndHumidity data = dht.getTempAndHumidity();
temperature = data.temperature;
humadity = data.humidity;
Blynk.virtualWrite(V2, temperature);
Blynk.virtualWrite(V3, humadity);
print_line("Temp:" + (String)temperature, 2,0,0);
print_line("Huma:" + (String)humadity, 2,0,20);
}
void printClock() {
//Serial.println("Time: " + local.dateTime());
Serial.print("Time: " + (String)local.hour() + ":");
Serial.print((String)local.minute() + ":");
Serial.println((String)local.second());
// Time now
print_line((String)local.hour()+":"+(String)local.minute()+":"+(String)local.second(), 2,0,40);
}
void function()
{
printClock();
dht_read();
}
void print_line(String text, int text_size, int column, int row) {
display.setTextSize(text_size);
display.setTextColor(SSD1306_WHITE);
display.setCursor(column, row);
display.println(text);
display.display();
}