@@ -121,41 +121,48 @@ class EspSparkBot : public WifiBoard {
121121 }
122122
123123 void InitializeCamera () {
124- camera_config_t camera_config = {};
125-
126- camera_config.pin_pwdn = SPARKBOT_CAMERA_PWDN;
127- camera_config.pin_reset = SPARKBOT_CAMERA_RESET;
128- camera_config.pin_xclk = SPARKBOT_CAMERA_XCLK;
129- camera_config.pin_pclk = SPARKBOT_CAMERA_PCLK;
130- camera_config.pin_sccb_sda = SPARKBOT_CAMERA_SIOD;
131- camera_config.pin_sccb_scl = SPARKBOT_CAMERA_SIOC;
132-
133- camera_config.pin_d0 = SPARKBOT_CAMERA_D0;
134- camera_config.pin_d1 = SPARKBOT_CAMERA_D1;
135- camera_config.pin_d2 = SPARKBOT_CAMERA_D2;
136- camera_config.pin_d3 = SPARKBOT_CAMERA_D3;
137- camera_config.pin_d4 = SPARKBOT_CAMERA_D4;
138- camera_config.pin_d5 = SPARKBOT_CAMERA_D5;
139- camera_config.pin_d6 = SPARKBOT_CAMERA_D6;
140- camera_config.pin_d7 = SPARKBOT_CAMERA_D7;
141-
142- camera_config.pin_vsync = SPARKBOT_CAMERA_VSYNC;
143- camera_config.pin_href = SPARKBOT_CAMERA_HSYNC;
144- camera_config.pin_pclk = SPARKBOT_CAMERA_PCLK;
145- camera_config.xclk_freq_hz = SPARKBOT_CAMERA_XCLK_FREQ;
146- camera_config.ledc_timer = SPARKBOT_LEDC_TIMER;
147- camera_config.ledc_channel = SPARKBOT_LEDC_CHANNEL;
148- camera_config.fb_location = CAMERA_FB_IN_PSRAM;
149-
150- camera_config.sccb_i2c_port = I2C_NUM_0;
151-
152- camera_config.pixel_format = PIXFORMAT_RGB565;
153- camera_config.frame_size = FRAMESIZE_240X240;
154- camera_config.jpeg_quality = 12 ;
155- camera_config.fb_count = 1 ;
156- camera_config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
124+
125+ // DVP pin configuration
126+ static esp_cam_ctlr_dvp_pin_config_t dvp_pin_config = {
127+ .data_width = CAM_CTLR_DATA_WIDTH_8,
128+ .data_io = {
129+ [0 ] = SPARKBOT_CAMERA_D0,
130+ [1 ] = SPARKBOT_CAMERA_D1,
131+ [2 ] = SPARKBOT_CAMERA_D2,
132+ [3 ] = SPARKBOT_CAMERA_D3,
133+ [4 ] = SPARKBOT_CAMERA_D4,
134+ [5 ] = SPARKBOT_CAMERA_D5,
135+ [6 ] = SPARKBOT_CAMERA_D6,
136+ [7 ] = SPARKBOT_CAMERA_D7,
137+ },
138+ .vsync_io = SPARKBOT_CAMERA_VSYNC,
139+ .de_io = SPARKBOT_CAMERA_HSYNC,
140+ .pclk_io = SPARKBOT_CAMERA_PCLK,
141+ .xclk_io = SPARKBOT_CAMERA_XCLK,
142+ };
143+
144+ // 复用 I2C 总线
145+ esp_video_init_sccb_config_t sccb_config = {
146+ .init_sccb = false , // 不初始化新的 SCCB,使用现有的 I2C 总线
147+ .i2c_handle = i2c_bus_, // 使用现有的 I2C 总线句柄
148+ .freq = 100000 , // 100kHz
149+ };
150+
151+ // DVP configuration
152+ esp_video_init_dvp_config_t dvp_config = {
153+ .sccb_config = sccb_config,
154+ .reset_pin = SPARKBOT_CAMERA_RESET,
155+ .pwdn_pin = SPARKBOT_CAMERA_PWDN,
156+ .dvp_pin = dvp_pin_config,
157+ .xclk_freq = SPARKBOT_CAMERA_XCLK_FREQ,
158+ };
159+
160+ // Main video configuration
161+ esp_video_init_config_t video_config = {
162+ .dvp = &dvp_config,
163+ };
157164
158- camera_ = new Esp32Camera (camera_config );
165+ camera_ = new Esp32Camera (video_config );
159166
160167 Settings settings (" sparkbot" , false );
161168 // 考虑到部分复刻使用了不可动摄像头的设计,默认启用翻转
0 commit comments