1010#include < esp_log.h>
1111#include < driver/i2c_master.h>
1212#include < wifi_station.h>
13+ #include " esp32_camera.h"
1314
14- #define TAG " AtomS3R M12+ EchoBase"
15+ #define TAG " AtomS3R CAM/ M12 + EchoBase"
1516
1617#define PI4IOE_ADDR 0x43
1718#define PI4IOE_REG_CTRL 0x00
@@ -39,6 +40,7 @@ class AtomS3rCamM12EchoBaseBoard : public WifiBoard {
3940 i2c_master_bus_handle_t i2c_bus_;
4041 Pi4ioe* pi4ioe_ = nullptr ;
4142 bool is_echo_base_connected_ = false ;
43+ Esp32Camera* camera_;
4244
4345 void InitializeI2c () {
4446 // Initialize I2C peripheral
@@ -122,7 +124,37 @@ class AtomS3rCamM12EchoBaseBoard : public WifiBoard {
122124
123125 ESP_LOGI (TAG, " Camera Power Enabled" );
124126
125- vTaskDelay (pdMS_TO_TICKS (200 ));
127+ vTaskDelay (pdMS_TO_TICKS (300 ));
128+ }
129+
130+ void InitializeCamera () {
131+ camera_config_t config = {};
132+ config.pin_d0 = CAMERA_PIN_D0;
133+ config.pin_d1 = CAMERA_PIN_D1;
134+ config.pin_d2 = CAMERA_PIN_D2;
135+ config.pin_d3 = CAMERA_PIN_D3;
136+ config.pin_d4 = CAMERA_PIN_D4;
137+ config.pin_d5 = CAMERA_PIN_D5;
138+ config.pin_d6 = CAMERA_PIN_D6;
139+ config.pin_d7 = CAMERA_PIN_D7;
140+ config.pin_xclk = CAMERA_PIN_XCLK;
141+ config.pin_pclk = CAMERA_PIN_PCLK;
142+ config.pin_vsync = CAMERA_PIN_VSYNC;
143+ config.pin_href = CAMERA_PIN_HREF;
144+ config.pin_sccb_sda = CAMERA_PIN_SIOD;
145+ config.pin_sccb_scl = CAMERA_PIN_SIOC;
146+ config.sccb_i2c_port = 1 ;
147+ config.pin_pwdn = CAMERA_PIN_PWDN;
148+ config.pin_reset = CAMERA_PIN_RESET;
149+ config.xclk_freq_hz = XCLK_FREQ_HZ;
150+ config.pixel_format = PIXFORMAT_RGB565;
151+ config.frame_size = FRAMESIZE_QVGA;
152+ config.jpeg_quality = 12 ;
153+ config.fb_count = 1 ;
154+ config.fb_location = CAMERA_FB_IN_PSRAM;
155+ config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
156+ camera_ = new Esp32Camera (config);
157+ camera_->SetHMirror (false );
126158 }
127159
128160 // 物联网初始化,添加对 AI 可见设备
@@ -131,9 +163,13 @@ class AtomS3rCamM12EchoBaseBoard : public WifiBoard {
131163 thing_manager.AddThing (iot::CreateThing (" Speaker" ));
132164 }
133165
166+ virtual Camera* GetCamera () override {
167+ return camera_;
168+ }
134169public:
135170 AtomS3rCamM12EchoBaseBoard () {
136171 EnableCameraPower (); // IO18 还会控制指示灯
172+ InitializeCamera ();
137173 InitializeI2c ();
138174 I2cDetect ();
139175 CheckEchoBaseConnection ();
0 commit comments