/********************************************************
Example Code by CGladio Platform.
Kode Ini hanya referensi, sesuaikan dengan konfigurasi
yang Anda atur di aplikasi Anda.
Follow us:
YT : https://youtube.com/@caelumgladio
https://youtube.com/@PenuDjira
IG : https://instagram.com/@caelumgladio
Tik-Tok : https://tiktok.com/@caelumgladio
*********************************************************/
#include <WiFi.h>
#include <MQTT.h>
#include <NusabotSimpleTimer.h>
#include "DHTesp.h"
DHTesp sensor_dht;
WiFiClient net;
MQTTClient client;
NusabotSimpleTimer timer;
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
String serial_number = "12345679";
// Pin Definitions
const int sensor_dht_data = 25;
const int relay_1_relay = 13;
const int relay_2_relay = 14;
// Timer Functions
void publish_sensor_dht() {
TempAndHumidity data = sensor_dht.getTempAndHumidity();
client.publish("smartpower/" + serial_number + "/dht22/temp", String(data.temperature, 2), true, 1);
client.publish("smartpower/" + serial_number + "/dht22/hum", String(data.humidity, 1), true, 1);
}
void setup() {
Serial.begin(115200);
// Pin Setup
pinMode(sensor_dht_data, INPUT);
pinMode(relay_1_relay, OUTPUT);
pinMode(relay_2_relay, OUTPUT);
// Components Setup
sensor_dht.setup(sensor_dht_data, DHTesp::DHT22);
WiFi.begin(ssid, pass);
client.begin("penudjira.cloud.shiftr.io", net);
client.onMessage(messageReceived);
// Initialize Timers
timer.setInterval(2000, publish_sensor_dht);
connect();
}
void loop() {
client.loop();
timer.run();
if(!client.connected()) {
connect();
}
delay(10);
}
void messageReceived(String &topic, String &payload) {
Serial.println("Incoming: " + topic + " - " + payload);
// Handle incoming messages
if (topic == "smartpower/" + serial_number + "/relay/cmd") {
if (payload == "on") {
digitalWrite(relay_1_relay, HIGH);
} else if (payload == "off") {
digitalWrite(relay_1_relay, LOW);
}
}
if (topic == "smartpower/" + serial_number + "/relay/cmd_2") {
if (payload == "on") {
digitalWrite(relay_2_relay, HIGH);
} else if (payload == "off") {
digitalWrite(relay_2_relay, LOW);
}
}
}
void connect() {
while(WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
String clientId = "ESP32-" + serial_number;
String statusTopic = "smartpower/status/" + serial_number;
// Set will message untuk status offline
client.setWill(statusTopic.c_str(), "offline", true, 1);
while (!client.connect(clientId.c_str(), "penudjira", "rUrCR9JVRjFlXfCZ")) {
Serial.print(".");
delay(500);
}
// Publish status online
client.publish(statusTopic.c_str(), "online", true, 1);
// Subscribe ke topic
client.subscribe("smartpower/" + serial_number + "/relay/cmd");
client.subscribe("smartpower/" + serial_number + "/relay/cmd_2");
Serial.println("Connected to MQTT broker");
}