const int LEDPIN = 0;
const int PushButton = 4;
// Mengakses library
#include <WiFi.h> // library WiFi esp32
#include <PubSubClient.h> // library MQTT
// Data akun Wifi yang disediakan wokwi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Data MQTT Broker
// broker.hivemq.com versi free tanpa username dan password
char *mqttServer = "broker.hivemq.com";
int mqttPort = 1883;
char *mqttTopic = "yumna/push_button";
// Membuat object
WiFiClient wifiClient; // Membuat objek wifiClient
PubSubClient mqttClient(wifiClient); // Membuat objek mqttClient dengan konstruktor objek WiFiClient (Permintaan dari Lib)
// Mendeklarasikan function
void connectToInternet(); // function untuk melayani koneksi ke SSID
void setupMQTT(); // function seting data koneksi ke MQTT server
void reconnectMQTT(); // function koneksi ulang ke MQTT server, jika koneksi dengan MQTT server putus
void setup(){
Serial.begin(115200);
// memanggil function connectToInternet() untuk koneksi ke SSID
connectToInternet();
// memanggil function setupMQTT() untuk koneksi ke MQQ Broker
setupMQTT(); // setup koneksi ke broker
pinMode(LEDPIN, OUTPUT);
pinMode(PushButton, INPUT);
}
void loop(){
// Mengecek koneksi ke MQTT Broker
if (!mqttClient.connected()){
reconnectMQTT(); // jika putus koneksi, dicoba lagi
}
// Read the state of the push button
int pushButtonState = digitalRead(PushButton);
String pushButtonStateStr = (pushButtonState == HIGH) ? "ON" : "OFF";
// Publish the push button state
mqttClient.publish(mqttTopic, pushButtonStateStr.c_str());
// Control the LED based on the push button state
if (pushButtonState == HIGH) {
digitalWrite(LEDPIN, HIGH);
Serial.println("LED On");
} else {
digitalWrite(LEDPIN, LOW);
Serial.println("LED Off");
}
// Delay to prevent spamming
delay(200);
}
void connectToInternet(){
WiFi.begin(ssid, password); // Mencoba connect ke Wifi
Serial.print("Connecting to Wi-Fi");
// Melakukan pengecekan terhadap status koneksi ke Wi-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to Wi-Fi");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// mengatur dan menginisialisasi koneksi ke broker MQTT
void setupMQTT() {
mqttClient.setServer(mqttServer, mqttPort); // Mengatur detail broker target yang digunakan
}
// untuk melakukan koneksi ulang (reconnect) ke broker MQTT
// jika klien kehilangan koneksi dengan broker
// atau gagal melakukan koneksi saat pertama kali menjalankan program.
// ESP32 Reconnect to broker
void reconnectMQTT() {
Serial.println("Connecting to MQTT Broker...");
while (!mqttClient.connected()) {
Serial.println("Reconnecting to MQTT Broker..");
// membuat Client ID untuk setiap device
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
// menampilkan pesan koneksi ke MQTT broker sukses
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
} else {
Serial.print("Failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}