Pada artikel ini kita akan membuat project dengan ESP32-CAM. Saat ini kejahatan sangat sulit dihindari. Salah satunya adalah adanya perampokan. Kita perlu mengetahui siapa tamu kita sebelum kita mempersilakan masuk. Hal yang ditakutkan adalah ketika ternyata orang tersebut memiliki niat yang tidak baik kepada kita.
Nah di project ini, kita akan membuat sebuat project yang dapat mengambil foto ketika ada tamu yang datang. Foto ini dikirimkan ke Telegram agar dapat langsung diketahui oleh pengguna. Nah bagaimana cara membuatnya? yuk kita simak.
Smart Bell dengan Kamera Otomatis untuk Mengetahui Siapa Tamu Anda
Alat dan Bahan
Alat dan bahan untuk project ini adalah sebagai berikut.
- Software Arduino IDE
- ESP32-CAM 1
- FTDI FT232RL 1
- Buzzer 1
- Button 1
- Kabel jumper Secukupnya
Belajar Elektronika, Arduino, dan IoT step by step dengan bantuan tangga belajar? Daftar sekarang dan dapatkan PROMO
Rangkaian
Susun komponen di atas menjadi rangkaian berikut.
baca juga: Tutorial ESP32-CAM : Pengambilan Foto dan Simpan ke MicroSD
Program
Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti berikut. Jangan lupa untuk menambahkan board baru untuk ESP32 dan Universal telegram bot agar tidak terjadi error. Atur board ke AI Thinker ESP32-CAM.
#include <WiFi.h> #include <WiFiClientSecure.h> #include "esp_camera.h" #include "UniversalTelegramBot.h" #define BOT_TOKEN "your_bot_it" #define chat_id "your_id" #define _debug const char* ssid = "wifi_ssid"; const char* password = "wifi_pwd"; WiFiClientSecure client; UniversalTelegramBot bot(BOT_TOKEN, client); long bot_last_check; int bot_check_interval = 3000; bool hasMoreData; camera_fb_t * fb = NULL; bool hasMoreDataAvailable(); byte* getNextBuffer(); int getBufferLen(); //CAMERA_MODEL_AI_THINKER #define PWDN_GPIO_NUM 32 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 0 #define SIOD_GPIO_NUM 26 #define SIOC_GPIO_NUM 27 #define Y9_GPIO_NUM 35 #define Y8_GPIO_NUM 34 #define Y7_GPIO_NUM 39 #define Y6_GPIO_NUM 36 #define Y5_GPIO_NUM 21 #define Y4_GPIO_NUM 19 #define Y3_GPIO_NUM 18 #define Y2_GPIO_NUM 5 #define VSYNC_GPIO_NUM 25 #define HREF_GPIO_NUM 23 #define PCLK_GPIO_NUM 22 int button = 13; int buzzer = 12; int KlikButton = LOW; void setup() { pinMode(button, INPUT); pinMode(buzzer, OUTPUT); Serial.begin(9600); Serial.setDebugOutput(true); Serial.println(); camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sscb_sda = SIOD_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; // jika ada PSRAM IC, init dengan UXGA resolution dan kualitas JPEG yang lebih tinggi // untuk buffer bingkat pra-alokasi yang lebih besar. if(psramFound()){ config.frame_size = FRAMESIZE_QVGA; config.jpeg_quality = 10; config.fb_count = 2; } else { config.frame_size = FRAMESIZE_QVGA; config.jpeg_quality = 12; config.fb_count = 1; } // camera init esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } sensor_t * s = esp_camera_sensor_get(); // tampilan awal yang digunakan adalah vertikal dan warna agak jenuh if (s->id.PID == OV3660_PID) { s->set_vflip(s, 1); // flip tampilan s->set_brightness(s, 1); // menaikkan sedikit kecerahan s->set_saturation(s, 0); // menurunkan saturasi } //drop down ukuran frame untuk frame rate awal yang lebih tinggi s->set_framesize(s, FRAMESIZE_QVGA); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); bot.longPoll = 60; } bool hasMoreDataAvailable() { Serial.println("Has more daa"); if (hasMoreData) { hasMoreData = false; return true; } return false; } byte* getNextBuffer() { Serial.println("Next Buffer "); if (fb) return fb->buf; return nullptr; } int getBufferLen() { Serial.println("Buffer len"); if (fb) return fb->len; return 0; } void sendImage() { Serial.println("Sending Image"); fb = NULL; fb = esp_camera_fb_get(); hasMoreData = true; Serial.println(fb->len); bot.sendPhotoByBinary(chat_id, "image/jpeg", fb->len, hasMoreDataAvailable, nullptr, getNextBuffer, getBufferLen); esp_camera_fb_return(fb); } void loop() { KlikButton = digitalRead(button); //pembacaan sensor PIR if (KlikButton == HIGH) //ketika terdeteksi gerakan { digitalWrite(buzzer,HIGH); if (millis() > bot_last_check + bot_check_interval) { sendImage(); bot_last_check = millis(); } } else { digitalWrite(buzzer,LOW); } } |
Masukkan nama hotspot, password hotspot, dan token yang anda gunakan.
Upload program di atas ke ESP32-CAM. Jangan lupa untuk menghubungkan dulu GPIO 0 ke GND agar program dapat ter-upload dengan baik.
Jika sketch sudah terkirim secara keseluruhan, maka cabutlah GPIO 0 dari GND untuk memasukkan pada Running Mode dari ESP32-CAM. Selanjutnya, buka serial monitor untuk melihat hasilnya.
Baca juga: Tutorial ESP32-CAM : Kamera Otomatis untuk Mengambil Foto Satwa Liar
Hasil dari program di atas adalah ketika ada orang yang menekan bel rumah kita, alat akan mengambil foto dari orang yang menekan bel. Foto ini kemudian akan dikirimkan ke telegram bot yang sudah dibuat. Sehingga kita bisa langsung melihat siapa yang akan bertamu ke tempat kita. Jika kita tidak mengenalnya maka kita dapat lebih waspada. Bisa juga digunakan ketika kita sedang berada di luar rumah. Kita juga dapat mengetahui orang yang ingin bertamu ke tempat kita.
Tertarik untuk mencobanya?
Mau belajar elektronika dasar? Arduino? atau Internet of Things? Ikuti kursus online Indobot Academy!