mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-17 23:28:15 +00:00
feat(camera): supported camera related example using sc2336 and ek79007
Closes https://github.com/espressif/esp-idf/issues/14517
This commit is contained in:
@@ -7,12 +7,12 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "sdkconfig.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_heap_caps.h"
|
||||
#include "esp_lcd_mipi_dsi.h"
|
||||
#include "esp_lcd_panel_ops.h"
|
||||
#include "esp_lcd_ili9881c.h"
|
||||
#include "esp_ldo_regulator.h"
|
||||
#include "esp_cache.h"
|
||||
#include "driver/i2c_master.h"
|
||||
@@ -23,9 +23,9 @@
|
||||
#include "esp_sccb_intf.h"
|
||||
#include "esp_sccb_i2c.h"
|
||||
#include "esp_cam_sensor.h"
|
||||
#include "ov5647.h"
|
||||
#include "example_dsi_init.h"
|
||||
#include "example_dsi_init_config.h"
|
||||
#include "example_sensor_init.h"
|
||||
#include "example_config.h"
|
||||
|
||||
static const char *TAG = "isp_dsi";
|
||||
@@ -190,7 +190,6 @@ void app_main(void)
|
||||
esp_err_t ret = ESP_FAIL;
|
||||
esp_lcd_dsi_bus_handle_t mipi_dsi_bus = NULL;
|
||||
esp_lcd_panel_io_handle_t mipi_dbi_io = NULL;
|
||||
esp_lcd_panel_handle_t ili9881c_ctrl_panel = NULL;
|
||||
esp_lcd_panel_handle_t mipi_dpi_panel = NULL;
|
||||
void *frame_buffer = NULL;
|
||||
size_t frame_buffer_size = 0;
|
||||
@@ -209,7 +208,7 @@ void app_main(void)
|
||||
* ISP convert to RGB565
|
||||
*/
|
||||
//---------------DSI Init------------------//
|
||||
example_dsi_resource_alloc(&ili9881c_ctrl_panel, &mipi_dsi_bus, &mipi_dbi_io, &mipi_dpi_panel, &frame_buffer);
|
||||
example_dsi_resource_alloc(&mipi_dsi_bus, &mipi_dbi_io, &mipi_dpi_panel, &frame_buffer);
|
||||
|
||||
//---------------Necessary variable config------------------//
|
||||
frame_buffer_size = CONFIG_EXAMPLE_MIPI_CSI_DISP_HRES * CONFIG_EXAMPLE_MIPI_DSI_DISP_VRES * EXAMPLE_RGB565_BITS_PER_PIXEL / 8;
|
||||
@@ -223,29 +222,18 @@ void app_main(void)
|
||||
.buflen = frame_buffer_size,
|
||||
};
|
||||
|
||||
//---------------I2C Init------------------//
|
||||
i2c_master_bus_config_t i2c_bus_conf = {
|
||||
.clk_source = I2C_CLK_SRC_DEFAULT,
|
||||
.sda_io_num = EXAMPLE_MIPI_SCCB_SDA_IO,
|
||||
.scl_io_num = EXAMPLE_MIPI_SCCB_SCL_IO,
|
||||
.i2c_port = I2C_NUM_0,
|
||||
.flags.enable_internal_pullup = true,
|
||||
};
|
||||
i2c_master_bus_handle_t bus_handle = NULL;
|
||||
ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_conf, &bus_handle));
|
||||
//--------Camera Sensor and SCCB Init-----------//
|
||||
i2c_master_bus_handle_t i2c_bus_handle = NULL;
|
||||
example_sensor_init(I2C_NUM_0, &i2c_bus_handle);
|
||||
|
||||
//---------------SCCB Init------------------//
|
||||
esp_sccb_io_handle_t ov5647_io_handle = NULL;
|
||||
//---------------VCM SCCB Init------------------//
|
||||
esp_sccb_io_handle_t dw9714_io_handle = NULL;
|
||||
sccb_i2c_config_t i2c_config = {
|
||||
.scl_speed_hz = EXAMPLE_MIPI_SCCB_FREQ,
|
||||
.device_address = EXAMPLE_OV5647_DEV_ADDR,
|
||||
.device_address = EXAMPLE_DW9714_DEV_ADDR,
|
||||
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
|
||||
};
|
||||
ESP_ERROR_CHECK(sccb_new_i2c_io(bus_handle, &i2c_config, &ov5647_io_handle));
|
||||
|
||||
esp_sccb_io_handle_t dw9714_io_handle = NULL;
|
||||
i2c_config.device_address = EXAMPLE_DW9714_DEV_ADDR;
|
||||
ESP_ERROR_CHECK(sccb_new_i2c_io(bus_handle, &i2c_config, &dw9714_io_handle));
|
||||
ESP_ERROR_CHECK(sccb_new_i2c_io(i2c_bus_handle, &i2c_config, &dw9714_io_handle));
|
||||
|
||||
//---------------CSI Init------------------//
|
||||
esp_cam_ctlr_csi_config_t csi_config = {
|
||||
@@ -370,8 +358,8 @@ void app_main(void)
|
||||
};
|
||||
xTaskCreatePinnedToCore(af_task, "af_task", 8192, &af_task_param, 5, NULL, 0);
|
||||
|
||||
//---------------DSI Panel Init------------------//
|
||||
example_dsi_ili9881c_panel_init(ili9881c_ctrl_panel);
|
||||
//---------------DPI Reset------------------//
|
||||
example_dpi_panel_reset(mipi_dpi_panel);
|
||||
|
||||
//init to all white
|
||||
memset(frame_buffer, 0xFF, frame_buffer_size);
|
||||
@@ -382,55 +370,6 @@ void app_main(void)
|
||||
return;
|
||||
}
|
||||
|
||||
esp_cam_sensor_config_t cam_config = {
|
||||
.sccb_handle = ov5647_io_handle,
|
||||
.reset_pin = -1,
|
||||
.pwdn_pin = -1,
|
||||
.xclk_pin = -1,
|
||||
.sensor_port = ESP_CAM_SENSOR_MIPI_CSI,
|
||||
};
|
||||
|
||||
esp_cam_sensor_device_t *cam = ov5647_detect(&cam_config);
|
||||
if (!cam) {
|
||||
ESP_LOGE(TAG, "failed to detect 5647");
|
||||
return;
|
||||
}
|
||||
|
||||
esp_cam_sensor_format_array_t cam_fmt_array = {0};
|
||||
esp_cam_sensor_query_format(cam, &cam_fmt_array);
|
||||
const esp_cam_sensor_format_t *parray = cam_fmt_array.format_array;
|
||||
for (int i = 0; i < cam_fmt_array.count; i++) {
|
||||
ESP_LOGI(TAG, "fmt[%d].name:%s", i, parray[i].name);
|
||||
}
|
||||
|
||||
esp_cam_sensor_format_t *cam_cur_fmt = NULL;
|
||||
for (int i = 0; i < cam_fmt_array.count; i++) {
|
||||
#if CONFIG_EXAMPLE_MIPI_CSI_VRES_640
|
||||
if (!strcmp(parray[i].name, "MIPI_2lane_24Minput_RAW8_800x640_50fps")) {
|
||||
cam_cur_fmt = (esp_cam_sensor_format_t *) & (parray[i].name);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
if (!strcmp(parray[i].name, "MIPI_2lane_24Minput_RAW8_800x1280_50fps")) {
|
||||
cam_cur_fmt = (esp_cam_sensor_format_t *) & (parray[i].name);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
ret = esp_cam_sensor_set_format(cam, (const esp_cam_sensor_format_t *) cam_cur_fmt);
|
||||
if (ret != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Format set fail");
|
||||
} else {
|
||||
ESP_LOGI(TAG, "Format in use:%s", cam_cur_fmt->name);
|
||||
}
|
||||
int enable_flag = 1;
|
||||
// Set sensor output stream
|
||||
ret = esp_cam_sensor_ioctl(cam, ESP_CAM_SENSOR_IOC_S_STREAM, &enable_flag);
|
||||
if (ret != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Start stream fail");
|
||||
}
|
||||
|
||||
example_dpi_panel_init(mipi_dpi_panel);
|
||||
|
||||
while (1) {
|
||||
|
Reference in New Issue
Block a user