#include <WiFi.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define lampu 5
#define ldr 34
int nilaiLdr = 0;
void wifiConnect() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Terhubung ke WiFi");
Serial.println("Alamat IP: ");
Serial.println(WiFi.localIP());
}
WiFiClient espClient;
#include "PubSubClient.h"
PubSubClient client(espClient);
const char* mqttServer = "broker.emqx.io";
int port = 1883;
char clientId[] = "AViSha97sbwokwrew6454ewrewijhj91792712hjshjasga*&%^Ajas2ds21d3rgf12";
char topic_led[] = "mqtt/12321hj9179rw54rwrw2712hjshj/lampu";
char topic_ldr[] = "mqtt/12321hj9179rw54rwrw2712hjshj/ldr";
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT Server... ");
if (client.connect(clientId)) {
Serial.print(clientId);
Serial.println(" Terhubung");
client.subscribe(topic_led);
} else {
Serial.print("Gagal Terhubung, stataus=");
Serial.print(client.state());
Serial.println(" tunggu 2 detik");
delay(2000);
}
}
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Pesan Baru, Topik: ");
Serial.print(topic);
Serial.print(" Pesan: ");
String data_topic = topic;
String stMessage;
for (int i = 0; i < length; i++) {
stMessage += (char)message[i];
}
Serial.println(stMessage);
if(data_topic == topic_led){
if(stMessage == "ON"){
digitalWrite(lampu, HIGH);
}else if(stMessage == "OFF"){
digitalWrite(lampu, LOW);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(lampu, OUTPUT);
wifiConnect();
client.setServer(mqttServer, port);
client.setCallback(callback);
}
unsigned const long jeda = 1000;
unsigned long zero = 0;
void loop() {
delay(10);
if (!client.connected()) {
mqttReconnect();
}
client.loop();
if(millis() - zero >= jeda){
nilaiLdr = analogRead(ldr);
Serial.println("Mqtt Publish..." + String(nilaiLdr));
snprintf (msg, MSG_BUFFER_SIZE, "%ld", nilaiLdr);
client.publish(topic_ldr, msg);
zero = millis();
}
}