#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 = 2;
const int greenpin = 4;
const int bluepin = 5;
unsigned long lastMillis = 0;
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...");
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("IP:");
lcd.print(WiFi.localIP());
aturLED(0, 1, 0); // Hijau
client.begin("broker.emqx.io", net);
client.onMessage(messageReceived);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MQTT Connect...");
while (!client.connect("Jacky")) {
Serial.print(".");
delay(1000);
}
Serial.println("MQTT Connected!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("MQTT Connected!");
client.subscribe("esp32/cihuy");
}
void messageReceived(String &topic, String &payload) {
Serial.println("=== Pesan Diterima ===");
Serial.println("Topik: " + topic);
Serial.println("Isi: " + payload);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Topik:");
lcd.setCursor(0, 1);
lcd.print(topic.substring(0, 16));
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pesan:");
lcd.setCursor(0, 1);
lcd.print(payload.substring(0, 16));
delay(2000);
}
void loop() {
client.loop();
if (millis() - lastMillis > 5000) {
lastMillis = millis();
client.publish("esp32/apindes", "ESP32 Aktif!");
Serial.println("Pesan dipublish ke esp32/status");
}
}
// Fungsi atur LED RGB
void aturLED(int red, int green, int blue) {
digitalWrite(redpin, red);
digitalWrite(greenpin, green);
digitalWrite(bluepin, blue);
}