mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	ESP32 CAM add Automatic Exposure Control option (#2892)
Co-authored-by: Peter <psv@tsat.net> Co-authored-by: Carlos Garcia Saura <CarlosGS@users.noreply.github.com>
This commit is contained in:
		| @@ -57,6 +57,9 @@ CONF_IDLE_FRAMERATE = "idle_framerate" | |||||||
| CONF_JPEG_QUALITY = "jpeg_quality" | CONF_JPEG_QUALITY = "jpeg_quality" | ||||||
| CONF_VERTICAL_FLIP = "vertical_flip" | CONF_VERTICAL_FLIP = "vertical_flip" | ||||||
| CONF_HORIZONTAL_MIRROR = "horizontal_mirror" | CONF_HORIZONTAL_MIRROR = "horizontal_mirror" | ||||||
|  | CONF_AEC2 = "aec2" | ||||||
|  | CONF_AE_LEVEL = "ae_level" | ||||||
|  | CONF_AEC_VALUE = "aec_value" | ||||||
| CONF_SATURATION = "saturation" | CONF_SATURATION = "saturation" | ||||||
| CONF_TEST_PATTERN = "test_pattern" | CONF_TEST_PATTERN = "test_pattern" | ||||||
|  |  | ||||||
| @@ -102,6 +105,9 @@ CONFIG_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend( | |||||||
|         cv.Optional(CONF_SATURATION, default=0): camera_range_param, |         cv.Optional(CONF_SATURATION, default=0): camera_range_param, | ||||||
|         cv.Optional(CONF_VERTICAL_FLIP, default=True): cv.boolean, |         cv.Optional(CONF_VERTICAL_FLIP, default=True): cv.boolean, | ||||||
|         cv.Optional(CONF_HORIZONTAL_MIRROR, default=True): cv.boolean, |         cv.Optional(CONF_HORIZONTAL_MIRROR, default=True): cv.boolean, | ||||||
|  |         cv.Optional(CONF_AEC2, default=False): cv.boolean, | ||||||
|  |         cv.Optional(CONF_AE_LEVEL, default=0): camera_range_param, | ||||||
|  |         cv.Optional(CONF_AEC_VALUE, default=300): cv.int_range(min=0, max=1200), | ||||||
|         cv.Optional(CONF_TEST_PATTERN, default=False): cv.boolean, |         cv.Optional(CONF_TEST_PATTERN, default=False): cv.boolean, | ||||||
|     } |     } | ||||||
| ).extend(cv.COMPONENT_SCHEMA) | ).extend(cv.COMPONENT_SCHEMA) | ||||||
| @@ -116,6 +122,9 @@ SETTERS = { | |||||||
|     CONF_JPEG_QUALITY: "set_jpeg_quality", |     CONF_JPEG_QUALITY: "set_jpeg_quality", | ||||||
|     CONF_VERTICAL_FLIP: "set_vertical_flip", |     CONF_VERTICAL_FLIP: "set_vertical_flip", | ||||||
|     CONF_HORIZONTAL_MIRROR: "set_horizontal_mirror", |     CONF_HORIZONTAL_MIRROR: "set_horizontal_mirror", | ||||||
|  |     CONF_AEC2: "set_aec2", | ||||||
|  |     CONF_AE_LEVEL: "set_ae_level", | ||||||
|  |     CONF_AEC_VALUE: "set_aec_value", | ||||||
|     CONF_CONTRAST: "set_contrast", |     CONF_CONTRAST: "set_contrast", | ||||||
|     CONF_BRIGHTNESS: "set_brightness", |     CONF_BRIGHTNESS: "set_brightness", | ||||||
|     CONF_SATURATION: "set_saturation", |     CONF_SATURATION: "set_saturation", | ||||||
|   | |||||||
| @@ -26,6 +26,9 @@ void ESP32Camera::setup() { | |||||||
|   sensor_t *s = esp_camera_sensor_get(); |   sensor_t *s = esp_camera_sensor_get(); | ||||||
|   s->set_vflip(s, this->vertical_flip_); |   s->set_vflip(s, this->vertical_flip_); | ||||||
|   s->set_hmirror(s, this->horizontal_mirror_); |   s->set_hmirror(s, this->horizontal_mirror_); | ||||||
|  |   s->set_aec2(s, this->aec2_);            // 0 = disable , 1 = enable | ||||||
|  |   s->set_ae_level(s, this->ae_level_);    // -2 to 2 | ||||||
|  |   s->set_aec_value(s, this->aec_value_);  // 0 to 1200 | ||||||
|   s->set_contrast(s, this->contrast_); |   s->set_contrast(s, this->contrast_); | ||||||
|   s->set_brightness(s, this->brightness_); |   s->set_brightness(s, this->brightness_); | ||||||
|   s->set_saturation(s, this->saturation_); |   s->set_saturation(s, this->saturation_); | ||||||
| @@ -111,9 +114,9 @@ void ESP32Camera::dump_config() { | |||||||
|   // ESP_LOGCONFIG(TAG, "  Auto White Balance: %u", st.awb); |   // ESP_LOGCONFIG(TAG, "  Auto White Balance: %u", st.awb); | ||||||
|   // ESP_LOGCONFIG(TAG, "  Auto White Balance Gain: %u", st.awb_gain); |   // ESP_LOGCONFIG(TAG, "  Auto White Balance Gain: %u", st.awb_gain); | ||||||
|   // ESP_LOGCONFIG(TAG, "  Auto Exposure Control: %u", st.aec); |   // ESP_LOGCONFIG(TAG, "  Auto Exposure Control: %u", st.aec); | ||||||
|   // ESP_LOGCONFIG(TAG, "  Auto Exposure Control 2: %u", st.aec2); |   ESP_LOGCONFIG(TAG, "  Auto Exposure Control 2: %u", st.aec2); | ||||||
|   // ESP_LOGCONFIG(TAG, "  Auto Exposure Level: %d", st.ae_level); |   ESP_LOGCONFIG(TAG, "  Auto Exposure Level: %d", st.ae_level); | ||||||
|   // ESP_LOGCONFIG(TAG, "  Auto Exposure Value: %u", st.aec_value); |   ESP_LOGCONFIG(TAG, "  Auto Exposure Value: %u", st.aec_value); | ||||||
|   // ESP_LOGCONFIG(TAG, "  AGC: %u", st.agc); |   // ESP_LOGCONFIG(TAG, "  AGC: %u", st.agc); | ||||||
|   // ESP_LOGCONFIG(TAG, "  AGC Gain: %u", st.agc_gain); |   // ESP_LOGCONFIG(TAG, "  AGC Gain: %u", st.agc_gain); | ||||||
|   // ESP_LOGCONFIG(TAG, "  Gain Ceiling: %u", st.gainceiling); |   // ESP_LOGCONFIG(TAG, "  Gain Ceiling: %u", st.gainceiling); | ||||||
| @@ -250,6 +253,9 @@ void ESP32Camera::add_image_callback(std::function<void(std::shared_ptr<CameraIm | |||||||
| } | } | ||||||
| void ESP32Camera::set_vertical_flip(bool vertical_flip) { this->vertical_flip_ = vertical_flip; } | void ESP32Camera::set_vertical_flip(bool vertical_flip) { this->vertical_flip_ = vertical_flip; } | ||||||
| void ESP32Camera::set_horizontal_mirror(bool horizontal_mirror) { this->horizontal_mirror_ = horizontal_mirror; } | void ESP32Camera::set_horizontal_mirror(bool horizontal_mirror) { this->horizontal_mirror_ = horizontal_mirror; } | ||||||
|  | void ESP32Camera::set_aec2(bool aec2) { this->aec2_ = aec2; } | ||||||
|  | void ESP32Camera::set_ae_level(int ae_level) { this->ae_level_ = ae_level; } | ||||||
|  | void ESP32Camera::set_aec_value(uint32_t aec_value) { this->aec_value_ = aec_value; } | ||||||
| void ESP32Camera::set_contrast(int contrast) { this->contrast_ = contrast; } | void ESP32Camera::set_contrast(int contrast) { this->contrast_ = contrast; } | ||||||
| void ESP32Camera::set_brightness(int brightness) { this->brightness_ = brightness; } | void ESP32Camera::set_brightness(int brightness) { this->brightness_ = brightness; } | ||||||
| void ESP32Camera::set_saturation(int saturation) { this->saturation_ = saturation; } | void ESP32Camera::set_saturation(int saturation) { this->saturation_ = saturation; } | ||||||
|   | |||||||
| @@ -67,6 +67,9 @@ class ESP32Camera : public Component, public EntityBase { | |||||||
|   void set_power_down_pin(uint8_t pin); |   void set_power_down_pin(uint8_t pin); | ||||||
|   void set_vertical_flip(bool vertical_flip); |   void set_vertical_flip(bool vertical_flip); | ||||||
|   void set_horizontal_mirror(bool horizontal_mirror); |   void set_horizontal_mirror(bool horizontal_mirror); | ||||||
|  |   void set_aec2(bool aec2); | ||||||
|  |   void set_ae_level(int ae_level); | ||||||
|  |   void set_aec_value(uint32_t aec_value); | ||||||
|   void set_contrast(int contrast); |   void set_contrast(int contrast); | ||||||
|   void set_brightness(int brightness); |   void set_brightness(int brightness); | ||||||
|   void set_saturation(int saturation); |   void set_saturation(int saturation); | ||||||
| @@ -91,6 +94,9 @@ class ESP32Camera : public Component, public EntityBase { | |||||||
|   camera_config_t config_{}; |   camera_config_t config_{}; | ||||||
|   bool vertical_flip_{true}; |   bool vertical_flip_{true}; | ||||||
|   bool horizontal_mirror_{true}; |   bool horizontal_mirror_{true}; | ||||||
|  |   bool aec2_{false}; | ||||||
|  |   int ae_level_{0}; | ||||||
|  |   uint32_t aec_value_{300}; | ||||||
|   int contrast_{0}; |   int contrast_{0}; | ||||||
|   int brightness_{0}; |   int brightness_{0}; | ||||||
|   int saturation_{0}; |   int saturation_{0}; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user