#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <Arduino_JSON.h>
#include <DHT.h>
#define DHTPIN 18 // Pin tempat sensor DHT22 terhubung
#define DHTTYPE DHT22 // Tipe sensor DHT
const char *mqttServer = "zb1fa810.ala.asia-southeast1.emqxsl.com";
const char *topicTemperature = "monitoring/sensor/suhu"; // Untuk suhu
const char *topicHumidity = "monitoring/sensor/kelembapan"; // Untuk kelembapan
const char *topicControl = "monitoring/sensor/control";
const char *mqtt_username = "mentoring";
const char *mqtt_password = "mentoring";
int port = 8883;
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";
WiFiClientSecure espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
void mqtt_init();
void sendData(const char* topicControl);
void setup() {
Serial.begin(115200);
WiFi.begin("Wokwi-GUEST", "");
Serial.println("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print('.');
}
Serial.println("Connected");
espClient.setCACert(root_ca);
client.setServer(mqttServer, port);
while (!client.connected()) {
mqtt_init();
}
dht.begin();
}
void loop() {
sendData(topicControl);
delay(2000); // Kirim data setiap 2 detik
}
void mqtt_init() {
espClient.setCACert(root_ca);
client.setServer(mqttServer, port);
while (!client.connected()) {
// Lakukan koneksi ke server MQTT
if (client.connect("pub-esp32-iot-6", mqtt_username, mqtt_password)) {
Serial.println("Connected to MQTT server");
} else {
Serial.print("Failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}
void sendData(const char* topicControl) {
float temperature = dht.readTemperature(); // Baca suhu
float humidity = dht.readHumidity(); // Baca kelembapan
// Mengubah nilai float menjadi bilangan bulat
int temperatureInt = (int)temperature;
int humidityInt = (int)humidity;
// Buat objek JSON untuk data
JSONVar dataObject;
dataObject["temperature"] = temperatureInt;
dataObject["humidity"] = humidityInt;
// Konversi ke string JSON
String sData = JSON.stringify(dataObject);
Serial.println(sData);
// Publish data ke MQTT server
client.publish(topicTemperature, sData.c_str()); // Publish data suhu
client.publish(topicHumidity, sData.c_str()); // Publish data kelembapan
// Send control message to topic for servo
JSONVar controlObject;
controlObject["temperature"] = temperatureInt;
controlObject["humidity"] = humidityInt;
controlObject["light_intensity"] = 0; // Set nilai intensitas cahaya ke 0 untuk skema relay
String controlData = JSON.stringify(controlObject);
client.publish(topicControl, controlData.c_str()); // Publish data kontrol ke topik
}