#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <esp_now.h>
#include <WiFi.h>
#define LCD_ADDRESS 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLUMNS, LCD_ROWS);
typedef struct struct_message {
float gasReading;
bool solenoidStatus;
bool buzzerStatus;
char location[16];
} struct_message;
// Callback untuk menerima data
void OnDataRecv(const esp_now_recv_info *recv_info, const uint8_t *incomingData, int len) {
Serial.println("Data received callback triggered");
struct_message receivedData;
memcpy(&receivedData, incomingData, sizeof(receivedData));
Serial.print("Location: ");
Serial.println(receivedData.location);
Serial.print("Gas Reading: ");
Serial.println(receivedData.gasReading);
Serial.print("Solenoid Status: ");
Serial.println(receivedData.solenoidStatus);
Serial.print("Buzzer Status: ");
Serial.println(receivedData.buzzerStatus);
lcd.clear();
if (receivedData.gasReading > 850) { // Threshold gas
lcd.setCursor(0, 0);
lcd.print("Lokasi: ");
lcd.print(receivedData.location);
lcd.setCursor(0, 1);
lcd.print("Gas: ");
lcd.print(receivedData.gasReading);
lcd.print("ppm");
} else {
lcd.setCursor(0, 0);
lcd.print("Sistem Berjalan");
lcd.setCursor(0, 1);
lcd.print("Normal");
}
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.clear();
// Inisialisasi ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Daftarkan callback untuk menerima data
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
// Tidak perlu melakukan apa-apa dalam loop()
}