M5StackのUnit CamをArduino IDEでカメラを使おうとすると下記のエラーが出る。 最初カメラ壊れてんのかと勘違いして、もう一個買い直しちゃった。
- M5Burner/UIFlowだとカメラ使えてる。
- サンプルのweb_cam.inoでエラー。
- Timer Camera F/Xだとエラーにならない。
エラー内容
18:49:14.386 -> E (135) cam_hal: cam_dma_config(306): frame buffer malloc failed 18:49:14.386 -> E (136) cam_hal: cam_config(390): cam_dma_config failed 18:49:14.386 -> E (136) camera: Camera config failed with error 0xffffffff 18:49:14.386 -> Camera init failed with error 0xffffffff
原因
原因は2つ
- (1) PSRAMを使う設定になっている
- (2) 撮影画像サイズが大きすぎる
- 外部PSRAMが無い場合、ESP32は内部RAMが実質100~200KB程度しか使えない
修正方法
camera_config_t configの設定内容を以下のように追記&修正する
- (1) PSRAMを使わない設定を追加
+ config.fb_location = CAMERA_FB_IN_DRAM; // DRAMを使う(PSRAM使わない)
- (2) 撮影画像サイズを小さくする
+ config.frame_size = FRAMESIZE_QVGA; // 320x240 - config.frame_size = FRAMESIZE_UXGA; // 1600x1200
変更結果(camera_config_t config全体)
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; config.frame_size = FRAMESIZE_QVGA; // 320x240 // config.frame_size = FRAMESIZE_UXGA; // 1600x1200 config.jpeg_quality = 10; config.fb_count = 2; config.fb_location = CAMERA_FB_IN_DRAM; // DRAMを使う(PSRAM使わない)