forked from xiaozhi/xiaozhi-esp32
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user