// #include <WiFi.h>
// #include <PubSubClient.h>
// #include <DHTesp.h>
// #include <ArduinoJson.h>
// #define DHT_PIN 16
// #define LED1 2
// #define LED2 4
// #define TRIG_PIN 12
// #define ECHO_PIN 14
// const char* ssid = "Wokwi-GUEST";
// const char* password = "";
// const char* mqtt_server = "broker.emqx.io";
// unsigned long lastMsg = 0;
// WiFiClient espClient;
// DHTesp dht;
// PubSubClient client(espClient);
// void setup_wifi() {
// delay(10);
// Serial.println();
// Serial.print("Connecting to ");
// Serial.println(ssid);
// WiFi.mode(WIFI_STA);
// WiFi.begin(ssid, password);
// while (WiFi.status() != WL_CONNECTED) {
// delay(500);
// Serial.print(".");
// }
// Serial.println();
// Serial.println("WiFi connected");
// Serial.print("IP address: ");
// Serial.println(WiFi.localIP());
// }
// // CALLBACK
// void callback(char* topic, byte* payload, unsigned int length) {
// Serial.print("Message arrived [");
// Serial.print(topic);
// Serial.print("] ");
// String payloadStr = "";
// for (int i = 0; i < length; i++) {
// payloadStr += (char)payload[i];
// }
// Serial.print(payloadStr);
// Serial.println();
// StaticJsonDocument<64> doc;
// DeserializationError error = deserializeJson(doc, payload);
// if (error) {
// Serial.print("JSON parsing failed: ");
// Serial.println(error.c_str());
// String fallbackData = payloadStr;
// if (String(topic) == "LED1") {
// if (fallbackData == "ON") {
// digitalWrite(LED1, HIGH);
// } else if (fallbackData == "OFF") {
// digitalWrite(LED1, LOW);
// }
// } else if (String(topic) == "LED2") {
// if (fallbackData == "ON") {
// digitalWrite(LED2, HIGH);
// } else if (fallbackData == "OFF") {
// digitalWrite(LED2, LOW);
// }
// }
// return;
// }
// // Ambil nilai dari key "msg"
// String command = doc["msg"].as<String>();
// // LED 1
// if (String(topic) == "LED1") {
// if (command == "ON") {
// digitalWrite(LED1, HIGH);
// Serial.println("-> LED1 ON by JSON command");
// } else if (command == "OFF") {
// digitalWrite(LED1, LOW);
// Serial.println("-> LED1 OFF by JSON command");
// }
// }
// // LED 2
// if (String(topic) == "LED2") {
// if (command == "ON") {
// digitalWrite(LED2, HIGH);
// Serial.println("-> LED2 ON by JSON command");
// } else if (command == "OFF") {
// digitalWrite(LED2, LOW);
// Serial.println("-> LED2 OFF by JSON command");
// }
// }
// }
// // Konek
// void reconnect() {
// while (!client.connected()) {
// Serial.print("Attempting MQTT connection...");
// String clientId = "ESP32Client-1800";
// if (client.connect(clientId.c_str())) {
// Serial.println("Connected to MQTT broker");
// client.subscribe("LED1");
// client.subscribe("LED2");
// client.publish("/ThinkIOT/Publish", "IOT PRAKTIK CONNECTED");
// } else {
// Serial.print("Failed, rc=");
// Serial.print(client.state());
// Serial.println(" try again in 5 seconds");
// delay(5000);
// }
// }
// }
// float readDistanceCM() {
// digitalWrite(TRIG_PIN, LOW);
// delayMicroseconds(2);
// digitalWrite(TRIG_PIN, HIGH);
// delayMicroseconds(10);
// digitalWrite(TRIG_PIN, LOW);
// long duration = pulseIn(ECHO_PIN, HIGH, 30000);
// float distance = duration * 0.034 / 2;
// return distance;
// }
// void setup() {
// Serial.begin(115200);
// pinMode(LED1, OUTPUT);
// pinMode(LED2, OUTPUT);
// pinMode(TRIG_PIN, OUTPUT);
// pinMode(ECHO_PIN, INPUT);
// setup_wifi();
// client.setServer(mqtt_server, 1883);
// client.setCallback(callback);
// client.setKeepAlive(60);
// dht.setup(DHT_PIN, DHTesp::DHT22);
// }
// void loop() {
// if (!client.connected()) {
// reconnect();
// }
// client.loop();
// unsigned long now = millis();
// if (now - lastMsg > 100) {
// lastMsg = now;
// // Sensor DHT22
// TempAndHumidity data = dht.getTempAndHumidity();
// String temp = String(data.temperature, 2);
// String hum = String(data.humidity, 1);
// client.publish("suhu1800", temp.c_str());
// client.publish("humid1800", hum.c_str());
// // Ultrasonic
// float distance = readDistanceCM();
// String distStr = String(distance, 1);
// client.publish("jarak1800", distStr.c_str());
// Serial.print("Temperature: ");
// Serial.println(temp);
// Serial.print("Humidity: ");
// Serial.println(hum);
// Serial.print("Distance: ");
// Serial.print(distance);
// Serial.println(" cm");
// Serial.print("LED1 Status: ");
// Serial.println(digitalRead(LED1) ? "ON" : "OFF");
// Serial.print("LED2 Status: ");
// Serial.println(digitalRead(LED2) ? "ON" : "OFF");
// Serial.println("-------------------");
// }
// }
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHTesp.h>
#include <ArduinoJson.h>
#define DHT_PIN 16
#define LED1 2
#define LED2 4
#define TRIG_PIN 12
#define ECHO_PIN 14
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.emqx.io";
const char* mqtt_user = "YOOPZ";
const char* mqtt_pass = "SOLID@1800";
const char* mqtt_client = "mqttx_7ba500c4";
unsigned long lastMsg = 0;
WiFiClient espClient;
DHTesp dht;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String payloadStr;
for (int i = 0; i < length; i++) {
payloadStr += (char)payload[i];
}
Serial.println(payloadStr);
StaticJsonDocument<64> doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
if (String(topic) == "dataled1/LED1/IOT") {
digitalWrite(LED1, payloadStr == "ON" ? HIGH : LOW);
} else if (String(topic) == "dataled2/LED2/IOT") {
digitalWrite(LED2, payloadStr == "ON" ? HIGH : LOW);
}
return;
}
String command = doc["msg"].as<String>();
if (String(topic) == "dataled1/LED1/IOT") {
digitalWrite(LED1, command == "ON" ? HIGH : LOW);
}
if (String(topic) == "dataled2/LED2/IOT") {
digitalWrite(LED2, command == "ON" ? HIGH : LOW);
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(mqtt_client, mqtt_user, mqtt_pass)) {
Serial.println("Connected to MQTT broker");
client.subscribe("dataled1/LED1/IOT");
client.subscribe("dataled2/LED2/IOT");
client.publish("data/status/IOT", "IOT CONNECTED");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000);
float distance = duration * 0.034 / 2;
return distance;
}
void setup() {
Serial.begin(115200);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
client.setKeepAlive(60);
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - lastMsg > 100) {
lastMsg = now;
TempAndHumidity data = dht.getTempAndHumidity();
String temp = String(data.temperature, 2);
String hum = String(data.humidity, 1);
client.publish("datasuhu/suhu/IOT", temp.c_str());
client.publish("datahumidity/humidity/IOT", hum.c_str());
float distance = readDistanceCM();
String distStr = String(distance, 1);
client.publish("datajarak/jarak/IOT", distStr.c_str());
Serial.print("Temperature: ");
Serial.println(temp);
Serial.print("Humidity: ");
Serial.println(hum);
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
Serial.print("LED1 Status: ");
Serial.println(digitalRead(LED1) ? "ON" : "OFF");
Serial.print("LED2 Status: ");
Serial.println(digitalRead(LED2) ? "ON" : "OFF");
Serial.println("-------------------");
}
}