#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <Arduino_JSON.h>
#include <ESP32Servo.h>
#include <DHTesp.h>
#include <Bounce2.h>
// Ganti dengan kredensial WiFi Anda
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
// Ganti dengan kredensial broker MQTT Anda
const char *mqttServer = "s219bff7.ala.asia-southeast1.emqxsl.com";
const char *topic = "iot-1/temperature";
const char *mqtt_username = "monitoring_iot_sensor";
const char *mqtt_password = "monitoring_iot_sensor";
int port = 8883;
// Ganti dengan pin servo motor dan sensor cahaya Anda
#define SERVO_PIN 18
#define LDR_PIN 34
#define DHT_PIN 26
#define LED_PIN 4
#define BUTTON_PIN 32
// Inisialisasi objek servo
Servo servo;
// Inisialisasi objek sensor DHT
DHTesp dht;
// Inisialisasi debouncer
Bounce debouncer = Bounce();
// Inisialisasi klien WiFi
WiFiClientSecure espClient;
// Inisialisasi klien MQTT
PubSubClient client(espClient);
// Inisialisasi variabel suhu dan kecerahan
float temperature;
int brightness;
// Inisialisasi variabel waktu terakhir dan interval
unsigned long lastTime = 0;
unsigned long intervalTime = 1000;
// Inisialisasi root CA
static const char *root_ca PROGMEM = R"EOF(
-----BEGIN CERTIFICATE-----
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
-----END CERTIFICATE-----
)EOF";
// Fungsi untuk inisialisasi koneksi MQTT
void mqtt_init();
// Setup awal
void setup() {
Serial.begin(115200);
dht.setup(DHT_PIN, DHTesp::DHT22);
Serial.print("Menghubungkan ke WiFi");
WiFi.begin(ssid, pass);
while (WiFi.status()!= WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Terhubung ke WiFi");
espClient.setCACert(root_ca);
client.setServer(mqttServer, port);
client.setCallback(callback);
servo.attach(SERVO_PIN);
pinMode(LDR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
debouncer.attach(BUTTON_PIN, INPUT_PULLUP);
debouncer.interval(5);
while (!client.connected()) {
mqtt_init();
}
}
// Loop utama
void loop() {
client.loop();
if (!client.connected()) {
mqtt_init();
}
if (millis() - lastTime > intervalTime) {
temperature = dht.getTemperature();
Serial.print("SUHU/TEMPERATURE : ");
Serial.println(temperature);
brightness = analogRead(LDR_PIN);
Serial.print("KECERAHAN/BRIGHTNESS : ");
Serial.println(brightness);
if (temperature > 25 && dht.getHumidity() < 60) {
servo.write(90);
delay(1000);
servo.write(0);
}
if (brightness > 800) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
JSONVar dataObject;
dataObject["temperature"] = temperature;
dataObject["brightness"] = brightness;
String sData = JSON.stringify(dataObject);
client.publish(topic, sData.c_str());
lastTime = millis();
}
debouncer.update();
if (debouncer.read() == LOW) {
// Tindak lanjut saat tombol ditekan di sini
}
}
// Fungsi untuk menangani pesan MQTT yang masuk
void callback(char *topic, byte *payload, unsigned int length) {
// Tindak lanjut pesan MQTT yang masuk di sini
}
// Fungsi untuk inisialisasi koneksi MQTT
void mqtt_init() {
espClient.setCACert(root_ca);
client.setServer(mqttServer, port);
client.setCallback(callback);
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
while (!client.connected()) {
Serial.println("Mencoba menghubungkan ke MQTT...");
if (client.connect(clientId.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Terhubung ke Broker MQTT");
client.subscribe(topic);
} else {
Serial.print("Gagal menghubungkan ke Broker MQTT, rc=");
Serial.println(client.state());
delay(5000);
}
}
}