//OLED SCL pin22, SDA pin 21
//DHT pin 15
//LED pin 2
//Buzzer 4
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLCw7XT5BN"
#define BLYNK_DEVICE_NAME "MONITOR CAGE"
#define BLYNK_AUTH_TOKEN "Qdcdw1ADcwzg9tzsUr63ccIF_7ayq7Nr"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <HTTPClient.h>
#include <time.h>
#include "DHTesp.h"
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 19800;
const int daylightOffset_sec = 0;
#define ledRed 2
#define ledYellow 5
#define buzzer 4
#define TINGGI_LAYAR 64
#define LEBAR_LAYAR 128
Adafruit_SSD1306 oled(LEBAR_LAYAR, TINGGI_LAYAR, &Wire, -1);
const int DHT_PIN_1 = 15;
DHTesp dhtSensor_1;
const int DHT_PIN_2 = 13;
DHTesp dhtSensor_2;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
//https://script.google.com/macros/s/AKfycbwX09SLO3guc2P7hkbYF7pnvoriryWqLPfDwEOv80fIDB-Wf6o22NDb3Fj-5YzbVLIK/exec
// Gscript ID and required credentials
const char *GScriptId = "AKfycbzhEBLLMUPVxZMeL5Y8fZinH5A-Eh6IsNscUfO05JpOE_2KNsbi0jmxOmLdZMRFeetC"; // change Gscript ID
const int httpsPort = 443;
const char* host = "script.google.com";
const char* googleRedirHost = "script.googleusercontent.com";
String url = String("/macros/s/") + GScriptId + "/exec?";
HttpClient client(httpsPort);
const char * root_ca=\
"-----BEGIN CERTIFICATE-----\n" \
"MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G\n" \
"A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp\n" \
"Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1\n" \
"MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG\n" \
"A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\n" \
"hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL\n" \
"v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8\n" \
"eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq\n" \
"tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\n" \
"C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa\n" \
"zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB\n" \
"mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH\n" \
"V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n\n" \
"bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG\n" \
"3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs\n" \
"J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO\n" \
"291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS\n" \
"ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\n" \
"AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\n" \
"TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n" \
"-----END CERTIFICATE-----\n";
int count = 0
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("ESP32 running!");
dhtSensor_1.setup(DHT_PIN_1, DHTesp::DHT22);
dhtSensor_2.setup(DHT_PIN_2, DHTesp::DHT22);
Blynk.begin(auth, ssid, pass);
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, LOW);
if(!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)){
Serial.println(F("Failed to start SSD1306"));
while(1);
}
onfigTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
}
void postData(String tag, float value){
if (!client.connected()){
Serial.println("Connecting to client again...");
client.connect(host, httpsPort);
}
String urlFinal = url + "tag=" + tag + "&value=" + String(value);
client.printRedir(urlFinal, host, googleRedirHost);
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
static bool flag = false;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
Blynk.run();
TempAndHumidity data_1 = dhtSensor_1.getTempAndHumidity();
Serial.println("Temp Depan: " + String(data_1.temperature, 1) + "°C");
Serial.println("Humidity Depan 1: " + String(data_1.humidity, 1) + "%");
Serial.println("---");
TempAndHumidity data_2 = dhtSensor_2.getTempAndHumidity();
Serial.println("Temp Atas: " + String(data_2.temperature, 1) + "°C");
Serial.println("Humidity Atas: " + String(data_2.humidity, 1) + "%");
Serial.println("---");
Blynk.virtualWrite(V0, data_1.temperature);
Blynk.virtualWrite(V1, data_1.humidity);
Blynk.virtualWrite(V2, data_2.temperature);
Blynk.virtualWrite(V3, data_2.humidity);
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(1);
oled.setCursor(27, 1);
oled.print("DRC PERTAMINA");
oled.setCursor(15, 15);
oled.print("MONITORING CAGE 1");
oled.setCursor(0, 32);
oled.print("Temperature ");
oled.setCursor(80, 32);
oled.print(data_1.temperature,1);
oled.setCursor(100, 32);
oled.print(" C");
oled.setCursor(0, 45);
oled.print("Humidity ");
oled.setCursor(80, 45);
oled.print(data_1.humidity,1);
oled.setCursor(100, 45);
oled.print(" %");
oled.display();
oled.clearDisplay();
if(data_1.temperature>=22){
digitalWrite(ledRed, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(buzzer, HIGH);
}else if (data_1.temperature>=21){
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, HIGH);
digitalWrite(buzzer, LOW);
}else{
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(buzzer, LOW);
}
char timeStringBuff[50]; //50 chars should be enough
strftime(timeStringBuff, sizeof(timeStringBuff), "%A, %B %d %Y %H:%M:%S", &timeinfo);
String asString(timeStringBuff);
asString.replace(" ", "-");
Serial.print("Time:");
Serial.println(asString);
String urlFinal = "https://script.google.com/macros/s/"+GOOGLE_SCRIPT_ID+"/exec?"+"date=" + asString + "&sensor=" + String(count);
Serial.print("POST data to spreadsheet:");
Serial.println(urlFinal);
HTTPClient http;
http.begin(urlFinal.c_str());
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
int httpCode = http.GET();
Serial.print("HTTP Status Code: ");
Serial.println(httpCode);
//---------------------------------------------------------------------
//getting response from google sheet
String payload;
if (httpCode > 0) {
payload = http.getString();
Serial.println("Payload: "+payload);
}
//---------------------------------------------------------------------
http.end();
}
count++;
delay(1000);
}