#include <WiFi.h>
#include <WiFiClientSecure.h>
#include "DHTesp.h"
#include <PubSubClient.h>
#include <Arduino_JSON.h>
#define DHT_PIN 18 // Pin DHT22 terhubung ke pin 18
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
const char *mqttServer = "re7b34eb.ala.us-east-1.emqxsl.com";
const char *topic_aktuator = "monitoring/aktuator/servo";
const char *topic_suhu = "monitoring/sensor/suhu";
const char *topic_kelembapan = "monitoring/sensor/kelembapan";
// const char *topic_servo = "monitoring/aktuator";
const char *mqtt_username = "Mikon21";
const char *mqtt_password = "Mikon21";
int port = 8883;
float temperature, humidity;
unsigned long lastTime = 0;
unsigned long intervalTime = 1000;
int i=0;
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);
DHTesp dht;
void setup() {
Serial.begin(115200);
wifi_init();
mqtt_init();
dht_init();
}
void loop() {
client.loop();
if (!client.connected()) {
mqtt_init();
}
send_data();
}
void wifi_init() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, pass, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void mqtt_init() {
espClient.setCACert(root_ca);
client.setServer(mqttServer, port);
while (!client.connected()) {
String client_id = "sensor-dht-1";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to the public MQTT broker\n", client_id.c_str());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
Serial.println("Public EMQX MQTT broker connected");
client.subscribe(topic_suhu,2);
client.subscribe(topic_kelembapan);
// client.subscribe(topic_servo);
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}
void send_data(){
if (i==0){
send_data_suhu();
} else if(i==1){
send_data_kelembapan();
} else if (i==2){
send_data_aktuator();
}
}
void send_data_suhu() {
if ((millis() - lastTime) > intervalTime) {
if (!client.connected()) {
mqtt_init();
}
dht_suhu_read();
// dht_kelembaban_read();
JSONVar dataObject;
dataObject["temperature"] = temperature;
// dataObject["humidity"] = humidity;
String sData = JSON.stringify(dataObject);
client.publish(topic_suhu, sData.c_str());
// client.publish(topic_kelembaban, sData.c_str());
i++;
lastTime = millis();
}
}
void send_data_kelembapan() {
if ((millis() - lastTime) > intervalTime) {
if (!client.connected()) {
mqtt_init();
}
// dht_suhu_read();
dht_kelembaban_read();
JSONVar dataObject;
// dataObject["temperature"] = temperature;
dataObject["humidity"] = humidity;
String sData = JSON.stringify(dataObject);
// client.publish(topic_suhu, sData.c_str());
client.publish(topic_kelembapan, sData.c_str());
i++;
lastTime = millis();
}
}
void send_data_aktuator() {
if ((millis() - lastTime) > intervalTime) {
if (!client.connected()) {
mqtt_init();
}
dht_suhu_read();
dht_kelembaban_read();
JSONVar dataObject;
dataObject["temperature"] = temperature;
dataObject["humidity"] = humidity;
String sData = JSON.stringify(dataObject);
client.publish(topic_aktuator, sData.c_str());
i=0;
lastTime = millis();
}
}
void dht_init() {
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void dht_suhu_read() {
TempAndHumidity data = dht.getTempAndHumidity();
temperature = data.temperature;
humidity = data.humidity;
Serial.println("Temperature: ");
Serial.println(temperature);
}
void dht_kelembaban_read() {
TempAndHumidity data = dht.getTempAndHumidity();
temperature = data.temperature;
humidity = data.humidity;
Serial.println("Kelembaban: ");
Serial.println(humidity);
}
//Bayu Sutra
//IoT-1