Feat sscma camera (#770)

* feat: add sscma camera

* fix: 修复sscma camera 无法使用等问题

* feat: update README.md

* style: optimize styles

* style: fix styles

* Update sscma_camera.h

---------

Co-authored-by: Xiaoxia <terrence@tenclass.com>
This commit is contained in:
virgil
2025-06-06 14:22:39 +08:00
committed by GitHub
parent 8729fad9a8
commit 5c51fbc2f8
6 changed files with 490 additions and 0 deletions

View File

@@ -10,6 +10,7 @@
#include "led/single_led.h"
#include "iot/thing_manager.h"
#include "power_save_timer.h"
#include "sscma_camera.h"
#include <esp_log.h>
#include "esp_check.h"
@@ -97,6 +98,7 @@ private:
uint32_t long_press_cnt_;
button_driver_t* btn_driver_ = nullptr;
static SensecapWatcher* instance_;
SscmaCamera* camera_ = nullptr;
void InitializePowerSaveTimer() {
power_save_timer_ = new PowerSaveTimer(-1, 60, 300);
@@ -288,6 +290,19 @@ private:
}
void InitializeSpi() {
ESP_LOGI(TAG, "Initialize SSCMA SPI bus");
spi_bus_config_t spi_cfg = {0};
spi_cfg.mosi_io_num = BSP_SPI2_HOST_MOSI;
spi_cfg.miso_io_num = BSP_SPI2_HOST_MISO;
spi_cfg.sclk_io_num = BSP_SPI2_HOST_SCLK;
spi_cfg.quadwp_io_num = -1;
spi_cfg.quadhd_io_num = -1;
spi_cfg.isr_cpu_id = ESP_INTR_CPU_AFFINITY_1;
spi_cfg.max_transfer_sz = 4095;
ESP_ERROR_CHECK(spi_bus_initialize(SPI2_HOST, &spi_cfg, SPI_DMA_CH_AUTO));
ESP_LOGI(TAG, "Initialize QSPI bus");
spi_bus_config_t qspi_cfg = {0};
@@ -501,6 +516,27 @@ private:
ESP_ERROR_CHECK(esp_console_start_repl(repl));
}
void InitializeCamera() {
ESP_LOGI(TAG, "Initialize Camera");
// !!!NOTE: SD Card use same SPI bus as sscma client, so we need to disable SD card CS pin first
const gpio_config_t io_config = {
.pin_bit_mask = (1ULL << BSP_SD_SPI_CS),
.mode = GPIO_MODE_OUTPUT,
.pull_up_en = GPIO_PULLUP_ENABLE,
.pull_down_en = GPIO_PULLDOWN_DISABLE,
.intr_type = GPIO_INTR_DISABLE,
};
esp_err_t ret = gpio_config(&io_config);
if (ret != ESP_OK)
return;
gpio_set_level(BSP_SD_SPI_CS, 1);
camera_ = new SscmaCamera(io_exp_handle);
}
public:
SensecapWatcher() {
ESP_LOGI(TAG, "Initialize Sensecap Watcher");
@@ -512,6 +548,7 @@ public:
InitializeButton();
InitializeKnob();
Initializespd2010Display();
InitializeCamera();
InitializeIot();
GetBacklight()->RestoreBrightness();
}
@@ -573,6 +610,10 @@ public:
}
return true;
}
virtual Camera* GetCamera() override {
return camera_;
}
};
DECLARE_BOARD(SensecapWatcher);