#include <WiFi.h>
#include <HTTPClient.h>
#include <ESP32Servo.h>
const char* ssid = "KELOMPOK4";
const char* password = "1234";
const char* twilioAccountSid = "https://api.twilio.com/2010-04-01/Accounts/ACec6a31b782b3ca1d55c856fd734618f6/Messages.json'";
const char* twilioAuthToken = "ACec6a31b782b3ca1d55c856fd734618f6";
const char* fromNumber = "+14155238886";
const char* toNumber = "+62895806566684";
const int potPin = 2; // Hubungkan keluaran potensiometer ke pin GPIO 2 pada ESP32
const int buzzerPin = 12; // Hubungkan buzzer ke pin GPIO 12 pada ESP32
const int servoPin = 13; // Hubungkan servo ke pin GPIO 13 pada ESP32
const int gasSensorPin = 34; // Hubungkan sensor gas ke pin GPIO 34 pada ESP32
const int ledPin = 14; // Hubungkan LED ke pin GPIO 14 pada ESP32
const int resistorValue = 10000; // Nilai resistor yang digunakan dalam rangkaian potensiometer (misalnya 10k Ohm)
Servo mendeteksiGas; // Buat objek servo
void setup() {
Serial.begin(9600); // Inisialisasi komunikasi serial
pinMode(buzzerPin, OUTPUT); // Set pin buzzer sebagai output
pinMode(ledPin, OUTPUT); // Set pin LED sebagai output
mendeteksiGas.attach(servoPin); // Hubungkan objek servo ke pin servo
// Inisialisasi koneksi WiFi
connectWiFi();
}
void loop() {
// Membaca nilai dari potensiometer
int potValue = analogRead(potPin);
Serial.print("Potensiometer Value: ");
Serial.println(potValue);
// Membaca nilai dari sensor gas
int gasValue = analogRead(gasSensorPin);
Serial.print("Gas Sensor Value: ");
Serial.println(gasValue);
// Jika nilai sensor gas melebihi batas tertentu, gerakkan servo untuk mematikan regulator gas
if (gasValue > 800) {
mendeteksiGas.write(0); // Gerakkan servo ke posisi 0 derajat (misalnya, untuk mematikan regulator gas)
digitalWrite(ledPin, HIGH); // Nyalakan LED
sendWhatsAppMessage("Gas Detected!"); // Kirim pesan WhatsApp
delay(1000); // Tunda sebentar untuk memastikan servo bergerak
} else {
// Jika tidak ada kebocoran gas, gerakkan servo sesuai dengan nilai potensiometer
int angle = map(potValue, 0, 4095, 0, 180); // Map nilai potensiometer ke sudut servo
mendeteksiGas.write(angle); // Putar servo sesuai dengan nilai potensiometer
digitalWrite(ledPin, LOW); // Matikan LED
}
// Mengecek pesan yang diterima dari ESP32 melalui Serial
if (Serial.available() > 0) {
String message = Serial.readStringUntil('\n'); // Baca data yang diterima dari ESP32
Serial.print("Mendeteksi Gas: ");
Serial.println(message); // Cetak data yang diterima dari ESP32
}
Serial.println("Mendeteksi Gas!"); // Kirim pesan "Mendeteksi Gas" dari ESP32
// Generate sound on buzzer based on potensiometer value
tone(buzzerPin, potValue); // Generate sound with frequency based on potensiometer value
delay(1000); // Tunda selama 1 detik sebelum membaca kembali
}
void connectWiFi() {
Serial.println("Aman");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Tidak Aman");
}
Serial.println("Connected to WiFi");
}
void sendWhatsAppMessage(String message) {
HTTPClient http;
http.begin("https://api.twilio.com/2010-04-01/Accounts/" + String(twilioAccountSid) + "/Messages.json");
http.setAuthorization(twilioAccountSid, twilioAuthToken);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String postData = "From=whatsapp:" + String(fromNumber) + "&To=whatsapp:" + String(toNumber) + "&Body=" + message;
int httpResponseCode = http.POST(postData);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println(httpResponseCode);
Serial.println(response);
} else {
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
http.end();
}