diff --git a/driver/camera.c b/driver/camera.c index 33a15ad..a923070 100755 --- a/driver/camera.c +++ b/driver/camera.c @@ -852,6 +852,18 @@ esp_err_t camera_probe(const camera_config_t* config, camera_model_t* out_camera vTaskDelay(10 / portTICK_PERIOD_MS); gpio_set_level(config->pin_reset, 1); vTaskDelay(10 / portTICK_PERIOD_MS); + } else if(config->pin_pwdn >= 0) { + ESP_LOGD(TAG, "Resetting camera by power down line"); + gpio_config_t conf = { 0 }; + conf.pin_bit_mask = 1LL << config->pin_pwdn; + conf.mode = GPIO_MODE_OUTPUT; + gpio_config(&conf); + + // carefull, logic is inverted compared to reset pin + gpio_set_level(config->pin_pwdn, 1); + vTaskDelay(10 / portTICK_PERIOD_MS); + gpio_set_level(config->pin_pwdn, 0); + vTaskDelay(10 / portTICK_PERIOD_MS); #if CONFIG_OV2640_SUPPORT } else { //reset OV2640 diff --git a/driver/include/esp_camera.h b/driver/include/esp_camera.h index 4b23789..10da228 100755 --- a/driver/include/esp_camera.h +++ b/driver/include/esp_camera.h @@ -16,6 +16,7 @@ * static camera_config_t camera_example_config = { .pin_reset = PIN_RESET, + .pin_pwdn = PIN_PWDN, .pin_xclk = PIN_XCLK, .pin_sscb_sda = PIN_SIOD, .pin_sscb_scl = PIN_SIOC, @@ -77,6 +78,7 @@ extern "C" { */ typedef struct { int pin_reset; /*!< GPIO pin for camera reset line */ + int pin_pwdn; /*!< GPIO pin for camera power down line */ int pin_xclk; /*!< GPIO pin for camera XCLK line */ int pin_sscb_sda; /*!< GPIO pin for camera SDA line */ int pin_sscb_scl; /*!< GPIO pin for camera SCL line */