#include <WiFi.h>
#include <MQTT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClient net;
MQTTClient client;
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int redpin = 23;
const int greenpin = 19;
const int bluepin = 18;
unsigned long lastMillis = 0;
// Callback ketika pesan MQTT diterima
void messageReceived(String &topic, String &payload) {
Serial.println("Pesan diterima:");
Serial.println("Topik: " + topic);
Serial.println("Isi: " + payload);
if (topic == "esp32/cihuy") {
if (payload == "RED_ON") {
aturLED(1, 0, 0); // Merah
} else if (payload == "GREEN_ON") {
aturLED(0, 1, 0); // Hijau
} else if (payload == "BLUE_ON") {
aturLED(0, 0, 1); // Biru
} else if (payload == "OFF") {
aturLED(0, 0, 0); // Mati
}
}
}
void connectMQTT() {
while (!client.connected()) {
Serial.print("Menghubungkan MQTT...");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MQTT Connect...");
aturLED(1, 1, 0); // Kuning
if (client.connect("ping","pings-112","pinsss")) {
Serial.println("Terhubung ke MQTT!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MQTT Terhubung");
aturLED(0, 1, 0); // Hijau
client.subscribe("esp32/cihuy"); // Subscribe untuk kontrol LED
} else {
Serial.print("Gagal, kode error: ");
Serial.println(client.lastError());
Serial.println("Coba lagi...");
aturLED(1, 0, 0); // Merah
delay(2000);
}
}
}
void setup() {
Serial.begin(9600);
pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
pinMode(bluepin, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Menghubungkan WiFi...");
aturLED(1, 1, 0); // Kuning
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
Serial.println(WiFi.localIP());
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("WiFi Connected!");
lcd.setCursor(0, 1);
lcd.print(WiFi.localIP());
aturLED(0, 1, 0);
client.begin("pings-112.cloud.shiftr.io", 1883, net);
client.onMessage(messageReceived); // Tambah handler pesan
connectMQTT();
}
void loop() {
client.loop();
if (!client.connected()) {
connectMQTT();
}
if (millis() - lastMillis > 5000) {
lastMillis = millis();
client.publish("esp32/apindes", "Berhasil Terkirim");
Serial.println("Pesan dipublish ke esp32/apindes");
aturLED(0, 0, 1); // Biru saat publish
delay(200);
aturLED(0, 1, 0); // Balik ke hijau
}
}
void aturLED(int red, int green, int blue) {
digitalWrite(redpin, red);
digitalWrite(greenpin, green);
digitalWrite(bluepin, blue);
}