// Mengakses library
#include <WiFi.h> // library WiFi esp32
#include <PubSubClient.h> // library MQTT
#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk mengendalikan LCD I2C
// data LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // alamat I2C LCD: 0x27, Ukuran LCD: 16x2
// Data akun ssid Wifi yang disediakan wokwi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Data MQTT Broker
char *mqttServer = "broker.hivemq.com"; //hostname
int mqttPort = 1883; //port
char *mqttTopic = "sija/iot/aya"; //nama broker
// Variabel data yang dikirim
int angka = 0; // variabel untuk menyimpan angka bilangan bulat bertipe integer
String myString ; // variabel myString bertipe string
// Membuat object untuk mengelola wifiClient
WiFiClient wifiClient;
// Membuat objek mqttClient setelah mendapat koneksi internet dari wificlient
PubSubClient mqttClient(wifiClient);
// Mendeklarasikan function
void connectToInternet();
void setupMQTT();
void reconnectMQTT();
// blok setup menginisalisasi program
// konfigurasi program sebelum dijalankan
void setup() {
Serial.begin(115200); //mengaktifkan Serial monitor
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Menyalakan backlight LCD
// memanggil function connectToInternet() untuk koneksi ke SSID
connectToInternet();
// memanggil function setupMQTT() untuk koneksi ke MQQ Broker
setupMQTT(); // setup koneksi ke broker
}
// Program utama atau main program
void loop() {
//Mengecek koneksi ke MQTT Broker
if (!mqttClient.connected()){
reconnectMQTT(); // jika putus koneksi, dicoba lagi
}
// koneksi ke MQTT broker lancar
// mengirimkan data angka 0 - 100 dengan jeda 1 detik
if (angka<100){
//menampilkan data pada Serial monitor
Serial.print("Angka : ");
Serial.println(angka);
// mempublish data angka ke MQTT broker
// data yang dikirim harus bertipe string
// data angka dikonversi ke string dengan object String().c_str()
mqttClient.publish(mqttTopic,String(angka).c_str());
delay(1000);
// Menampilkan angka di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Angka: ");
lcd.print(angka);
delay(1000);
// menambah counter angka
angka++;
}
else {
// angka direset kembali ke nol
angka = 0;
}
}
// function connectToInternet()
// bertugas menjalankan tugas konek ke SSID
void connectToInternet(){
WiFi.begin(ssid, password); // Mencoba connect ke Wifi
// Melakukan pengecekan terhadap status koneksi ke WI-Fi
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); //indikator
}
Serial.println("");
Serial.println("Connected to Wi-Fi"); //indikator berhasil
}
// 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 Cliend ID untuk setiap device
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
// menampilkan pesan koneksi ke MTQQ broker sukses
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
}
}
}