#include <WiFi.h>
#include "ThingSpeak.h"
#include <LiquidCrystal_I2C.h>
#define WIFI_SSID "Wokwi-GUEST" // ganti dengan nama jaringan WiFi kamu
#define WIFI_PASSWORD "" // ganti dengan kata sandi WiFi kamu
#define SECRET_CH_ID 2331756 // ganti dengan nomor channel kamu
#define SECRET_WRITE_APIKEY "QOCITVGF62V1BB7I" // ganti dengan API Key write channel kamu
#define MQ2 34 // pin analog MQ2
#define LED 14 // pin LED
#define BUZZER_PIN 4 // pin Buzzer
WiFiClient client;
unsigned long myChannelNumber = SECRET_CH_ID;
const char *myWriteAPIKey = SECRET_WRITE_APIKEY;
int gas;
unsigned long dataMillis = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD (0x27 adalah alamat I2C)
void setup() {
Serial.begin(115200); // Inisialisasi serial
pinMode(MQ2, INPUT);
pinMode(LED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(LED, LOW);
digitalWrite(BUZZER_PIN, LOW);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
ThingSpeak.begin(client); // Inisialisasi ThingSpeak
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Hidupkan backlight
lcd.setCursor(0, 0);
lcd.print("Gas: ");
}
void loop() {
gas = analogRead(MQ2);
Serial.printf("Gas: %d\n", gas);
ThingSpeak.setField(3, gas);
if (millis() - dataMillis > 20000) {
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Channel update successful.");
} else {
Serial.println("Problem updating channel. HTTP error code " + String(x));
}
dataMillis = millis();
}
if (gas > 500) {
digitalWrite(LED, HIGH);
tone(BUZZER_PIN, 1000); // Aktifkan buzzer dengan frekuensi 1000Hz
lcd.setCursor(5, 1);
lcd.print("Gas detected!");
} else {
digitalWrite(LED, LOW);
noTone(BUZZER_PIN); // Pastikan buzzer mati
lcd.setCursor(5, 1);
lcd.print(" "); // Hapus pesan sebelumnya
}
lcd.setCursor(5, 0); // Posisi kursor di baris 0, kolom 5
lcd.print(" "); // Hapus nilai sebelumnya
lcd.setCursor(5, 0);
lcd.print(gas);
delay(2000); // Tampilkan setiap 2 detik sekali
}