Project ESP32-CAM IoT : Kamera Keamanan Rumah dengan IoT Telegram

Indobot Academy

Kamera Keamanan Rumah dengan IoT Telegram
Project ESP32-CAM IoT : Membuat Kamera Keamanan Rumah dengan IoT Telegram

Halo Fanbot

Sedang ada Project apa hari ini?

Masih semangat belajar sistem IoT?

Pada project kita kali ini, kita akan membuat Kamera keamanan rumah yang akan kita hubungkan dengan aplikasi telegram sebagai notifikasi.

ESP32-CAM merupakan salah satu mikrokontroler yang memiliki fasilitas tambahan seperti kamera. Selain itu, ESP32-CAM juga sudah memiliki modul wifi yang dapat kita gunakan sebagai sistem IoT.

Di project ini, kita menggunakan sensor PIR untuk mendeteksi adanya orang yang berada di sekitar sensor. Sensor PIR ini akan mengaktifkan kamera dari ESP32-CAM untuk mengambil gambar orang yang ada di depannya. Hingga kemudian ESP32-CAM akan mengirimkan hasil gambarnya langsung ke telegram sebagai notifikasi. Bagaimana cara membuatnya? yuk kita simak.

Belajar Elektronika, Arduino, dan IoT step by step dengan bantuan tangga belajar? Daftar sekarang dan dapatkan PROMO

Kamera Keamanan Rumah dengan IoT Telegram

Alat dan Bahan

Alat dan bahan untuk project ini adalah sebagai berikut.

  1. Software Arduino IDE
  2. ESP32-CAM 1
  3. FTDI FT232RL 1
  4. Kabel jumper Secukupnya

 

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 pirSensorPin = 13;
int motionDetected = LOW;

void setup() {
  pinMode(pirSensorPin, INPUT);
  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() {
  motionDetected = digitalRead(pirSensorPin); //pembacaan sensor PIR
  if (motionDetected == HIGH) //ketika terdeteksi gerakan
  {
  if (millis() > bot_last_check + bot_check_interval) {
    sendImage();
    bot_last_check = millis();
  }
  }
delay(50);
}

 

Masukkan nama hotspot, password hotspot, dan token yang anda gunakan. Bagi kalian yang belum memiliki token untuk Telegram Bot, dapat ikuti langkah-langkahnya pada laman ini (KLIK DI SINI).

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: Project ESP32-CAM IoT : Mengkoneksikan ESP32-CAM dengan Aplikasi Telegram

 

Hasil dari project ini adalah alat yang kita buat dapat mengetahui adanya orang yang berada di dekat ESP32-CAM. Tidak hanya itu, ESP32-CAM akan mengambil gambar ketika mengetahui ada orang disekitarnya. Gambar ini kemudian dikirimkan ke telegram dalam jangka waktu 3 detik. Jadi pengguna akan dapat langsung mengetahui adanya orang di rumahnya. Jika terjadi kerusakan pada ESP32-CAM (karena maling langsung merusak kamera) gambar yang sudah terkirim, sudah dapat menjadi bukti kejahatan.

Begitulah project kita hari ini. Silakan mencoba.

Mau belajar elektronika dasar? Arduino? atau Internet of Things? Ikuti kursus online Indobot Academy!

Ingin Tahu Program Kami Lebih Lanjut?

Silahkan isi Formulir Dibawah Ini untuk Diskusi dengan Tim Indobot Academy.

Baca Juga

Bagikan:

Tags

Tinggalkan komentar

whatsapp whatsapp