Tutorial ESP32-CAM : Pengambilan Foto dan Simpan ke MicroSD

Indobot Academy

Halo Fnbot. Sedang ada project apa hari ini? Bagi kalian yang masuk ke sini pastinya lagi belajar Tutorial ESP32-CAM atau malh sedang ada project menggunakan device ini? ESP32CAM merupakan salah satu mikrokontroler yang memiliki fungsi tambahan berupa Bluetooth, WLAN, kamera dan slot microSD. ESP32CAM ini umumnya di gunakan untuk pemantauan atau kontrol project yang memerlukan pengaturan kamera seperti CCTV, streaming, keamanan rumah, atau yang lainnya.

Pada project kali ini, kita akan mencoba untuk melakukan pengambilan Foto yang akan kemudian di simpan ke MicroSD yang sudah di sediakan slot-nya di ESP32-CAM. Bagaimana cara membuatnya? Yuk kita simak.

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

 

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: Mengenal ESP32-Cam dan bagaimana cara menggunakannya

 

Program

Tahap selanjutnya adalah penulisan program pada Arduino IDE. Buatlah program seperti berikut. Jangan lupa untuk menambahkan board baru untuk ESP32 agar tidak terjadi error. Atur board ke AI Thinker ESP32-CAM.

 

 

/*********
  Project Pengambilan foto untuk di simpan dalam MicroSD
  Oleh: Rui Santos
  
*********/

#include "esp_camera.h"
#include "Arduino.h"
#include "FS.h"                // SD Card ESP32
#include "SD_MMC.h"            // SD Card ESP32
#include "soc/soc.h"           // Menonaktifkan brownour problems
#include "soc/rtc_cntl_reg.h"  // Menonaktifkan brownour problems
#include "driver/rtc_io.h"
#include <EEPROM.h>            // baca dan di tuliskan dalam flash memory

// define untuk jumlah byte yang Anda akses
#define EEPROM_SIZE 1

// Pin definition for 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 pictureNumber = 0;

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
 
  Serial.begin(115200);
  //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; 
  
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA; // FRAMESIZE_ + QVGA|CIF|VGA|SVGA|XGA|SXGA|UXGA
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
  
  // Init Camera
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }
  
  //Serial.println("Starting SD Card");
  if(!SD_MMC.begin()){
    Serial.println("SD Card Mount Failed");
    return;
  }
  
  uint8_t cardType = SD_MMC.cardType();
  if(cardType == CARD_NONE){
    Serial.println("No SD Card attached");
    return;
  }
    
  camera_fb_t * fb = NULL;
  
  // Pengambilan gambar dengan Camera
  fb = esp_camera_fb_get();  
  if(!fb) {
    Serial.println("Pengambilan gambar Gagal");
    return;
  }
  // inisialisasi EEPROM dengan ukuran yang telah di tentukan
  EEPROM.begin(EEPROM_SIZE);
  pictureNumber = EEPROM.read(0) + 1;

  // Penamaan gambar baru yang pada MicroSD
  String path = "/gambar" + String(pictureNumber) +".jpg";

  fs::FS &fs = SD_MMC; 
  Serial.printf("Picture file name: %s\n", path.c_str());
  
  File file = fs.open(path.c_str(), FILE_WRITE);
  if(!file){
    Serial.println("Gagal untuk membuka file dalam mode writing");
  } 
  else {
    file.write(fb->buf, fb->len); // payload (image), payload length
    Serial.printf("Simpan file dengan judul: %s\n", path.c_str());
    EEPROM.write(0, pictureNumber);
    EEPROM.commit();
  }
  file.close();
  esp_camera_fb_return(fb); 
  
  // Mematikan LED on-board ESP32-CAM (blitz) yang terhubung ke GPIO 4
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
  rtc_gpio_hold_en(GPIO_NUM_4);
  
  delay(2000);
  Serial.println("Masuk ke mode Sleep");
  delay(2000);
  esp_deep_sleep_start();
  Serial.println("Tidak ada pengambilan gambar");
}

void loop() {
  
}

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: Video Streaming dengan ESP32-CAM

 

Cara menguji project ini adalah dengan menekan tombol reset pada ESP32-CAM. Jika LED putih yang ada dalam board menyala, maka foto sedang di ambil. Cek Serial monitor untuk mengetahui apakah foto sudah berhasil di ambil atau belum. 

Jika di rasa project sudah berhasil, kita bisa mencobanya dengan tanpa komputer dan menggunakan baterai. Kemudian cobalah foto di beberapa tempat. Untuk melihat hasilnya, kita dapat menggunakan Card Reader yang di hubungkan ke komputer.

Bagaimana? tertarik untuk mencobanya? Pastinya kan.

Kuy langsung di coba.

 

(Sumber: randomnerdtutorials.com)

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:

Tinggalkan komentar

whatsapp whatsapp