Browse Source

enhance development environment (#1841)

* add sdkconfig.defaults per environment 

https://github.com/platformio/platform-espressif32/issues/638

* add env to platformio

* add sdkconfig.<pioenv>.defaults

* Update platformio.ini

* Update .gitignore

* Delete sdkconfig.esp32cam-cpu-freq-240.defaults

* Delete sdkconfig.esp32cam-dev-himem.defaults

* Delete sdkconfig.esp32cam-dev.defaults

* Delete sdkconfig.esp32cam-no-softap.defaults

* Add files via upload

* Update sdkconfig.esp32cam-cpu-freq-240.defaults

* Update platformio.ini

* Update platformio.ini

* Update CMakeLists.txt

* Update sdkconfig.esp32cam-dev.defaults

* Update platformio.ini
Nicolas Liaudat 3 years ago
parent
commit
284f7b1180

+ 7 - 0
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

+ 11 - 2
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)

+ 132 - 52
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.<pioenv>.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

+ 7 - 0
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

+ 4 - 0
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

+ 33 - 0
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

+ 34 - 0
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
+*/

+ 3 - 0
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

+ 36 - 0
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
+
+*/