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.
- Software Arduino IDE
- ESP32-CAM 1
- FTDI FT232RL 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: 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!