#include <WiFi.h>
#include "PubSubClient.h"
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "broker.emqx.io";
int port = 1883;
String stMac;
char mac[50];
char clientId[50] = "PACEE112233"; // Set clientId tetap "PACEE112233"
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;
// KOMEN SENSOR PIR & LDR
// const int PIR_PIN = 13; // Pin PIR
// const int LDR_PIN = 34; // Pin LDR
const int LED = 4; // Pin LED utama
const int pinGreen = 5; // Pin untuk LED hijau
// KOMEN VARIABEL PIR
// int pirState = LOW; // Status awal sensor PIR
void setup() {
Serial.begin(115200);
delay(10);
// Koneksi WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
wifiConnect();
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqttServer, port);
client.setCallback(callback);
// Inisialisasi pin
// pinMode(PIR_PIN, INPUT);
// pinMode(LDR_PIN, INPUT);
pinMode(LED, OUTPUT);
pinMode(pinGreen, OUTPUT); // Inisialisasi pin LED hijau
}
void wifiConnect() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
}
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
sprintf(msg, "PACEE112233-%ld", random(1000)); // Client ID unik
if (client.connect(msg)) {
Serial.println(" connected");
client.subscribe("OpenCV-IoT6601");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
mqttReconnect();
}
client.loop();
// KOMEN PEMBACAAN SENSOR PIR & LDR
// int ldrValue = analogRead(LDR_PIN);
// int pirValue = digitalRead(PIR_PIN);
// Logika untuk sensor PIR (Dikomentari)
/*
if (pirValue == HIGH && pirState == LOW) {
Serial.println("TERDETEKSI");
digitalWrite(LED, HIGH);
pirState = HIGH;
} else if (pirValue == LOW && pirState == HIGH) {
Serial.println("TIDAK_TERDETEKSI");
digitalWrite(LED, LOW);
pirState = LOW;
}
*/
// Interpretasi data sensor LDR (Dikomentari)
/*
String ldrStatus = (ldrValue > 800) ? "GELAP" : (ldrValue < 450) ? "TERANG" : "SEDANG";
Serial.println("========== Pembacaan Sensor ==========");
Serial.print("LDR Value: ");
Serial.println(ldrValue);
Serial.print("LDR Status: ");
Serial.println(ldrStatus);
Serial.print("PIR Status: ");
Serial.println(pirValue == HIGH ? "TERDETEKSI" : "TIDAK_TERDETEKSI");
*/
delay(500);
}
void callback(char* topic, byte* message, unsigned int length) {
String payload = "";
for (unsigned int i = 0; i < length; i++) {
payload += (char)message[i];
}
// Mengendalikan LED berdasarkan payload "ON" atau "OFF"
if (payload == "ON") {
digitalWrite(pinGreen, HIGH);
Serial.println("LED ON");
} else if (payload == "OFF") {
digitalWrite(pinGreen, LOW);
Serial.println("LED OFF");
}
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("]: ");
Serial.println(payload);
}