#include <ThingerESP32.h>
#include "arduino_secrets.h" // berisi SSID, SSID_PASSWORD, USERNAME, DEVICE_ID, DEVICE_CREDENTIAL
ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
#define PIN_SIRAM 16
bool sedangMenyiram = false;
unsigned long waktuMulaiSiram = 0;
const unsigned long DURASI_SIRAM = 5000; // 5 detik
float suhuSimulasi = 30.0;
float kelembapanSimulasi = 60.0;
unsigned long waktuTerakhirSiram = 0;
char bufferTerakhirSiram[50];
void setup() {
Serial.begin(115200);
pinMode(PIN_SIRAM, OUTPUT);
digitalWrite(PIN_SIRAM, LOW);
thing.add_wifi(SSID, SSID_PASSWORD);
// Riwayat penyiraman
thing["terakhir_siram"] >> [](pson &out) {
out = (const char*)bufferTerakhirSiram;
};
// Suhu simulasi
thing["suhu"] >> [](pson &out) {
suhuSimulasi += random(-10, 11) * 0.1;
out = suhuSimulasi;
};
// Kelembapan simulasi
thing["kelembapan"] >> [](pson &out) {
kelembapanSimulasi += random(-10, 11) * 0.1;
out = kelembapanSimulasi;
};
// Tombol penyiraman manual
thing["siram"] << [](pson &in) {
if ((bool)in && !sedangMenyiram) {
sedangMenyiram = true;
waktuMulaiSiram = millis();
digitalWrite(PIN_SIRAM, HIGH);
Serial.println("Penyiraman dimulai.");
thing.stream("terakhir_siram");
}
};
// Streaming berkala
thing.stream("terakhir_siram");
thing.stream("suhu");
thing.stream("kelembapan");
}
void loop() {
thing.handle();
// Update teks terakhir siram
if (waktuTerakhirSiram == 0) {
snprintf(bufferTerakhirSiram, sizeof(bufferTerakhirSiram), "Belum pernah");
} else {
unsigned long now = millis();
unsigned long selisih = (now - waktuTerakhirSiram) / 1000;
unsigned long jam = selisih / 3600;
unsigned long menit = (selisih % 3600) / 60;
snprintf(bufferTerakhirSiram, sizeof(bufferTerakhirSiram), "%lu jam %lu menit lalu", jam, menit);
}
// Selesai siram manual
if (sedangMenyiram && (millis() - waktuMulaiSiram >= DURASI_SIRAM)) {
sedangMenyiram = false;
digitalWrite(PIN_SIRAM, LOW);
waktuTerakhirSiram = millis();
Serial.println("Penyiraman selesai.");
thing.stream("terakhir_siram");
}
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1