Sistem keamanan rumah tidak selalu harus menggunakan perangkat yang mahal. Dengan memanfaatkan ESP32, sensor gerak PIR HC-SR501, dan layanan email, Anda dapat membuat sistem pendeteksi gerakan yang mampu mengirimkan notifikasi email secara otomatis ketika ada aktivitas yang terdeteksi. Pada tutorial ini, Anda akan mempelajari cara menghubungkan ESP32 dengan sensor gerak PIR (Passive Infrared Sensor) untuk mendeteksi keberadaan manusia berdasarkan perubahan radiasi inframerah. Ketika sensor mendeteksi adanya gerakan, ESP32 akan langsung terhubung ke jaringan WiFi dan mengirimkan email notifikasi kepada pengguna menggunakan protokol SMTP (Simple Mail Transfer Protocol). Sistem seperti ini sangat cocok diterapkan sebagai sistem keamanan sederhana pada rumah, kamar, kantor, gudang, maupun ruangan lain yang membutuhkan pemantauan jarak jauh.
Perangkat Keras yang Dibutuhkan
- Modul Dev ESP32 ESP-WROOM-32 38 Pin
- Sensor Gerak HC-SR501 (PIR Motion Sensor)
- Kabel USB
- Kabel jumper
Baca juga: DIYables ESP32 Gmail - Cara Mengirim Email Menggunakan Gmail dengan ESP32
Kode Program ESP32
#include <WiFi.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "YOUR_WIFI_SSID" // CHANGE IT
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD" // CHANGE IT
// the sender email credentials
#define SENDER_EMAIL "xxxxxx@gmail.com" // CHANGE IT
#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx" // CHANGE IT to your Google App password
#define RECIPIENT_EMAIL "xxxxxx@gmail.com" // CHANGE IT
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define MOTION_SENSOR_PIN 19 // ESP32 pin GPIO19 connected to motion sensor's pin
int motion_state; // current state of motion sensor
int prev_motion_state; // previous state of motion sensor
SMTPSession smtp;
void setup() {
Serial.begin(9600);
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();
pinMode(MOTION_SENSOR_PIN, INPUT);
motion_state = digitalRead(MOTION_SENSOR_PIN); // read state
}
void loop() {
prev_motion_state = motion_state; // save the last state
motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state
if (prev_motion_state == LOW && motion_state == HIGH) { // state change: LOW -> HIGH
Serial.println("Motion detected! Someone is in your room!");
String subject = "Email Notification from ESP32";
String textMsg = "This is an email sent from ESP32.\n";
textMsg += "Motion detected! Someone is in your room!";
gmail_send(subject, textMsg);
}
}
void gmail_send(String subject, String textMsg) {
// set the network reconnection option
MailClient.networkReconnect(true);
smtp.debug(1);
smtp.callback(smtpCallback);
Session_Config config;
// set the session config
config.server.host_name = SMTP_HOST;
config.server.port = SMTP_PORT;
config.login.email = SENDER_EMAIL;
config.login.password = SENDER_PASSWORD;
config.login.user_domain = F("127.0.0.1");
config.time.ntp_server = F("pool.ntp.org,time.nist.gov");
config.time.gmt_offset = 3;
config.time.day_light_offset = 0;
// declare the message class
SMTP_Message message;
// set the message headers
message.sender.name = F("ESP32");
message.sender.email = SENDER_EMAIL;
message.subject = subject;
message.addRecipient(F("To Whom It May Concern"), RECIPIENT_EMAIL);
message.text.content = textMsg;
message.text.transfer_encoding = "base64";
message.text.charSet = F("utf-8");
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;
// set the custom message header
message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));
// connect to the server
if (!smtp.connect(&config)) {
Serial.printf("Connection error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());
return;
}
if (!smtp.isLoggedIn()) {
Serial.println("Not yet logged in.");
} else {
if (smtp.isAuthenticated())
Serial.println("Successfully logged in.");
else
Serial.println("Connected with no Auth.");
}
// start sending Email and close the session
if (!MailClient.sendMail(&smtp, &message))
Serial.printf("Error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());
}
// callback function to get the Email sending status
void smtpCallback(SMTP_Status status) {
// print the current status
Serial.println(status.info());
// print the sending result
if (status.success()) {
Serial.println("----------------");
Serial.printf("Email sent success: %d\n", status.completedCount());
Serial.printf("Email sent failed: %d\n", status.failedCount());
Serial.println("----------------\n");
for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
// get the result item
SMTP_Result result = smtp.sendingResult.getItem(i);
Serial.printf("Message No: %d\n", i + 1);
Serial.printf("Status: %s\n", result.completed ? "success" : "failed");
Serial.printf("Date/Time: %s\n", MailClient.Time.getDateTimeString(result.timestamp, "%B %d, %Y %H:%M:%S").c_str());
Serial.printf("Recipient: %s\n", result.recipients.c_str());
Serial.printf("Subject: %s\n", result.subject.c_str());
}
Serial.println("----------------\n");
// free the memory
smtp.sendingResult.clear();
}
}
Wiring Diagram ESP32 dengan Sensor PIR
Cara Kerja Sistem
Sensor HC-SR501 akan terus memantau perubahan radiasi inframerah di sekitarnya. Ketika seseorang berjalan atau bergerak di depan sensor, modul PIR akan mengubah kondisi pin keluarannya menjadi HIGH. ESP32 kemudian membaca perubahan logika tersebut sebagai indikasi adanya gerakan. Setelah gerakan terdeteksi, ESP32 akan melakukan proses berikut:
1. Membaca status sensor PIR.
2. Memastikan koneksi WiFi telah tersedia.
3. Membuat koneksi ke server SMTP Gmail.
4. Menyusun isi email notifikasi.
5. Mengirim email ke alamat penerima yang telah ditentukan.
6. Menampilkan status pengiriman melalui Serial Monitor.
Dengan mekanisme ini, pengguna dapat segera mengetahui adanya aktivitas pada area yang dipantau meskipun sedang berada di lokasi yang berbeda.
Menginstal Library ESP Mail Client
Tutorial ini menggunakan library ESP Mail Client yang dikembangkan oleh Mobizt untuk mengirim email langsung dari ESP32. Ikuti langkah-langkah berikut untuk menginstalnya:
1. Hubungkan papan ESP32 ke komputer menggunakan kabel USB.
2. Buka Arduino IDE.
3. Pada menu Tools, pilih jenis papan ESP32 Dev Module (atau tipe ESP32 yang digunakan) dan pilih port COM yang sesuai.
4. Klik Library Manager pada panel sebelah kiri Arduino IDE.
5. Ketik ESP Mail Client pada kolom pencarian.
6. Pilih library ESP Mail Client yang dibuat oleh Mobizt.
7. Klik Install, kemudian tunggu hingga proses instalasi selesai.
Mengonfigurasi Program
Setelah library berhasil diinstal, lakukan konfigurasi program sebelum mengunggahnya ke ESP32.
1. Salin Kode Program
Salin seluruh kode program yang telah disediakan, kemudian tempelkan ke dalam Arduino IDE.
2. Mengatur Koneksi WiFi
Masukkan nama jaringan WiFi dan kata sandinya pada bagian berikut:
- WIFI_SSID
- WIFI_PASSWORD
Pastikan jaringan WiFi yang digunakan memiliki koneksi internet yang stabil karena ESP32 akan mengirim email melalui internet.
3. Mengatur Akun Gmail Pengirim
Selanjutnya, ubah informasi akun Gmail yang akan digunakan untuk mengirim email. Sesuaikan nilai berikut:
- SENDER_EMAIL
- SENDER_PASSWORD
Gunakan alamat Gmail yang valid beserta App Password yang telah dibuat sebelumnya.
4. Mengatur Email Tujuan
Ubah nilai berikut sesuai alamat email yang akan menerima notifikasi:
- RECIPIENT_EMAIL
Alamat email tujuan tidak harus menggunakan Gmail. Anda dapat menggunakan layanan email lain, seperti Outlook, Yahoo Mail, maupun layanan email lainnya.
Catatan Penting:
Perhatikan beberapa ketentuan berikut agar proses pengiriman email berhasil:
- Email pengirim wajib menggunakan akun Gmail.
- SENDER_PASSWORD harus berisi App Password Gmail, bukan password login akun Gmail.
- Email penerima dapat menggunakan layanan email apa pun.
Mengunggah Program ke ESP32
Setelah seluruh konfigurasi selesai dilakukan, unggah program ke papan ESP32. Langkah-langkahnya sebagai berikut:
1. Klik tombol Upload pada Arduino IDE.
2. Tunggu hingga proses kompilasi dan upload selesai.
3. Setelah upload berhasil, buka Serial Monitor.
4. Atur baud rate sesuai dengan nilai yang digunakan pada program.
Menguji Sistem
Untuk memastikan sistem bekerja dengan baik, lakukan pengujian berikut:
1. Gerakkan tangan atau berjalan di depan sensor PIR.
2. Sensor akan mendeteksi perubahan radiasi inframerah dari tubuh manusia.
3. ESP32 akan memproses sinyal tersebut dan mengirimkan email notifikasi.
4. Perhatikan informasi yang muncul pada Serial Monitor.
Jika proses berhasil, Serial Monitor akan menampilkan status bahwa email telah berhasil dikirim.
Hasil Pengujian
Setelah email berhasil dikirim, buka kotak masuk pada alamat email penerima. Anda akan menerima email notifikasi yang menandakan bahwa sensor PIR telah mendeteksi adanya gerakan di area yang dipantau.
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino



0 on: "ESP32 - Notifikasi Email Sensor Gerak Menggunakan Sensor PIR"