| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /**
- * This example takes a picture every 5s and print its size on serial monitor.
- */
- // =============================== SETUP ======================================
- // 1. Board setup (Uncomment):
- // #define BOARD_WROVER_KIT
- // #define BOARD_ESP32CAM_AITHINKER
- // #define BOARD_ESP32S3_WROOM
- /**
- * 2. Kconfig setup
- *
- * If you have a Kconfig file, copy the content from
- * https://github.com/espressif/esp32-camera/blob/master/Kconfig into it.
- * In case you haven't, copy and paste this Kconfig file inside the src directory.
- * This Kconfig file has definitions that allows more control over the camera and
- * how it will be initialized.
- */
- /**
- * 3. Enable PSRAM on sdkconfig:
- *
- * CONFIG_ESP32_SPIRAM_SUPPORT=y
- *
- * More info on
- * https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html#config-esp32-spiram-support
- */
- // ================================ CODE ======================================
- #include <esp_log.h>
- #include <esp_system.h>
- #include <nvs_flash.h>
- #include <sys/param.h>
- #include <string.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- // support IDF 5.x
- #ifndef portTICK_RATE_MS
- #define portTICK_RATE_MS portTICK_PERIOD_MS
- #endif
- #include "esp_camera.h"
- #define ESP32_S3_KORVO 1 //ESP32-S3-KORVO-2_V3.0配套的自定义引脚
- // WROVER-KIT PIN Map
- #ifdef BOARD_WROVER_KIT
- #define CAM_PIN_PWDN -1 //power down is not used
- #define CAM_PIN_RESET -1 //software reset will be performed
- #define CAM_PIN_XCLK 21
- #define CAM_PIN_SIOD 26
- #define CAM_PIN_SIOC 27
- #define CAM_PIN_D7 35
- #define CAM_PIN_D6 34
- #define CAM_PIN_D5 39
- #define CAM_PIN_D4 36
- #define CAM_PIN_D3 19
- #define CAM_PIN_D2 18
- #define CAM_PIN_D1 5
- #define CAM_PIN_D0 4
- #define CAM_PIN_VSYNC 25
- #define CAM_PIN_HREF 23
- #define CAM_PIN_PCLK 22
- #endif
- // ESP32Cam (AiThinker) PIN Map
- #ifdef BOARD_ESP32CAM_AITHINKER
- #define CAM_PIN_PWDN 32
- #define CAM_PIN_RESET -1 //software reset will be performed
- #define CAM_PIN_XCLK 0
- #define CAM_PIN_SIOD 26
- #define CAM_PIN_SIOC 27
- #define CAM_PIN_D7 35
- #define CAM_PIN_D6 34
- #define CAM_PIN_D5 39
- #define CAM_PIN_D4 36
- #define CAM_PIN_D3 21
- #define CAM_PIN_D2 19
- #define CAM_PIN_D1 18
- #define CAM_PIN_D0 5
- #define CAM_PIN_VSYNC 25
- #define CAM_PIN_HREF 23
- #define CAM_PIN_PCLK 22
- #endif
- // ESP32S3 (WROOM) PIN Map
- #ifdef BOARD_ESP32S3_WROOM
- #define CAM_PIN_PWDN 38
- #define CAM_PIN_RESET -1 //software reset will be performed
- #define CAM_PIN_VSYNC 6
- #define CAM_PIN_HREF 7
- #define CAM_PIN_PCLK 13
- #define CAM_PIN_XCLK 15
- #define CAM_PIN_SIOD 4
- #define CAM_PIN_SIOC 5
- #define CAM_PIN_D0 11
- #define CAM_PIN_D1 9
- #define CAM_PIN_D2 8
- #define CAM_PIN_D3 10
- #define CAM_PIN_D4 12
- #define CAM_PIN_D5 18
- #define CAM_PIN_D6 17
- #define CAM_PIN_D7 16
- #endif
- // ESP32-S3-KORVO-2_V3.0 音频开发版
- #ifdef ESP32_S3_KORVO
- #define CAM_PIN_PWDN -1 //没用直接接高
- #define CAM_PIN_RESET -1 //software reset will be performed
- #define CAM_PIN_VSYNC 21
- #define CAM_PIN_HREF 38
- #define CAM_PIN_PCLK 11
- #define CAM_PIN_XCLK 40
- #define CAM_PIN_SIOD 17
- #define CAM_PIN_SIOC 18
- #define CAM_PIN_D0 13
- #define CAM_PIN_D1 47
- #define CAM_PIN_D2 14
- #define CAM_PIN_D3 3
- #define CAM_PIN_D4 12
- #define CAM_PIN_D5 42
- #define CAM_PIN_D6 41
- #define CAM_PIN_D7 39
- #endif
- static const char *TAG = "example:take_picture";
- #if ESP_CAMERA_SUPPORTED
- static camera_config_t camera_config = {
- .pin_pwdn = CAM_PIN_PWDN,
- .pin_reset = CAM_PIN_RESET,
- .pin_xclk = CAM_PIN_XCLK,
- .pin_sccb_sda = CAM_PIN_SIOD,
- .pin_sccb_scl = CAM_PIN_SIOC,
- .pin_d7 = CAM_PIN_D7,
- .pin_d6 = CAM_PIN_D6,
- .pin_d5 = CAM_PIN_D5,
- .pin_d4 = CAM_PIN_D4,
- .pin_d3 = CAM_PIN_D3,
- .pin_d2 = CAM_PIN_D2,
- .pin_d1 = CAM_PIN_D1,
- .pin_d0 = CAM_PIN_D0,
- .pin_vsync = CAM_PIN_VSYNC,
- .pin_href = CAM_PIN_HREF,
- .pin_pclk = CAM_PIN_PCLK,
- //XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
- .xclk_freq_hz = 20000000,
- .ledc_timer = LEDC_TIMER_0,
- .ledc_channel = LEDC_CHANNEL_0,
- .pixel_format = PIXFORMAT_RGB565, //YUV422,GRAYSCALE,RGB565,JPEG
- .frame_size = FRAMESIZE_QVGA, //QQVGA-UXGA, For ESP32, do not use sizes above QVGA when not JPEG. The performance of the ESP32-S series has improved a lot, but JPEG mode always gives better frame rates.
- .jpeg_quality = 12, //0-63, for OV series camera sensors, lower number means higher quality
- .fb_count = 1, //When jpeg mode is used, if fb_count more than one, the driver will work in continuous mode.
- .fb_location = CAMERA_FB_IN_DRAM,
- .grab_mode = CAMERA_GRAB_WHEN_EMPTY,
- };
- static esp_err_t init_camera(void)
- {
- //initialize the camera
- esp_err_t err = esp_camera_init(&camera_config);
- if (err != ESP_OK)
- {
- ESP_LOGE(TAG, "Camera Init Failed");
- return err;
- }
- return ESP_OK;
- }
- #endif
- void take_photo(void)
- {
- #if ESP_CAMERA_SUPPORTED
- if(ESP_OK != init_camera()) {
- return;
- }
- while (1)
- {
- ESP_LOGI(TAG, "Taking picture...");
- camera_fb_t *pic = esp_camera_fb_get();
- if ( pic == NULL)
- {
- /* code */
- ESP_LOGE(TAG, "Camera capture failed");
- return;
- }
-
- // use pic->buf to access the image
- ESP_LOGI(TAG, "Picture taken! Its size was: %zu bytes", pic->len);
- esp_camera_fb_return(pic);
- vTaskDelay(5000 / portTICK_RATE_MS);
- }
- #else
- ESP_LOGE(TAG, "Camera support is not available for this chip");
- return;
- #endif
- }
|