#include <WiFi.h>
#include <MQTT.h>
#include <ArduinoJson.h>
#include "DHTesp.h"
const int DHT_PIN = 13;
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
WiFiClient net;
MQTTClient client;
DHTesp dhtSensor;
unsigned long lastMillis = 0;
void connect() {
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.print("\nconnecting...");
while (!client.connect("esp32", "dhimas-sanber", "wTaSodFIhRHhirRU")) {
Serial.print(".");
delay(1000);
}
Serial.println("\nconnected!");
client.subscribe("smarthome/control1");
client.subscribe("smarthome/control2");
client.subscribe("smarthome/control3");
client.subscribe("smarthome/control4");
}
// Kontrol Data
void messageReceived(String &topic, String &payload) {
Serial.println(topic + ": " + payload);
// Mengurai string JSON menjadi objek JSON
StaticJsonDocument<200> parsedDoc;
deserializeJson(parsedDoc, payload);
// Mendapatkan nilai dari objek JSON yang diurai
String device = parsedDoc["device"];
int value = parsedDoc["value"];
if (topic == "smarthome/control1"){
Serial.print("Device: ");
Serial.println(device);
Serial.print("Value: ");
Serial.println(value);
if (value == 1){
digitalWrite(18, HIGH);
}
else{
digitalWrite(18, LOW);
}
}
if (topic == "smarthome/control2"){
Serial.print("Device: ");
Serial.println(device);
Serial.print("Value: ");
Serial.println(value);
if (value == 1){
digitalWrite(19, HIGH);
}
else{
digitalWrite(19, LOW);
}
}
if (topic == "smarthome/control3"){
Serial.print("Device: ");
Serial.println(device);
Serial.print("Value: ");
Serial.println(value);
if (value == 1){
digitalWrite(21, HIGH);
}
else{
digitalWrite(21, LOW);
}
}
if (topic == "smarthome/control4"){
Serial.print("Device: ");
Serial.println(device);
Serial.print("Value: ");
Serial.println(value);
if (value == 1){
digitalWrite(22, HIGH);
}
else{
digitalWrite(22, LOW);
}
}
}
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
pinMode(21, OUTPUT);
pinMode(22, OUTPUT);
// start wifi and mqtt
WiFi.begin(ssid, pass);
client.begin("dhimas-sanber.cloud.shiftr.io", net);
client.onMessage(messageReceived);
connect();
}
void loop() {
client.loop();
delay(10);
// check if connected
if (!client.connected()) {
connect();
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
if (millis() - lastMillis > 1000) {
lastMillis = millis();
StaticJsonDocument<200> doc; // Membuat dokumen JSON dengan kapasitas 200 bytes
doc["device"] = "DHT22"; // Menambahkan data ke objek JSON
doc["temperature"] = data.temperature;
doc["humidity"] = data.humidity;
// Mengonversi objek JSON menjadi string dan mencetaknya
String jsonStr;
serializeJson(doc, jsonStr);
Serial.println(jsonStr);
client.publish("smarthome/sensor", jsonStr);
}
}