#include <WiFi.h>
#include <HTTPClient.h>
int pirPin = 14; // Sensor PIR terhubung ke pin 14
int pirState = LOW; // Inisialisasi status PIR sebagai LOW
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String phoneNumber = "6289630873888"; //Nomor telepon WhatsApp
String apiKey = "8721437"; //API Key CallMeBot
// Fungsi untuk melakukan encoding URL
String urlEncode(String str) {
String encodedString = "";
for (unsigned int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == ' ') {
encodedString += '+';
} else if (isalnum(c)) {
encodedString += c;
} else {
encodedString += '%';
encodedString += String(c >> 4, HEX);
encodedString += String(c & 0x0F, HEX);
}
}
return encodedString;
}
// Fungsi untuk mengirim pesan melalui CallMeBot API
void sendMessage(String message) {
String encodedMessage = urlEncode(message);
String url = "https://api.callmebot.com/whatsapp.php?phone=6289630873888&text=This+is+a+test&apikey=8721437" + phoneNumber + "&apikey=" + apiKey + "&text=" + encodedMessage;
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpResponseCode = http.POST("");
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
String payload = http.getString();
Serial.println("Response payload: ");
Serial.println(payload);
if (httpResponseCode == 200) {
Serial.println("Message sent successfully");
} else {
Serial.println("Error sending the message");
}
} else {
Serial.print("Error on sending POST: ");
Serial.println(httpResponseCode);
}
http.end();
}
void setup() {
Serial.begin(115200);
pinMode(pirPin, INPUT); // Set PIR pin as input
// Koneksi ke Wi-Fi
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
// Print the API key to the Serial Monitor
Serial.print("API Key: ");
Serial.println(apiKey);
// Kirim pesan awal jika ingin mengirim pesan ketika pertama kali terhubung
sendMessage("Sensor Gerak Aktif! " + WiFi.localIP().toString());
}
void loop() {
int motionDetected = digitalRead(pirPin);
if (motionDetected == HIGH) {
if (pirState == LOW) {
// PIR state berubah menjadi HIGH, artinya gerakan terdeteksi
Serial.println("Motion detected!");
sendMessage("Gerak Terdeteksi!");
pirState = HIGH;
}
} else {
if (pirState == HIGH) {
// PIR state berubah menjadi LOW, artinya gerakan berhenti
Serial.println("Motion ended");
pirState = LOW;
}
}
delay(100); // Tambahkan delay kecil untuk mengurangi beban pemrosesan
}