#include <Arduino_JSON.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHTesp.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
const char* sertificate = \
"-----BEGIN CERTIFICATE-----\n" \
"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\n" \
"-----END CERTIFICATE-----\n";
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String microSecretKey = "smartbabybed!!!";
String host = "https://c2c1-114-10-150-110.ngrok-free.app";
unsigned long intervalAudio = 10000;
unsigned long previousMillisAudio = 0;
unsigned long currentMillisAudio;
unsigned long intervalKelembaban = 30000;
unsigned long previousMillisKelembaban = 0;
unsigned long currentMillisKelembaban;
bool serverIsHealty = false;
const int pinSensorKelembaban = 15;
uint8_t pinSensorAudio = 15;
DHTesp dhtSensor;
void setup() {
dhtSensor.setup(pinSensorKelembaban, DHTesp::DHT22);
pinMode(pinSensorAudio, INPUT);
// pinMode(pinSensorKelembaban, INPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { //perintah tunggu esp32 sampi terkoneksi ke wifi
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (checkHealtyServer()) {
// readAudio();
// readKelembaban();
}
delay(500);
}
bool checkHealtyServer() {
if (checkConnection()) {
if (!serverIsHealty) {
String healty = httpGetRequest("/health");
JSONVar responseJson = JSON.parse(healty);
String state = responseJson["state"];
if (state == "CONNECTED") {
Serial.println(state);
serverIsHealty = true;
return true;
} else {
Serial.print("Error\n");
serverIsHealty = false;
delay(3000);
return false;
}
} else {
return true;
}
} else {
return false;
}
}
bool checkConnection() {
if (WiFi.status() == WL_CONNECTED) {
return true;
} else {
Serial.println("WIFI DISCONNECTED!");
return false;
}
}
String httpPostRequest(String path, String payload) {
WiFiClientSecure *client = new WiFiClientSecure;
client->setInsecure();
HTTPClient https;
String hostName = host + path;
String body = "{}";
https.begin(hostName.c_str());
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
https.addHeader("ngrok-skip-browser-warning", "true");
https.addHeader("secret-key-micro", microSecretKey);
https.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
int httpsResponseCode = https.POST(payload);
if (httpsResponseCode == 200) {
String response = https.getString();
body = response;
} else {
serverIsHealty = false;
}
https.end();
return body;
}
String httpGetRequest(String path) {
WiFiClientSecure *client = new WiFiClientSecure;
client->setInsecure();
HTTPClient https;
String hostName = host + path;
String payload = "{}";
https.begin(hostName.c_str());
https.addHeader("secret-key-micro", microSecretKey);
https.addHeader("ngrok-skip-browser-warning", "true");
https.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
int httpsResponseCode = https.GET();
if (httpsResponseCode == 200) {
String response = https.getString();
payload = response;
} else {
Serial.print(httpsResponseCode);
Serial.print(" : ");
Serial.println(https.errorToString(httpsResponseCode));
serverIsHealty = false;
}
https.end();
return payload;
}
void readAudio() {
int sensorAudio = analogRead(pinSensorAudio);
int valueAudio = map(sensorAudio, 0, 1023, 0, 100);
if (valueAudio == 100) {
currentMillisAudio = millis();
if (currentMillisAudio - previousMillisAudio >= intervalAudio) {
String payload = "valueSensor=" + String(sensorAudio) + "&percentageSensor=" + String(valueAudio);
String response = httpPostRequest("/api/sensor/audio", payload);
JSONVar responseJson = JSON.parse(response);
String status = responseJson["status"];
if (status == "success") {
String message = responseJson["message"];
Serial.print("[BAYI MENANGIS] ");
Serial.println(message);
} else {
Serial.println("[BAYI MENANGIS] Gagal mengirim pesan whatsapp!");
}
previousMillisAudio = currentMillisAudio;
}
}
}
void readKelembaban() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
int sensorKelembaban = data.humidity;
int valueKelembaban = map(sensorKelembaban, 0, 1024, 100, 0);
if (valueKelembaban > 50) {
currentMillisKelembaban = millis();
if (currentMillisKelembaban - previousMillisKelembaban >= intervalKelembaban) {
String payload = "valueSensor=" + String(sensorKelembaban) + "&percentageSensor=" + String(valueKelembaban);
String response = httpPostRequest("/api/sensor/humadity", payload);
JSONVar responseJson = JSON.parse(response);
String status = responseJson["status"];
if (status == "success") {
String message = responseJson["message"];
Serial.print("[BAYI MENGOMPOL] ");
Serial.println(message);
} else {
Serial.println("[BAYI MENGOMPOL] Gagal mengirim pesan whatsapp!");
}
previousMillisKelembaban = currentMillisKelembaban;
}
}
}