fbpx

Menangani ESP32-CAM Module Kamera Arduino

Selamat datang di indomaker.com, pada pembahasan kali ini admin akan mengupas tentang penggunaan ESP32-CAM. Module ini merupakan sebuah module WiFi yang sudah dilengkapi dengan kamera. Dari module ini kita bisa gunakan untuk berbagai keperluan, contoh untuk CCTV, mengambil gambar dan sebagainya. Fitur lain yaitu kita bisa mendeteksi wajah (face detection) dan pengenalan wajah (face recognition).

Oke langsung saja untuk menggunakan ESP-32 CAM alat dan bahan yang dibutuhkan sebagai berikut :

  • ESP32-CAM Module, BELI
  • FTDI FT232RL, BELI
  • Kabel mini USB, BELI
  • Kabel jumper female to female, BELI

Untuk yang baru pertama menggunakan FTDI silahkan instal dulu update dulu drivernya, caranya di postingan di bawah ini :

TUTORIAL UPLOAD PROGRAM ARDUINO MENGGUNAKAN FTDI

dan untuk yang belum instal board ESP32 silahkan instal dulu boardnya versi terbaru yaitu versi 1.0.4.  Cara instalnya di bawah ini :

MEMULAI MENGGUNAKAN ESP32 PADA ARDUINO IDE

Agar lebih memahami ESP32-CAM anda lihat dengan seksama pin out dari modul ini :

Rangkaian

Keterangan :

  • VCC FTDI dihubungkan ke 5V ESP32-CAM
  • GND FTDI dihubungkan ke GND ESP32-CAM
  • Pin TX FTDI dihubungkan ke UOR ESP32-CAM
  • Pin RX FTDI dihubungkan ke UOT ESP32-CAM
  • Pin GPIO_0 dihubungkan ke GND

Rangkaian di atas adalah mode flash atau rangkaian yang harus dirangkai pada saat proses upload program, silahkan rangkai sesuai gambar dan keterangan di atas.

Silahkan pilih Board pada menu Tools > Board : AI Thinker ESP32-CAM.

Jangan lupa ceklis Port yang muncul misalnya COM20.

Buka File > Examples > ESP32 > Camera > CameraWebServer

dan akan muncul sebuah program, perhatikan program di bawah ini :

Silahkan jadikan komentar pada code #define CAMERA_MODEL_WROVER_KIT, kemudian hilangkan komentar pada code #define CAMERA_MODEL_AI_THINKER sehingga menjadi seperti ini :

Jangan lupa untuk mengisi SSID dan password dari WiFi anda.

Selanjutnya silahkan upload programnya sampai done uploading.

Jika sudah lepas kabel GND dari Pin GPIO_0 pada ESP32-CAM ini merupakan Running mode (mode saat program berjalan).

Buka serial monitor dengan baudtrate 115200. Tekan tombol reset yang ada pada board ESP32CAM.

Maka akan muncul IP addres, kemudian coba ketikkan pada web browser. Maka akan muncul seperti gambar di bawah ini :

Di sini kita akan mencoba untuk streaming kamera dengan cara klik tombol Start Stream. Sedangkan untuk mengambil gambar/foto dengan cara klik tombol Get Still.

Demikian pembahasan kali ini, semoga bermanfaat dan sampai jumpa lagi di tutorial berikutnya. Terima kasih.

66 komentar untuk “Menangani ESP32-CAM Module Kamera Arduino”

  1. kak, kalo malah muncul ini diakhir serial modenya brati kameranya ga bisa ya?

    [E][camera.c:1049] camera_probe(): Detected camera not supported.
    [E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

      1. coba cek wifi hotspotnya, apakah sudah disetting DHCP? kalo sudah, berarti cek sisi programnya apakah nama SSID hotspot dan passwordnya sudah benar?

  2. AHMAD YOVI NURULFAHMI

    Mau tanya gan, jadi gini kan esp32 cam saya udah connect jaringan wifi dan bisa di akses melalui link website yg muncul di serial monitor dan bisa di lihat melalui hand phone atau laptop, ketika saya coba jaringan hand phone yg semula memakai jaringan wifi rumah saya pindah ke jaringan data seluler pribadi kenapa link website yg tadinya muncul pas saya pakai jaringan wifi rumah dan saya alihkan ke data seluler pribadi tidak bisa ya?padahal saya sudah cek untuk kuota data saya sudah isi ulang juga, mohon bantuannya terimakasih.

    1. karena ESP32-Cam hanya mendapat IP lokal dari hotspot/router WIFI yang ada di rumah (jaringan intranet WLAN). Kalau diakses dari luar (misal pake jaringan data operator GSM) tidak akan bisa, karena ini sudah menggunakan jaringan internet (bukan intranet lagi). Kalo ingin bisa diakses dari internet, WIFI router dirumah harus diset port forwarding-nya, dan syaratnya router tersebut harus memiliki IP public.

  3. esptool.py v2.6
    Serial port COM5
    Traceback (most recent call last):
    File “esptool.py”, line 2959, in
    File “esptool.py”, line 2952, in _main
    File “esptool.py”, line 2652, in main
    File “esptool.py”, line 222, in __init__
    File “site-packages\serial\__init__.py”, line 88, in serial_for_url
    File “site-packages\serial\serialwin32.py”, line 62, in open
    serial.serialutil.SerialException: could not open port ‘COM5’: WindowsError(433, ‘A device which does not exist was specified.’)
    Failed to execute script esptool
    the selected serial port Failed to execute script esptool
    does not exist or your board is not connected

    mas aku erorr disini tau gak kira kira kenapa?

    1. cek port USB to serial FTDI nya lewat Control Panel – Device Manager. Cek apakah sudah benar COM Port-nya. Jika belum, ubah nomor COM port di arduino IDE. Jika belum muncul COM port di device manager berarti belum diinstal drivernya

    1. coba cek wifi hotspotnya, apakah sudah ada koneksi internet atau belum. Yang kedua cek di programnya apakah sudah benar SSID dan password WIFI nya?

  4. 14:37:00.965 -> eׁJ]8⸮0L⸮0’⸮:MSH
    !⸮t’⸮⸮ ⸮]E⸮⸮}RQ⸮⸮⸮b⸮⸮:⸮⸮3BSPReS⸮e1A*⸮%=OU⸮
    14:37:00.965 -> +⸮h⸮⸮ad*⸮r ⸮0⸮
    ⸮⸮_[⸮ni⸮3S
    ⸮eׁJ]8⸮0L⸮0’&⸮5SH
    !⸮t’⸮⸮0 IE
    W⸮ITC%SQU⸮⸮o⸮⸮xL&BS⸮}FP*⸮e1S⸮%=OU⸮
    14:37:01.325 -> ⸮˙i֥p’⸮,⸮AI⸮⸮xYVHck}d.⸮⸮⸮⸮0)}d.⸮⸮⸮⸮0⸮}dr⸮⸮x0bcs⸮⸮r⸮⸮x⸮,⸮}d.⸮⸮x⸮,}d.⸮⸮x⸮
    ⸮⸮e’T⸮ ,⸮k V⸮⸮1C!⸮d:⸮⸮f⸮⸮01blYK⸮
    !⸮d’⸮⸮f⸮⸮0L,⸮⸮n⸮⸮1SHh⸮ W⸮l⸮2⸮⸮om⸮
    !⸮d’⸮⸮0⸮80⸮,⸮⸮:N⸮⸮
    !⸮0⸮⸮⸮l⸮2⸮⸮o[⸮
    !⸮d’⸮⸮00⸮4⸮bleK⸮3M⸮He⸮⸮y⸮x⸮⸮0⸮⸮

    14:37:03.085 -> [E][camera.c:1049] camera_probe(): Detected camera not supported.
    14:37:03.085 -> [E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

    mas saya eror begitu, kenapa yah

  5. 15:03:41.608 ->
    15:03:41.608 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    15:03:41.608 -> configsip: 0, SPIWP:0xee
    15:03:41.608 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    15:03:41.608 -> mode:DIO, clock div:1
    15:03:41.608 -> load:0x3fff0018,len:4
    15:03:41.608 -> load:0x3fff001c,len:1216
    15:03:41.608 -> ho 0 tail 12 room 4
    15:03:41.608 -> load:0x40078000,len:9720
    15:03:41.608 -> ho 0 tail 12 room 4
    15:03:41.608 -> load:0x40080400,len:6352
    15:03:41.608 -> entry 0x400806b8
    15:03:43.288 ->
    15:03:44.048 -> ⸮⸮⸮⸮⸮сdetector was triggered
    15:03:44.088 ->
    15:03:44.088 -> ets Jun 8 2016 00:22:57
    15:03:44.088 ->
    15:03:44.088 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    15:03:44.088 -> configsip: 0, SPIWP:0xee
    15:03:44.088 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp

    mas ip nya ga muncul sama keterangan camera ready use nya, kenapa yah

    1. bisa karena programmingnya error, atau wiring camera nya kendor/lepas, atau power supply nya kurang besar arusnya atau kemungkinan terburuknya esp nya rusak

  6. Renaldi pranata

    Kak saya bertanya kalau cameranya blur itu kenapa ya kak, jadi buram gitu kak langkahnya udah saya ikuti kak pas start stream cameranya ngeblur

      1. alifsyabaniputra

        bang saya sudah mencoba cara tersebut gak bisa upload codenya , tapi setelah di upload malah error bang. itu bagaimana solusinya lagi ? kalo bisa share nome whatsaapnya bang makasih sebelumnyaaa…..

  7. min mau tanya, saat memakai face detection atau recognition selalu erorr, itu masalahny apa ya min???

  8. min timbul ini gmna solusinya?

    Sketch uses 2594098 bytes (82%) of program storage space. Maximum is 3145728 bytes.

    Global variables use 56280 bytes (17%) of dynamic memory, leaving 271400 bytes for local variables. Maximum is 327680 bytes.

    esptool.py v3.0-dev

    Serial port COM4

    Connecting…….._____….._____….._____….._____….._____….._____….._____

    A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

    A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

  9. rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:2
    load:0x3fff0018,len:4
    load:0x3fff001c,len:1216
    ho 0 tail 12 room 4
    load:0x40078000,len:10944
    load:0x40080400,len:6360
    entry 0x400806b4

    Connecting to wifi
    …..
    ES

    misi kak mau tanya, di bagian connecting to wifi kenapa muncul nya ES ya? cara ngatasinya gimana ya kak? makasihh

    1. harus lihat programnya dulu. Atau untuk troubleshooting coba run program example, kalo bisa berarti program Anda yang ada bug-nya

      1. kalau untuk run program example udah bisa kok, ip nya udah dapet juga. saya pakai sketch ini mas dan pas di run udah done compiling cuma saat diupload tidak mendapatkan ip nya.

        #include
        #include
        #include “WiFiClientSecure.h”
        #include “soc/soc.h”
        #include “soc/rtc_cntl_reg.h”
        #include “esp_camera.h”
        #include
        #include
        #include
        #include

        const char* ssid = “AR707”;
        const char* password = “1234567N”;
        String BOTtoken = “1844138839:AAG51VTd0nTPCQb8j0G6gsVow9ToIbjb2JU”;
        String CHAT_ID = “1343264587”;

        bool sendPhoto = false;
        bool playSong = false;
        bool offSong = false;
        boolean lockLow = true;
        bool takeLowTime;

        int pos =0;
        int calibrationTime = 10;
        long unsigned int lowIn;
        //long unsigned int lockLow;
        long unsigned int a = 5000;

        WiFiClientSecure clientTCP;
        Servo myservo;

        UniversalTelegramBot bot(BOTtoken, clientTCP);

        #define FLASH_LED_PIN 4
        #define pirPin 2
        #define pirPos 3
        bool flashState = LOW;
        bool flag = 0;

        int botRequestDelay = 1000;
        unsigned long lastTimeBotRan;

        //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

        void configInitCamera(){
        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;

        //init with high specs to pre-allocate larger buffers
        if(psramFound()){
        config.frame_size = FRAMESIZE_UXGA;
        config.jpeg_quality = 10; //0-63 lower number means higher quality
        config.fb_count = 2;
        } else {
        config.frame_size = FRAMESIZE_SVGA;
        config.jpeg_quality = 12; //0-63 lower number means higher quality
        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);
        delay(1000);
        ESP.restart();
        }

        // Drop down frame size for higher initial frame rate
        sensor_t * s = esp_camera_sensor_get();
        s->set_framesize(s, FRAMESIZE_CIF); // UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA
        }

        void handleNewMessages(int numNewMessages) {
        Serial.print(“Handle New Messages: “);
        Serial.println(numNewMessages);

        for (int i = 0; i len;
        uint16_t extraLen = head.length() + tail.length();
        uint16_t totalLen = imageLen + extraLen;

        clientTCP.println(“POST /bot”+BOTtoken+”/sendPhoto HTTP/1.1”);
        clientTCP.println(“Host: ” + String(myDomain));
        clientTCP.println(“Content-Length: ” + String(totalLen));
        clientTCP.println(“Content-Type: multipart/form-data; boundary=RandomNerdTutorials”);
        clientTCP.println();
        clientTCP.print(head);

        uint8_t *fbBuf = fb->buf;
        size_t fbLen = fb->len;
        for (size_t n=0;n<fbLen;n=n+1024) {
        if (n+10240) {
        size_t remainder = fbLen%1024;
        clientTCP.write(fbBuf, remainder);
        }
        }

        clientTCP.print(tail);

        esp_camera_fb_return(fb);

        int waitTime = 10000;
        long startTimer = millis();
        boolean state = false;

        while ((startTimer + waitTime) > millis()){
        Serial.print(“.”);
        delay(100);
        while (clientTCP.available()) {
        char c = clientTCP.read();
        if (state==true) getBody += String(c);
        if (c == ‘\n’) {
        if (getAll.length()==0) state=true;
        getAll = “”;
        }
        else if (c != ‘\r’)
        getAll += String(c);
        startTimer = millis();
        }
        if (getBody.length()>0) break;
        }
        clientTCP.stop();
        Serial.println(getBody);
        }
        else {
        getBody=”Connected to api.telegram.org failed.”;
        Serial.println(“Connected to api.telegram.org failed.”);
        }
        return getBody;
        }

        void setup(){
        WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
        // Init Serial Monitor
        Serial.begin(115200);

        // Set LED Flash as output
        pinMode(FLASH_LED_PIN, OUTPUT);
        digitalWrite(FLASH_LED_PIN, flashState);

        // Config and init the camera
        configInitCamera();

        // Connect to Wi-Fi
        WiFi.mode(WIFI_STA);
        Serial.println();
        Serial.print(“Connecting to “);
        Serial.println(ssid);
        WiFi.begin(ssid, password);
        clientTCP.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
        while (WiFi.status() != WL_CONNECTED) {
        Serial.print(“.”);
        delay(500);
        }
        Serial.println();
        Serial.print(“ESP32-CAM IP Address: “);
        Serial.println(WiFi.localIP());

        // dorongan void setup
        myservo.attach (13); //pin 13 ke servo
        Serial.begin (9600); // memulai komunikasi serial
        pinMode (pirPin, INPUT);
        pinMode (pirPos, OUTPUT);
        digitalWrite (pirPos, LOW);

        //memberi waktu sensor untuk kalibrasi
        Serial.println (“sensor kalibrasi”);
        for (int i=0; i lastTimeBotRan + botRequestDelay) {
        int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
        while (numNewMessages) {
        Serial.println(“got response”);
        handleNewMessages(numNewMessages);
        numNewMessages = bot.getUpdates(bot.last_message_received + 1);
        }
        lastTimeBotRan = millis();
        }

        if (flag) {
        delay(1000);
        if (digitalRead (pirPin)== HIGH) {
        for (pos=0; pos 0; pos-= 1) //dari 180 ke 0
        {
        myservo.write (pos);
        delay(15);
        }
        if (lockLow) {

        lockLow = false;
        Serial.println (“—“);
        Serial.print (“gerakaan terdeteksi di”);
        Serial.print (millis()/1000);
        Serial.println (“detik”);
        delay(50);
        }

        takeLowTime = true;

        }
        if (digitalRead(pirPin) ==LOW) {
        if(takeLowTime) {
        lowIn =millis();
        takeLowTime =false;
        }

        if (! lockLow && millis ()- lowIn> a) {

        lockLow=true;
        Serial.print (“gerakan berakhir pada”);
        Serial.print((millis() – a)/ 1000);
        Serial.println (“detik”);
        delay (50);
        }
        }
        }

        }

        1. susah bagi kita untuk menganalisa mas, karena tetap harus dilakukan sendiri di sana di depan hardwarenya. Gini aja, coba dari program example tambahkan sedikit demi sedikit tambahan programnya, nanti pasti ketemu di mana kesalahannya. Atau dari program di atas coba dikurangi sedikit demi sedikit programnya, nanti pasti akan ketemu kesalahannya. Jangan lupa bikin flow chart untuk memudahkan pemrograman. Good luck ya

  10. kak esp32 cam slot kartu sd maksimal 4 gb kan ya, kalo saya isi lebih 4 gb gpapa kan? mungkin cuma 4 gb doang yang keiisi.

  11. Bang izin nanya, kalo waktu sudah di web ip kamera sempat muncul waktu tekan start stream 3-5 detik kemudian hilang cuma tinggal tombol gimana mengatasinya? mhn petunjuknya bang trima kasih bnyak.

  12. Halo kak, kalau erornya begini apa yang salah kak.
    A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

  13. Halo kak, kenapa esp32 cam saya tidak bisa connect ke ip address wifi ny ya kalo pake daya dari batre 18650 yang saya hubungkan ke motor driver l298n, sedangkan kalo langsung colok ke setrum listrik pake charger hp bisa connect ke ip address wifi nya, penasaran saya coba test ke power bank juga ga mau connect

  14. Permisi mas mau tanya, saya menggalammi kendala sewaktu mau memakai face detection untuk menyimpan data wajah saya, esp32-cam reboot dengan sendirinya, sebelum reboot streaming nya lag dan kotak pembaca wajah tidak muncul, itu kenapa ya mas?

      1. error nya gini mas,
        CORRUPT HEAP: Bad head at 0x3ffe25c8. Expected 0xabba1234 got 0x00000008
        abort() was called at PC 0x4008a64d on core 1

        1. HEAP = static RAM (SRAM), coba cek scriptnya, jangan sampai banyak menghabiskan RAM. Contoh yang menghabiskan SRAM: penggunaan variabel global (ganti variabel lokal), hindari variabel string (ganti dengan char array)

          1. Saya hanya menggunakan script/program dari example dan tidak ada sedikitpun yg saya ubah dari program CameraWebServer,
            Bagian mana yang harus saya ubah?

          2. bisa jadi hardware-nya yang bermasalah. Kalo ada esp32-cam satu lagi bisa dicoba running example script dan dibandingkan bedanya

  15. Mau tanya sekali lagi mas, kalo semisal kita restart esp32-cam nya apakah untuk face detection dan face recognation wajah tidak tersimpan dan harus membaca wajah kembali?

  16. Afifah Trie Lestari

    Pada saat menyalakan face detection dan face recognition, kenapa serialprint saya selalu “dl_matrix3du_alloc failed” ya? mohon bantuannya ya. terima kasih..