diff --git a/code/.gitignore b/code/.gitignore index 913ce7cf..30582174 100644 --- a/code/.gitignore +++ b/code/.gitignore @@ -6,3 +6,10 @@ version.cpp sdkconfig.esp32cam sdkconfig.esp32cam-dev +sdkconfig.esp32cam-debug +sdkconfig.esp32cam-board-rev3 +sdkconfig.esp32cam-cpu-freq-240 +sdkconfig.esp32cam-board-rev3-cpu-freq-240 +sdkconfig.esp32cam-dev-himem +sdkconfig.esp32cam-dev-task-analysis +sdkconfig.esp32cam-no-softap diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 880cc5fc..e866557f 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.13.4) +cmake_minimum_required(VERSION 3.16.0) list(APPEND EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common components/tflite-micro-esp-examples/components/tflite-lib) @@ -8,6 +8,15 @@ ADD_CUSTOM_COMMAND( COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/version.cmake) +if(EXISTS "${SDKCONFIG}.defaults") + if(EXISTS "sdkconfig.defaults") + set(SDKCONFIG_DEFAULTS "${SDKCONFIG}.defaults;sdkconfig.defaults") + message(STATUS "-- Using defaults: ${SDKCONFIG_DEFAULTS} + sdkconfig.defaults") + else() + set(SDKCONFIG_DEFAULTS "${SDKCONFIG}.defaults") + endif() + message(STATUS "-- Using defaults: ${SDKCONFIG_DEFAULTS}") +endif() include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(esp32cam-server-only) +project(AI-on-the-edge) diff --git a/code/platformio.ini b/code/platformio.ini index bec6d5b1..2a6356ae 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -17,13 +17,6 @@ -DUSE_ESP_IDF lib_deps = -[common:arduino] - extends = common - lib_deps = - build_flags = - ${common.build_flags} - -DUSE_ARDUINO - [common:esp32-idf] extends = common:idf platform = platformio/espressif32 @ 5.2.0 @@ -50,61 +43,54 @@ -Wall -Wextra -Wunreachable-code - -Wshadow-compatible-local + ;-Wshadow-compatible-local -fno-exceptions +; The main env - default [env:esp32cam] - extends = common:esp32-idf - board = esp32cam - framework = espidf - build_flags = - ;Add macro definition ENABLE_MQTT, ENABLE_INFLUXDB, DEBUG_DETAIL_ON - ;if ENABLE_SOFTAP = disabled, set CONFIG_ESP_WIFI_SOFTAP_SUPPORT=n in sdkconfig.defaults to save 28k of flash - -D ENABLE_MQTT -D ENABLE_INFLUXDB -D ENABLE_SOFTAP - ${common:esp32-idf.build_flags} - ${flags:runtime.build_flags} - board_build.partitions = partitions.csv - monitor_speed = 115200 - monitor_rts = 0 - monitor_dtr = 0 - - -[env:esp32cam-dev] extends = common:esp32-idf -board = node32s -board_build.flash_mode = qio +board = esp32cam +framework = espidf +build_flags = + ; ### common imported : + ${common:esp32-idf.build_flags} + ${flags:runtime.build_flags} + ; ### Sofware options : (can be set in defines.h) + -D ENABLE_MQTT + -D ENABLE_INFLUXDB + -D ENABLE_SOFTAP +board_build.partitions = partitions.csv +monitor_speed = 115200 +monitor_rts = 0 +monitor_dtr = 0 + +; full standalone dev mode +; As sample, the board is nod32s instead of esp32cam (do not change nothing in fact :) +; You can test newer platform_packages +; or flash mode (board_build.flash_mode = qio) +[env:esp32cam-dev] +extends = common:esp32-idf +board = esp32cam ; node32s +;board_build.flash_mode = qio ;generate SPI_FAST_FLASH_BOOT boot loop build_flags = ; ### common imported : ${common:esp32-idf.build_flags} ${flags:clangtidy.build_flags} - ; ### Sofware options : + ; ### Sofware options : (can be set in defines.h) -D ENABLE_MQTT -D ENABLE_INFLUXDB ;-D ENABLE_SOFTAP - ;### test options + ; ### Debug options : + ;-D DEBUG_DETAIL_ON + ;-D DEBUG_DISABLE_BROWNOUT_DETECTOR + ;-D DEBUG_ENABLE_SYSINFO + ;-D DEBUG_ENABLE_PERFMON + ;-D DEBUG_HIMEM_MEMORY_CHECK + ;### test options -D CONFIG_ESP_TASK_WDT ;-D CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL - -D CONFIG_SPIRAM -D CONFIG_ESP_TASK_WDT_TIMEOUT_S ; fix for CONFIG_ESP_INT_WDT_TIMEOUT_MS - ; ### Debug options : - -D DEBUG_DETAIL_ON - ;-D DEBUG_DISABLE_BROWNOUT_DETECTOR - -D DEBUG_ENABLE_SYSINFO - -D DEBUG_ENABLE_PERFMON - ;Task analysis - -D TASK_ANALYSIS_ON - -D CONFIG_FREERTOS_USE_TRACE_FACILITY - -D CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS - -D CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID - ;#### enable support for 8Mb SPIRAM_ ; testing : https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/himem.html - -DBOARD_HAS_PSRAM - -mfix-esp32-psram-cache-issue - -D CONFIG_SPIRAM_TYPE_AUTO - -D CONFIG_SPIRAM_USE_CAPS_ALLOC - -D CONFIG_SPIRAM_USE_MALLOC - ;-D CONFIG_SPIRAM_BANKSWITCH_ENABLE=y - -D CONFIG_SPIRAM_BANKSWITCH_RESERVE=8 - ;-D CONFIG_SPIRAM_BANKSWITCH_RESERVE=4 + ;-D USE_HIMEM_IF_AVAILABLE framework = espidf lib_ldf_mode = deep+ platform = platformio/espressif32 @ 5.2.0 @@ -114,17 +100,111 @@ platform_packages = ;platformio/tool-cmake @ 3.16.4 ;platformio/tool-cmake@^3.21.3 ;platformio/tool-esptoolpy @ 1.40201.0 (4.2.1) - platformio/tool-esptoolpy@^1.40400.0 +;platformio/tool-esptoolpy@^1.40400.0 ;platformio/tool-idf @ 1.0.1 ;platformio/tool-mconf @ 1.4060000.20190628 (406.0.0) ;platformio/tool-ninja @ 1.9.0 ;platformio/tool-ninja @ 1.10.2 ;platformio/toolchain-esp32ulp @ 1.22851.191205 (2.28.51) - espressif/toolchain-esp32ulp @ 2.35.0-20220830 - ;platformio/toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3 +;espressif/toolchain-esp32ulp @ 2.35.0-20220830 + ;platformio/toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5 ;platformio/toolchain-xtensa-esp32 @ 11.2.0+2022r1 - + +; platformio/espressif32 @ 5.3.0 dependencies : + ;platformio/framework-espidf @ 3.40403.0 + ;platformio/tool-cmake @ 3.16.4 + ;platformio/tool-esptoolpy@^1.40400.0 + ;platformio/tool-idf @ 1.0.1 + ;platformio/tool-mconf @ 1.4060000.20190628 + ;platformio/tool-ninja @ 1.9.0 + ;espressif/toolchain-esp32ulp @ 2.35.0-20220830 + ;;;;espressif/toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5 board_build.partitions = partitions.csv monitor_speed = 115200 monitor_rts = 0 monitor_dtr = 0 + + +; Activate all debug mode +; Cannot be used alone, but must be added at the end of extends = env:esp32cam-dev, esp32cam-debug +;If multiple items specified in the extends field then only values from the latter one will be used in the final configuration +;https://docs.platformio.org/en/stable/projectconf/section_env_advanced.html +[env:esp32cam-debug] ; activate all debug +;extends nothing, only apply sdkconfig.esp32-debug.defaults, enable debug options and clangtidy +build_flags = + ; ### clangtidy build flags: + ${flags:clangtidy.build_flags} + ; ### Debug options : + -D DEBUG_DETAIL_ON + ;-D DEBUG_DISABLE_BROWNOUT_DETECTOR + -D DEBUG_ENABLE_SYSINFO + -D DEBUG_ENABLE_PERFMON + ;-D DEBUG_HIMEM_MEMORY_CHECK + ;-D USE_HIMEM_IF_AVAILABLE +lib_ldf_mode = deep+ + +; Power management enabled +;https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/power_management.html +;https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html#config-pm-enable +[env:esp32cam-power-management] +build_flags = + -D TCONFIG_PM_ENABLE + -D CONFIG_PM_DFS_INIT_AUTO + -D CONFIG_FREERTOS_USE_TICKLESS_IDLE + ;-D FREERTOS_IDLE_TIME_BEFORE_SLEEP=3 + +;********************** +; next section use modified version CMakeLists.txt of to use sdkconfig..defaults + sdkconfig.defaults +; https://github.com/platformio/platform-espressif32/issues/638 + + +; set board to rev3 +[env:esp32cam-board-rev3] +extends = env:esp32cam-dev, esp32cam-debug + +; set CPU frequency to 240 instead of 160 default +[env:esp32cam-cpu-freq-240] +extends = env:esp32cam-dev, esp32cam-debug +; sdkconfig.esp32cam-board-rev3.defaults override some sdkconfig.defaults + +; set board to rev3 + CPU frequency to 240 +; look at the extends : it takes esp32cam-dev and add env:esp32cam-board-rev3, env:esp32cam-cpu-freq-240 , esp32cam-debug parameters +[env:esp32cam-board-rev3-cpu-freq-240] +extends = env:esp32cam-dev, env:esp32cam-board-rev3, env:esp32cam-cpu-freq-240 , esp32cam-debug + +; set board to rev3 + CPU frequency to 240 + power management +[env:esp32cam-board-rev3-cpu-freq-240-pow] +extends = env:esp32cam-dev, env:esp32cam-board-rev3, env:esp32cam-cpu-freq-240 , env:esp32cam-power-management, esp32cam-debug + +; Enable use of 8 MB PSRAM boards +;https://github.com/espressif/esp-idf/blob/master/examples/system/himem/README.md +[env:esp32cam-dev-himem] +extends = env:esp32cam-dev, esp32cam-debug +; sdkconfig.esp32cam-dev-himem.defaults override some sdkconfig.defaults +build_flags = + -DBOARD_HAS_PSRAM + ;-D DEBUG_HIMEM_MEMORY_CHECK + ;-D USE_HIMEM_IF_AVAILABLE + +; set options for task analysis (PR #1751) +[env:esp32cam-dev-task-analysis] +extends = env:esp32cam-dev, esp32cam-debug +; sdkconfig.esp32cam-dev-task-analysis.defaults override some sdkconfig.defaults +build_flags = + ;-D DEBUG_DETAIL_ON ; if esp32cam-debug not in extends + -D TASK_ANALYSIS_ON + + +; Overwrite espcam build_flags to not include ENABLE_SOFTAP +; Nor the -U ENABLE_SOFTAP nor -D ENABLE_SOFTAP=0 works to unset defines actually +; Set CONFIG_ESP_WIFI_SOFTAP_SUPPORT=n in sdkconfig.esp32cam-no-softap.defaults to disable softap in the esp-idf compilation +[env:esp32cam-no-softap] ;CONFIG_ESP_WIFI_SOFTAP_SUPPORT=n saves 28k of flash +extends = env:esp32cam +build_flags = + ; ### common imported : + ${common:esp32-idf.build_flags} + ${flags:clangtidy.build_flags} + ; ### Sofware options : + -D ENABLE_MQTT + -D ENABLE_INFLUXDB + ;-D ENABLE_SOFTAP ; disabled diff --git a/code/sdkconfig.esp32cam-board-rev3.defaults b/code/sdkconfig.esp32cam-board-rev3.defaults new file mode 100644 index 00000000..dc70635c --- /dev/null +++ b/code/sdkconfig.esp32cam-board-rev3.defaults @@ -0,0 +1,7 @@ +CONFIG_ESP32_REV_MIN_0=n + +ESP32_REV_MIN_3=y +CONFIG_ESP32_REV_MIN_3=y + +#https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html#config-spiram-cache-workaround +CONFIG_ESP32_DPORT_WORKAROUND=n \ No newline at end of file diff --git a/code/sdkconfig.esp32cam-cpu-freq-240.defaults b/code/sdkconfig.esp32cam-cpu-freq-240.defaults new file mode 100644 index 00000000..6ea8e9c4 --- /dev/null +++ b/code/sdkconfig.esp32cam-cpu-freq-240.defaults @@ -0,0 +1,4 @@ +CONFIG_FREERTOS_UNICORE=n +CONFIG_FREERTOS_HZ=1000 +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 diff --git a/code/sdkconfig.esp32cam-debug.defaults b/code/sdkconfig.esp32cam-debug.defaults new file mode 100644 index 00000000..10fcbb1e --- /dev/null +++ b/code/sdkconfig.esp32cam-debug.defaults @@ -0,0 +1,33 @@ +#enable bootloader logging +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=n +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=n +CONFIG_FREERTOS_ASSERT_DISABLE=yn +CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=n +#CONFIG_LOG_DEFAULT_LEVEL_NONE=y +#CONFIG_LOG_DEFAULT_LEVEL=0 +CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y +CONFIG_LWIP_ESP_LWIP_ASSERT=n +CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED=n +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_LOG_COLORS is not set + +#set default loggin to +CONFIG_BOOTLOADER_LOG_LEVEL_ERROR=y +# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set +# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set +CONFIG_BOOTLOADER_LOG_LEVEL=2 + +#disable lookup function +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# CONFIG_ESP_ERR_TO_NAME_LOOKUP is not set + +#no panic message +ESP_SYSTEM_PANIC_SILENT_REBOOT=n + +#disable ADC calibration (needed for external sensors) +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=needed \ No newline at end of file diff --git a/code/sdkconfig.esp32cam-dev-himem.defaults b/code/sdkconfig.esp32cam-dev-himem.defaults new file mode 100644 index 00000000..36ec86c9 --- /dev/null +++ b/code/sdkconfig.esp32cam-dev-himem.defaults @@ -0,0 +1,34 @@ +#### https://github.com/espressif/esp-idf/blob/master/examples/system/himem/sdkconfig.defaults +CONFIG_SPIRAM=y +CONFIG_SPIRAM_SUPPORT=y +CONFIG_SPIRAM_BOOT_INIT=y +CONFIG_SPIRAM_IGNORE_NOTFOUND=n +CONFIG_SPIRAM_USE_MALLOC=y +CONFIG_SPIRAM_TYPE_AUTO=y +CONFIG_SPIRAM_SIZE=-1 +CONFIG_SPIRAM_SPEED_40M=y +CONFIG_SPIRAM_MEMTEST=y +CONFIG_SPIRAM_CACHE_WORKAROUND=y +CONFIG_SPIRAM_BANKSWITCH_ENABLE=y +CONFIG_SPIRAM_BANKSWITCH_RESERVE=4 + +CONFIG_SPIRAM_USE_CAPS_ALLOC=y + +/* some references for testing + +# https://github.com/platformio/platform-espressif32/issues/185 + +#define CONFIG_SPIRAM_SUPPORT 1 +#define CONFIG_PICO_PSRAM_CS_IO 10 +#define CONFIG_ESP32_SPIRAM_SUPPORT 1 +#define CONFIG_SPIRAM_BOOT_INIT 1 +#define CONFIG_SPIRAM_IGNORE_NOTFOUND 0 +#define CONFIG_SPIRAM_TYPE_AUTO 1 +#define CONFIG_SPIRAM_SIZE -1 +#define CONFIG_SPIRAM_USE_MEMMAP 1 +#define CONFIG_SPIRAM_SPEED_40M 1 +#define SPIRAM_USE_MALLOC 1 +#define CONFIG_SPIRAM_CACHE_WORKAROUND 1 +#define CONFIG_SPIRAM_BANKSWITCH_ENABLE 1 +#define CONFIG_SPIRAM_BANKSWITCH_RESERVE 8 +*/ \ No newline at end of file diff --git a/code/sdkconfig.esp32cam-dev-task-analysis.defaults b/code/sdkconfig.esp32cam-dev-task-analysis.defaults new file mode 100644 index 00000000..6fc0ed51 --- /dev/null +++ b/code/sdkconfig.esp32cam-dev-task-analysis.defaults @@ -0,0 +1,3 @@ +CONFIG_FREERTOS_USE_TRACE_FACILITY=1 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y \ No newline at end of file diff --git a/code/sdkconfig.esp32cam-dev.defaults b/code/sdkconfig.esp32cam-dev.defaults new file mode 100644 index 00000000..52477e48 --- /dev/null +++ b/code/sdkconfig.esp32cam-dev.defaults @@ -0,0 +1,36 @@ +### nothing actually + + +/* #disabled + +#### recommended optimizations to test +#https://docs.espressif.com/projects/esp-at/en/latest/esp32/Compile_and_Develop/How_to_optimize_throughput.html + +# System +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096 +CONFIG_FREERTOS_UNICORE=n +CONFIG_FREERTOS_HZ=1000 +#CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +#CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +#CONFIG_ESPTOOLPY_FLASHMODE_QIO=y +#CONFIG_ESPTOOLPY_FLASHFREQ_80M=y + +# LWIP +CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 +CONFIG_LWIP_TCP_WND_DEFAULT=65534 +CONFIG_LWIP_TCP_RECVMBOX_SIZE=12 +CONFIG_LWIP_UDP_RECVMBOX_SIZE=12 +CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64 + +# Wi-Fi +#CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=16 +#CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=64 +#CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=64 +#CONFIG_ESP32_WIFI_TX_BA_WIN=32 +#CONFIG_ESP32_WIFI_RX_BA_WIN=32 +#CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +#CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y + +## end of recommended optimizations + +*/