#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pengaturan WiFi (Mode Access Point)
const char* ssid = "ESP32_Akses_Poin";
const char* password = "12345678"; // Password untuk WiFi AP ESP32
// Pengaturan MQTT (Menggunakan IP lokal ESP32)
const int mqttPort = 1883;
const char* mqttTopic = "topik/data";
// Pengaturan LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti 0x27 dengan alamat I2C LCD Anda
const int SDA_PIN = 18;
const int SCL_PIN = 17;
// Pengaturan Buzzer
const int buzzerPin = 22; // Pin D2 untuk buzzer
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Mengatur ESP32 sebagai Access Point
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP(); // Mendapatkan IP Access Point
Serial.print("Access Point ESP32 siap. IP address: ");
Serial.println(IP);
// Setup LCD
Wire.begin(SDA_PIN, SCL_PIN);
lcd.begin(16, 2);
lcd.backlight();
lcd.print("AP Terhubung!");
// Setup Buzzer
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW); // Mematikan buzzer pada awal
// Mengatur MQTT menggunakan IP Access Point
client.setServer(IP, mqttPort);
client.setCallback(callback);
reconnect();
}
void callback(char* topic, byte* payload, unsigned int length) {
// Terima dan tampilkan data MQTT
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("Pesan diterima: ");
Serial.println(message);
// Tampilkan pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Data:");
lcd.setCursor(0, 1);
lcd.print(message);
// Logika untuk mengaktifkan buzzer berdasarkan pesan
if (message == "ON") {
digitalWrite(buzzerPin, HIGH); // Aktifkan buzzer
} else if (message == "OFF") {
digitalWrite(buzzerPin, LOW); // Matikan buzzer
}
}
void reconnect() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("Terhubung ke MQTT");
client.subscribe(mqttTopic);
} else {
Serial.print("Gagal, rc=");
Serial.print(client.state());
Serial.println(" coba lagi dalam 5 detik");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}