ESPHome 2025.8.0b2
Loading...
Searching...
No Matches
esp32_camera.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
5#include <esp_camera.h>
6#include <freertos/FreeRTOS.h>
7#include <freertos/queue.h>
12
13#ifdef USE_I2C
15#endif // USE_I2C
16
17namespace esphome {
18namespace esp32_camera {
19
20class ESP32Camera;
21
42
44 ESP32_GAINCEILING_2X = GAINCEILING_2X,
45 ESP32_GAINCEILING_4X = GAINCEILING_4X,
46 ESP32_GAINCEILING_8X = GAINCEILING_8X,
47 ESP32_GAINCEILING_16X = GAINCEILING_16X,
48 ESP32_GAINCEILING_32X = GAINCEILING_32X,
49 ESP32_GAINCEILING_64X = GAINCEILING_64X,
50 ESP32_GAINCEILING_128X = GAINCEILING_128X,
51};
52
57
65
75
76/* ---------------- CameraImage class ---------------- */
78 public:
79 ESP32CameraImage(camera_fb_t *buffer, uint8_t requester);
80 camera_fb_t *get_raw_buffer();
81 uint8_t *get_data_buffer() override;
82 size_t get_data_length() override;
83 bool was_requested_by(camera::CameraRequester requester) const override;
84
85 protected:
86 camera_fb_t *buffer_;
87 uint8_t requesters_;
88};
89
91 uint8_t *data;
92 size_t length;
93};
94
95/* ---------------- CameraImageReader class ---------------- */
97 public:
98 void set_image(std::shared_ptr<camera::CameraImage> image) override;
99 size_t available() const override;
100 uint8_t *peek_data_buffer() override;
101 void consume_data(size_t consumed) override;
102 void return_image() override;
103
104 protected:
105 std::shared_ptr<ESP32CameraImage> image_;
106 size_t offset_{0};
107};
108
109/* ---------------- ESP32Camera class ---------------- */
111 public:
112 ESP32Camera();
113
114 /* setters */
115 /* -- pin assignment */
116 void set_data_pins(std::array<uint8_t, 8> pins);
117 void set_vsync_pin(uint8_t pin);
118 void set_href_pin(uint8_t pin);
119 void set_pixel_clock_pin(uint8_t pin);
120 void set_external_clock(uint8_t pin, uint32_t frequency);
121 void set_i2c_pins(uint8_t sda, uint8_t scl);
122#ifdef USE_I2C
123 void set_i2c_id(i2c::InternalI2CBus *i2c_bus);
124#endif // USE_I2C
125 void set_reset_pin(uint8_t pin);
126 void set_power_down_pin(uint8_t pin);
127 /* -- image */
129 void set_jpeg_quality(uint8_t quality);
130 void set_vertical_flip(bool vertical_flip);
131 void set_horizontal_mirror(bool horizontal_mirror);
132 void set_contrast(int contrast);
133 void set_brightness(int brightness);
134 void set_saturation(int saturation);
136 /* -- exposure */
138 void set_aec2(bool aec2);
139 void set_ae_level(int ae_level);
140 void set_aec_value(uint32_t aec_value);
141 /* -- gains */
143 void set_agc_value(uint8_t agc_value);
144 void set_agc_gain_ceiling(ESP32AgcGainCeiling gain_ceiling);
145 /* -- white balance */
147 /* -- test */
148 void set_test_pattern(bool test_pattern);
149 /* -- framerates */
150 void set_max_update_interval(uint32_t max_update_interval);
151 void set_idle_update_interval(uint32_t idle_update_interval);
152 /* -- frame buffer */
153 void set_frame_buffer_mode(camera_grab_mode_t mode);
154 void set_frame_buffer_count(uint8_t fb_count);
155 void set_frame_buffer_location(camera_fb_location_t fb_location);
156
157 /* public API (derivated) */
158 void setup() override;
159 void loop() override;
160 void dump_config() override;
161 float get_setup_priority() const override;
162 /* public API (specific) */
163 void start_stream(camera::CameraRequester requester) override;
164 void stop_stream(camera::CameraRequester requester) override;
165 void request_image(camera::CameraRequester requester) override;
167
168 void add_image_callback(std::function<void(std::shared_ptr<camera::CameraImage>)> &&callback) override;
169 void add_stream_start_callback(std::function<void()> &&callback);
170 void add_stream_stop_callback(std::function<void()> &&callback);
172
173 protected:
174 /* internal methods */
175 bool has_requested_image_() const;
176 bool can_return_image_() const;
177
178 static void framebuffer_task(void *pv);
179
180 /* attributes */
181 /* camera configuration */
182 camera_config_t config_{};
183 /* -- image */
184 bool vertical_flip_{true};
186 int contrast_{0};
190 /* -- exposure */
192 bool aec2_{false};
193 int ae_level_{0};
194 uint32_t aec_value_{300};
195 /* -- gains */
197 uint8_t agc_value_{0};
199 /* -- white balance */
201 /* -- Test */
202 bool test_pattern_{false};
203 /* -- framerates */
204 uint32_t max_update_interval_{1000};
205 uint32_t idle_update_interval_{15000};
206
207 esp_err_t init_error_{ESP_OK};
208 std::shared_ptr<ESP32CameraImage> current_image_;
213 CallbackManager<void(std::shared_ptr<camera::CameraImage>)> new_image_callback_{};
216
218 uint32_t last_update_{0};
219#ifdef USE_I2C
221#endif // USE_I2C
222};
223
224class ESP32CameraImageTrigger : public Trigger<CameraImageData> {
225 public:
227 parent->add_image_callback([this](const std::shared_ptr<camera::CameraImage> &image) {
228 CameraImageData camera_image_data{};
229 camera_image_data.length = image->get_data_length();
230 camera_image_data.data = image->get_data_buffer();
231 this->trigger(camera_image_data);
232 });
233 }
234};
235
237 public:
239 parent->add_stream_start_callback([this]() { this->trigger(); });
240 }
241
242 protected:
243};
245 public:
247 parent->add_stream_stop_callback([this]() { this->trigger(); });
248 }
249
250 protected:
251};
252
253} // namespace esp32_camera
254} // namespace esphome
255
256#endif
BedjetMode mode
BedJet operating mode.
uint16_le_t frequency
Definition bl0942.h:6
Abstract camera base class.
Definition camera.h:57
Abstract camera image base class.
Definition camera.h:22
Abstract image reader base class.
Definition camera.h:36
void set_i2c_pins(uint8_t sda, uint8_t scl)
void set_agc_value(uint8_t agc_value)
void set_test_pattern(bool test_pattern)
void set_jpeg_quality(uint8_t quality)
void set_wb_mode(ESP32WhiteBalanceMode mode)
ESP32AgcGainCeiling agc_gain_ceiling_
void set_vertical_flip(bool vertical_flip)
void set_aec_value(uint32_t aec_value)
CallbackManager< void(std::shared_ptr< camera::CameraImage >)> new_image_callback_
void set_special_effect(ESP32SpecialEffect effect)
void set_aec_mode(ESP32GainControlMode mode)
CallbackManager< void()> stream_stop_callback_
float get_setup_priority() const override
void set_data_pins(std::array< uint8_t, 8 > pins)
void stop_stream(camera::CameraRequester requester) override
void add_stream_start_callback(std::function< void()> &&callback)
void set_i2c_id(i2c::InternalI2CBus *i2c_bus)
void set_frame_size(ESP32CameraFrameSize size)
void set_external_clock(uint8_t pin, uint32_t frequency)
void set_max_update_interval(uint32_t max_update_interval)
std::shared_ptr< ESP32CameraImage > current_image_
void add_image_callback(std::function< void(std::shared_ptr< camera::CameraImage >)> &&callback) override
void add_stream_stop_callback(std::function< void()> &&callback)
void set_horizontal_mirror(bool horizontal_mirror)
camera::CameraImageReader * create_image_reader() override
void set_frame_buffer_count(uint8_t fb_count)
void set_agc_gain_ceiling(ESP32AgcGainCeiling gain_ceiling)
void set_agc_mode(ESP32GainControlMode mode)
void set_frame_buffer_location(camera_fb_location_t fb_location)
void set_frame_buffer_mode(camera_grab_mode_t mode)
void set_idle_update_interval(uint32_t idle_update_interval)
CallbackManager< void()> stream_start_callback_
void start_stream(camera::CameraRequester requester) override
void request_image(camera::CameraRequester requester) override
static void framebuffer_task(void *pv)
bool was_requested_by(camera::CameraRequester requester) const override
ESP32CameraImage(camera_fb_t *buffer, uint8_t requester)
void set_image(std::shared_ptr< camera::CameraImage > image) override
std::shared_ptr< ESP32CameraImage > image_
void consume_data(size_t consumed) override
CameraRequester
Different sources for filtering.
Definition camera.h:16
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7