From 3a404d6f630cb8e8c9ba194ffb1f07eeb9cfa1d0 Mon Sep 17 00:00:00 2001 From: 7FM <41307817+7FM@users.noreply.github.com> Date: Wed, 1 Apr 2020 16:22:08 +0200 Subject: [PATCH 1/9] Fix UB by avoiding duplicate httpd_resp_send_x --- .../camera_web_server/main/app_httpd.c | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/examples/single_chip/camera_web_server/main/app_httpd.c b/examples/single_chip/camera_web_server/main/app_httpd.c index 8c29c06..43e90d3 100644 --- a/examples/single_chip/camera_web_server/main/app_httpd.c +++ b/examples/single_chip/camera_web_server/main/app_httpd.c @@ -692,8 +692,10 @@ static esp_err_t cmd_handler(httpd_req_t *req) char variable[32]; char value[32]; - if (parse_get(req, &buf) != ESP_OK || - httpd_query_key_value(buf, "var", variable, sizeof(variable)) != ESP_OK || + if (parse_get(req, &buf) != ESP_OK) { + return ESP_FAIL; + } + if (httpd_query_key_value(buf, "var", variable, sizeof(variable)) != ESP_OK || httpd_query_key_value(buf, "val", value, sizeof(value)) != ESP_OK) { free(buf); httpd_resp_send_404(req); @@ -901,8 +903,10 @@ static esp_err_t xclk_handler(httpd_req_t *req) char *buf = NULL; char _xclk[32]; - if (parse_get(req, &buf) != ESP_OK || - httpd_query_key_value(buf, "xclk", _xclk, sizeof(_xclk)) != ESP_OK) { + if (parse_get(req, &buf) != ESP_OK) { + return ESP_FAIL; + } + if (httpd_query_key_value(buf, "xclk", _xclk, sizeof(_xclk)) != ESP_OK) { free(buf); httpd_resp_send_404(req); return ESP_FAIL; @@ -929,8 +933,10 @@ static esp_err_t reg_handler(httpd_req_t *req) char _mask[32]; char _val[32]; - if (parse_get(req, &buf) != ESP_OK || - httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK || + if (parse_get(req, &buf) != ESP_OK) { + return ESP_FAIL; + } + if (httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK || httpd_query_key_value(buf, "mask", _mask, sizeof(_mask)) != ESP_OK || httpd_query_key_value(buf, "val", _val, sizeof(_val)) != ESP_OK) { free(buf); @@ -960,8 +966,10 @@ static esp_err_t greg_handler(httpd_req_t *req) char _reg[32]; char _mask[32]; - if (parse_get(req, &buf) != ESP_OK || - httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK || + if (parse_get(req, &buf) != ESP_OK) { + return ESP_FAIL; + } + if (httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK || httpd_query_key_value(buf, "mask", _mask, sizeof(_mask)) != ESP_OK) { free(buf); httpd_resp_send_404(req); @@ -998,8 +1006,6 @@ static esp_err_t pll_handler(httpd_req_t *req) char *buf = NULL; if (parse_get(req, &buf) != ESP_OK) { - free(buf); - httpd_resp_send_404(req); return ESP_FAIL; } @@ -1029,8 +1035,6 @@ static esp_err_t win_handler(httpd_req_t *req) char *buf = NULL; if (parse_get(req, &buf) != ESP_OK) { - free(buf); - httpd_resp_send_404(req); return ESP_FAIL; } From eb8c12026f74707719085146bbbe32ff686cfc53 Mon Sep 17 00:00:00 2001 From: Ram Rohit Gannavarapu Date: Mon, 31 Aug 2020 18:25:45 -0600 Subject: [PATCH 2/9] Update readme with correct example folder There is no folder detection_with_commnad_line --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6c1c41b..82419a8 100644 --- a/README.md +++ b/README.md @@ -93,9 +93,9 @@ The folder of [examples](examples) contains sample applications demonstrating th Take one Face Detection as an example. -1. Get into one example folder `esp-who/examples/single_chip/detection_with_command_line`. +1. Get into one example folder `esp-who/examples/single_chip/face_detection_with_command_line`. ``` -cd esp-who/examples/single_chip/detection_with_command_line +cd esp-who/examples/single_chip/face_detection_with_command_line ``` 2. Compile and flash the project. From 9e9c0947355d3d41dcebbbfab76db4067e2f4b35 Mon Sep 17 00:00:00 2001 From: Ram Rohit Gannavarapu Date: Thu, 3 Sep 2020 20:00:48 -0600 Subject: [PATCH 3/9] update formating --- examples/single_chip/camera_web_server/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/single_chip/camera_web_server/README.md b/examples/single_chip/camera_web_server/README.md index 7b7782b..32587ff 100755 --- a/examples/single_chip/camera_web_server/README.md +++ b/examples/single_chip/camera_web_server/README.md @@ -17,6 +17,6 @@ After you've completed the hardware settings, please follow the steps below: 4. **Open Your Browser** and point it to `http://[ip-of-esp32]/`; 5. **To Get Image** press `Get Still` or `Start Stream`; 6. **Use The Options** to enable/disable Face Detection, Face Recognition and more; -t. **View The Stream** in a player like VLC: Open Network `http://[ip-of-esp32]:81/stream`; +7. **View The Stream** in a player like VLC: Open Network `http://[ip-of-esp32]:81/stream`; For more details of the http handler, please refer to [esp32-camera](https://github.com/espressif/esp32-camera). From 3aae910d0b5dd10b4915aad032b3bcafeba499d6 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Oct 2020 12:35:25 +0300 Subject: [PATCH 4/9] Add support for the 18 pin header on the ESP32 Camera Dev Board --- .../camera_web_server/main/include/app_camera.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/examples/single_chip/camera_web_server/main/include/app_camera.h b/examples/single_chip/camera_web_server/main/include/app_camera.h index 333fd3e..6a080be 100755 --- a/examples/single_chip/camera_web_server/main/include/app_camera.h +++ b/examples/single_chip/camera_web_server/main/include/app_camera.h @@ -45,6 +45,9 @@ #define PCLK_GPIO_NUM 22 #elif CONFIG_CAMERA_MODEL_ESP32_CAM_BOARD +// The 18 pin header on the board has Y5 and Y3 swapped +#define USE_BOARD_HEADER 0 + #define CAM_BOARD "ESP-DEVCAM" #define PWDN_GPIO_NUM 32 #define RESET_GPIO_NUM 33 @@ -56,9 +59,17 @@ #define Y8_GPIO_NUM 19 #define Y7_GPIO_NUM 21 #define Y6_GPIO_NUM 39 +#if USE_BOARD_HEADER +#define Y5_GPIO_NUM 13 +#else #define Y5_GPIO_NUM 35 +#endif #define Y4_GPIO_NUM 14 +#if USE_BOARD_HEADER +#define Y3_GPIO_NUM 35 +#else #define Y3_GPIO_NUM 13 +#endif #define Y2_GPIO_NUM 34 #define VSYNC_GPIO_NUM 5 #define HREF_GPIO_NUM 27 From b468635ba1a8c3de7ec87c31eac4b3767ce521da Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Oct 2020 12:36:08 +0300 Subject: [PATCH 5/9] Add support for downloading BMPs through the web server --- .../camera_web_server/main/app_httpd.c | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/examples/single_chip/camera_web_server/main/app_httpd.c b/examples/single_chip/camera_web_server/main/app_httpd.c index 801e97e..c4fa886 100644 --- a/examples/single_chip/camera_web_server/main/app_httpd.c +++ b/examples/single_chip/camera_web_server/main/app_httpd.c @@ -289,6 +289,44 @@ void enable_led(bool en) } #endif +static esp_err_t bmp_handler(httpd_req_t *req) +{ + camera_fb_t *fb = NULL; + esp_err_t res = ESP_OK; + uint64_t fr_start = esp_timer_get_time(); + fb = esp_camera_fb_get(); + if (!fb) + { + ESP_LOGE(TAG, "Camera capture failed"); + httpd_resp_send_500(req); + return ESP_FAIL; + } + + httpd_resp_set_type(req, "image/x-windows-bmp"); + httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.bmp"); + httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); + + char ts[32]; + snprintf(ts, 32, "%ld.%06ld", fb->timestamp.tv_sec, fb->timestamp.tv_usec); + httpd_resp_set_hdr(req, "X-Timestamp", (const char *)ts); + + + uint8_t * buf = NULL; + size_t buf_len = 0; + bool converted = frame2bmp(fb, &buf, &buf_len); + esp_camera_fb_return(fb); + if(!converted){ + ESP_LOGE(TAG, "BMP Conversion failed"); + httpd_resp_send_500(req); + return ESP_FAIL; + } + res = httpd_resp_send(req, (const char *)buf, buf_len); + free(buf); + uint64_t fr_end = esp_timer_get_time(); + ESP_LOGI(TAG, "BMP: %llums, %uB", (uint64_t)((fr_end - fr_start) / 1000), buf_len); + return res; +} + static size_t jpg_encode_stream(void *arg, size_t index, const void *data, size_t len) { jpg_chunking_t *j = (jpg_chunking_t *)arg; @@ -761,10 +799,11 @@ static esp_err_t cmd_handler(httpd_req_t *req) #endif #endif else { + ESP_LOGI(TAG, "Unknown command: %s", variable); res = -1; } - if (res) { + if (res < 0) { return httpd_resp_send_500(req); } @@ -807,7 +846,7 @@ static esp_err_t status_handler(httpd_req_t *req) p+=print_reg(p, s, reg, 0xFF); } p+=print_reg(p, s, 0x558a, 0x1FF);//9 bit - } else { + } else if(s->id.PID == OV2640_PID){ p+=print_reg(p, s, 0xd3, 0xFF); p+=print_reg(p, s, 0x111, 0xFF); p+=print_reg(p, s, 0x132, 0xFF); @@ -1075,7 +1114,7 @@ static esp_err_t monitor_handler(httpd_req_t *req) void app_httpd_main() { httpd_config_t config = HTTPD_DEFAULT_CONFIG(); - config.max_uri_handlers = 12; + config.max_uri_handlers = 16; httpd_uri_t index_uri = { .uri = "/", @@ -1107,6 +1146,12 @@ void app_httpd_main() .handler = stream_handler, .user_ctx = NULL}; + httpd_uri_t bmp_uri = { + .uri = "/bmp", + .method = HTTP_GET, + .handler = bmp_handler, + .user_ctx = NULL}; + httpd_uri_t xclk_uri = { .uri = "/xclk", .method = HTTP_GET, @@ -1179,6 +1224,7 @@ void app_httpd_main() httpd_register_uri_handler(camera_httpd, &cmd_uri); httpd_register_uri_handler(camera_httpd, &status_uri); httpd_register_uri_handler(camera_httpd, &capture_uri); + httpd_register_uri_handler(camera_httpd, &bmp_uri); httpd_register_uri_handler(camera_httpd, &xclk_uri); httpd_register_uri_handler(camera_httpd, ®_uri); From ac84ca15841f20387fe5bcc3d3a29560fbd33065 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 16 Oct 2020 12:39:20 +0300 Subject: [PATCH 6/9] Update esp32-camera --- components/esp32-camera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp32-camera b/components/esp32-camera index af93185..0107093 160000 --- a/components/esp32-camera +++ b/components/esp32-camera @@ -1 +1 @@ -Subproject commit af931850f4a32566f51403758c3a49032327225c +Subproject commit 010709376a131c12c14bb074b6c5be82d2241338 From e7a10a382a015aab63c7b9679db96b8fcd75924c Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Mon, 11 Jan 2021 11:31:38 +0200 Subject: [PATCH 7/9] Update esp32-camera --- components/esp32-camera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp32-camera b/components/esp32-camera index 0107093..a5ccbec 160000 --- a/components/esp32-camera +++ b/components/esp32-camera @@ -1 +1 @@ -Subproject commit 010709376a131c12c14bb074b6c5be82d2241338 +Subproject commit a5ccbecf08f98eb84c7443d8aebe4a529ba737a7 From f13ca964279330354949dd1f4cb3de411294cb52 Mon Sep 17 00:00:00 2001 From: Kevincoooool <33611679+Kevincoooool@users.noreply.github.com> Date: Tue, 7 Dec 2021 11:09:42 +0800 Subject: [PATCH 8/9] Update esp32-camera --- components/esp32-camera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp32-camera b/components/esp32-camera index a5ccbec..61400bc 160000 --- a/components/esp32-camera +++ b/components/esp32-camera @@ -1 +1 @@ -Subproject commit a5ccbecf08f98eb84c7443d8aebe4a529ba737a7 +Subproject commit 61400bc73b18e9ffcfd5b3806fee26d135c45fe7 From d73a3c01639437ff15ee57f1047f5e4dd54cb41b Mon Sep 17 00:00:00 2001 From: Kevincoooool <33611679+Kevincoooool@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:12:48 +0800 Subject: [PATCH 9/9] Add KS-DIY esp32-s3 based camera series pin map --- components/modules/Kconfig | 2 + components/modules/camera/who_camera.h | 20 ++++++++++ .../main/include/app_peripherals.h | 40 ++++++++++++++++++- .../main/include/app_camera.h | 19 +++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) diff --git a/components/modules/Kconfig b/components/modules/Kconfig index 3690c36..c036983 100644 --- a/components/modules/Kconfig +++ b/components/modules/Kconfig @@ -82,6 +82,8 @@ menu "ESP-WHO Configuration" bool "M5Stack Camera F (Wide)" config CAMERA_MODULE_AI_THINKER bool "ESP32-CAM by AI-Thinker" + config CAMERA_MODULE_S3_KS_DIY + bool "ESP32-S3-CAM by S3_KS-DIY" config CAMERA_MODULE_CUSTOM bool "Custom Camera Pinout" endchoice diff --git a/components/modules/camera/who_camera.h b/components/modules/camera/who_camera.h index 2b72ceb..e2c41f8 100644 --- a/components/modules/camera/who_camera.h +++ b/components/modules/camera/who_camera.h @@ -171,6 +171,26 @@ #define CAMERA_PIN_HREF 23 #define CAMERA_PIN_PCLK 22 +#elif CONFIG_CAMERA_MODULE_S3_KS_DIY +#define CAMERA_MODULE_NAME "S3_KS_DIY" +#define CAMERA_PIN_PWDN -4 +#define CAMERA_PIN_RESET -1 +#define CAMERA_PIN_XCLK -1 +#define CAMERA_PIN_SIOD 17 +#define CAMERA_PIN_SIOC 18 + +#define CAMERA_PIN_D7 39 +#define CAMERA_PIN_D6 41 +#define CAMERA_PIN_D5 42 +#define CAMERA_PIN_D4 5 +#define CAMERA_PIN_D3 40 +#define CAMERA_PIN_D2 14 +#define CAMERA_PIN_D1 47 +#define CAMERA_PIN_D0 45 +#define CAMERA_PIN_VSYNC 21 +#define CAMERA_PIN_HREF 38 +#define CAMERA_PIN_PCLK 48 + #elif CONFIG_CAMERA_MODULE_CUSTOM #define CAMERA_MODULE_NAME "CUSTOM" #define CAMERA_PIN_PWDN CONFIG_CAMERA_PIN_PWDN diff --git a/examples/code_recognition/main/include/app_peripherals.h b/examples/code_recognition/main/include/app_peripherals.h index d69f6d0..9d4b0f4 100644 --- a/examples/code_recognition/main/include/app_peripherals.h +++ b/examples/code_recognition/main/include/app_peripherals.h @@ -174,6 +174,25 @@ #define CAMERA_PIN_HREF 23 #define CAMERA_PIN_PCLK 22 +#elif CONFIG_CAMERA_MODULE_S3_KS_DIY +#define CAMERA_MODULE_NAME "S3_KS_DIY" +#define CAMERA_PIN_PWDN -1 +#define CAMERA_PIN_RESET -1 +#define CAMERA_PIN_XCLK -1 +#define CAMERA_PIN_SIOD 17 +#define CAMERA_PIN_SIOC 18 + +#define CAMERA_PIN_D7 39 +#define CAMERA_PIN_D6 41 +#define CAMERA_PIN_D5 42 +#define CAMERA_PIN_D4 5 +#define CAMERA_PIN_D3 40 +#define CAMERA_PIN_D2 14 +#define CAMERA_PIN_D1 47 +#define CAMERA_PIN_D0 45 +#define CAMERA_PIN_VSYNC 21 +#define CAMERA_PIN_HREF 38 +#define CAMERA_PIN_PCLK 48 #elif CONFIG_CAMERA_MODULE_CUSTOM #define CAMERA_MODULE_NAME "CUSTOM" #define CAMERA_PIN_PWDN CONFIG_CAMERA_PIN_PWDN @@ -197,8 +216,8 @@ #define XCLK_FREQ_HZ 20000000 #define CAMERA_PIXFORMAT PIXFORMAT_RGB565 -#define CAMERA_FRAME_SIZE FRAMESIZE_240X240 -#define CAMERA_FB_COUNT 2 +#define CAMERA_FRAME_SIZE FRAMESIZE_QVGA +#define CAMERA_FB_COUNT 1 @@ -232,6 +251,23 @@ #define LCD_WIDTH 240 #define LCD_HEIGHT 320 #define LCD_ROTATE SCR_SWAP_XY|SCR_MIRROR_X + +#elif CAMERA_MODULE_S3_KS_DIY +#define LCD_CONTROLLER SCREEN_CONTROLLER_ST7789 + +#define LCD_MOSI 11 +#define LCD_MISO 13 +#define LCD_SCLK 12 +#define LCD_CS 10 +#define LCD_DC 9 +#define LCD_RST -1 +#define LCD_BCKL -1 + +// LCD display width and height +#define LCD_WIDTH 240 +#define LCD_HEIGHT 320 +#define LCD_ROTATE SCR_SWAP_XY|SCR_MIRROR_X + #endif diff --git a/examples/single_chip/camera_web_server/main/include/app_camera.h b/examples/single_chip/camera_web_server/main/include/app_camera.h index 6a080be..661df8e 100755 --- a/examples/single_chip/camera_web_server/main/include/app_camera.h +++ b/examples/single_chip/camera_web_server/main/include/app_camera.h @@ -155,6 +155,25 @@ #define HREF_GPIO_NUM 23 #define PCLK_GPIO_NUM 22 +#elif CONFIG_CAMERA_MODULE_S3_KS_DIY +#define CAMERA_MODULE_NAME "S3_KS_DIY" +#define CAMERA_PIN_PWDN -4 +#define CAMERA_PIN_RESET -1 +#define CAMERA_PIN_XCLK -1 +#define CAMERA_PIN_SIOD 17 +#define CAMERA_PIN_SIOC 18 + +#define CAMERA_PIN_D7 39 +#define CAMERA_PIN_D6 41 +#define CAMERA_PIN_D5 42 +#define CAMERA_PIN_D4 5 +#define CAMERA_PIN_D3 40 +#define CAMERA_PIN_D2 14 +#define CAMERA_PIN_D1 47 +#define CAMERA_PIN_D0 45 +#define CAMERA_PIN_VSYNC 21 +#define CAMERA_PIN_HREF 38 +#define CAMERA_PIN_PCLK 48 #elif CONFIG_CAMERA_MODEL_CUSTOM #define CAM_BOARD "CUSTOM"