这里用到Kevincoooool的硬件,这里我贴出来,需要的可以去买支持一下这位大佬
https://item.taobao.com/item.htm?spm=a230r.1.14.16.1ca2390ezPeKek&id=655913924680&ns=1&abbucket=17#detail
这里我采用直接拉官方的例子,不采用店家的demo(下面一些基本操作就不贴命令了)
拉取ESP-WHO ,拉取ESP-IDF 4.4
进入例子esp-who/examples/human_face_detection/web
设置芯片为ESP32-S3
menuconfig 配置 ,摄像头用到的是OV2640,LCD控制器是ILI9341
1.配置串口打印输出,这里默认的是USB,改回UART0
Channel for console output (Default: UART0) --->
2.配置LCD驱动ILI9341 (这个配置可以全打开,后面程序会对LCD自动匹配)
→ Component config → LCD Drivers → Select Screen Controller
Espressif IoT Development Framework Configuration
[*] ILI9341
3.配置OV2640 这里默认是全部支持
(Top) → Component config → Camera configuration
Espressif IoT Development Framework Configuration
[*] Support OV7670 VGA
[*] Support OV7725 VGA
[*] Support NT99141 HD
[*] Support OV2640 2MP
[*] Support OV3660 3MP
[*] Support OV5640 5MP
[*] Support GC2145 2MP
[*] Support GC032A VGA
[*] Support GC0308 VGA
[*] Support BF3005(BYD3005) VGA
[*] Support BF20A6(BYD20A6) VGA
I2C peripheral to use for SCCB (I2C1) --->
修改程序 (这里只贴修改部分)
(1).app_main.cpp
摄像头格式:PIXFORMAT_JPEG
使用VGA格式
不使用AI算法
fb_count = 6 (多给缓冲,默认放到SRAM)
extern "C" void app_main()
{
app_wifi_main();
app_mdns_main();
xQueueAIFrame = xQueueCreate(2, sizeof(camera_fb_t *));
xQueueHttpFrame = xQueueCreate(2, sizeof(camera_fb_t *));
//FRAMESIZE_UXGA FRAMESIZE_VGA FRAMESIZE_QVGA
register_camera(PIXFORMAT_JPEG, FRAMESIZE_VGA, 6, xQueueAIFrame);
//register_human_face_detection(xQueueAIFrame, NULL, NULL, xQueueHttpFrame);
// register_cat_face_detection(xQueueAIFrame, NULL, NULL, xQueueHttpFrame);
register_httpd(xQueueAIFrame, NULL, true);
register_lcd(xQueueAIFrame, NULL, true);
i2s_driver_init();
}
(2).esp-who\components\modules\lcd\who_lcd.h
修改引脚,H V 改成320 x 240
#define BOARD_LCD_MOSI 11
#define BOARD_LCD_MISO -1
#define BOARD_LCD_SCK 12
#define BOARD_LCD_CS 10
#define BOARD_LCD_DC 9
#define BOARD_LCD_RST -1
#define BOARD_LCD_BL -1
#define BOARD_LCD_PIXEL_CLOCK_HZ (40 * 1000 * 1000)
#define BOARD_LCD_BK_LIGHT_ON_LEVEL 0
#define BOARD_LCD_BK_LIGHT_OFF_LEVEL !BOARD_LCD_BK_LIGHT_ON_LEVEL
#define BOARD_LCD_H_RES 320
#define BOARD_LCD_V_RES 240
#define BOARD_LCD_CMD_BITS 8
#define BOARD_LCD_PARAM_BITS 8
#define LCD_HOST SPI2_HOST
(3).esp-who\components\modules\lcd\who_lcd.c
使用RGB565解码,并且2X压缩给到显示屏
该改成320x240都需要改
.swap_data = 1
.rotate = 4
esp_err_t register_lcd(const QueueHandle_t frame_i, const QueueHandle_t frame_o, const bool return_fb)
{
spi_config_t bus_conf = {
.miso_io_num = BOARD_LCD_MISO,
.mosi_io_num = BOARD_LCD_MOSI,
.sclk_io_num = BOARD_LCD_SCK,
.max_transfer_sz = 2 * 320 * 240 + 10,
};
spi_bus_handle_t spi_bus = spi_bus_create(SPI2_HOST, &bus_conf);
scr_interface_spi_config_t spi_lcd_cfg = {
.spi_bus = spi_bus,
.pin_num_cs = BOARD_LCD_CS,
.pin_num_dc = BOARD_LCD_DC,
.clk_freq = 40 * 1000000,
.swap_data = 1,
};
scr_interface_driver_t *iface_drv;
scr_interface_create(SCREEN_IFACE_SPI, &spi_lcd_cfg, &iface_drv);
esp_err_t ret = scr_find_driver(SCREEN_CONTROLLER_ILI9341, &g_lcd);
if (ESP_OK != ret)
{
return ret;
ESP_LOGE(TAG, "screen find failed");
}
scr_controller_config_t lcd_cfg = {
.interface_drv = iface_drv,
.pin_num_rst = BOARD_LCD_RST,
.pin_num_bckl = BOARD_LCD_BL,
.rst_active_level = 0,
.bckl_active_level = 0,
.offset_hor = 0,
.offset_ver = 0,
.width = 240,
.height = 320,
.rotate = 4,
};
ret = g_lcd.init(&lcd_cfg);
if (ESP_OK != ret)
{
return ESP_FAIL;
ESP_LOGE(TAG, "screen initialize failed");
}
g_lcd.get_info(&g_lcd_info);
ESP_LOGI(TAG, "Screen name:%s | width:%d | height:%d", g_lcd_info.name, g_lcd_info.width, g_lcd_info.height);
app_lcd_set_color(0x000000);
vTaskDelay(pdMS_TO_TICKS(200));
app_lcd_draw_wallpaper();
vTaskDelay(pdMS_TO_TICKS(200));
xQueueFrameI = frame_i;
xQueueFrameO = frame_o;
gReturnFB = return_fb;
//下面暂时不运行了
xTaskCreatePinnedToCore(task_process_handler, TAG, 4 * 1024, NULL, 5, NULL, 0);
return ESP_OK;
}
(4).esp-who\components\modules\camera\who_camera.h
频率改成20M,按照店家说,这里不会影响,但我实测,这里使用原本的15M,WEB端会有卡顿情况出现
#define XCLK_FREQ_HZ 20000000
(5).esp-who\components\modules\camera\who_camera.c
不需要修改,这里可以关注一下这些参数
config.jpeg_quality = 12; 越大,则图片质量越差,数据量小,速度快
config.fb_location = CAMERA_FB_IN_PSRAM; FB放到SRAM

在这里插入图片描述