; PlatformIO Project Configuration File for EMS-ESP ; ; override any settings with your own local ones in pio_local.ini (see example pio_local.ini_example) ; The firmware is renamed following this convention, and placed in the build/firmware folder: ; EMS-ESP32---[+ if PSRAM onboard].bin ; For example: EMS-ESP-3_7_0-dev_31-esp32-16MB+.bin [platformio] ; build all the CI targets as default. Use pio_local.ini to override. default_envs = ci_s_4M, ci_s_16M, ci_s_16M_P, ci_s3_16M_P extra_configs = factory_settings.ini pio_local.ini [common] core_build_flags = -std=gnu++2a -Isrc -Wno-type-limits -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable -Wno-format core_unbuild_flags = -std=gnu++11 my_build_flags = ; explanation on these custom settings: ; CONFIG_ASYNC_TCP_QUEUE - see https://github.com/emsesp/EMS-ESP32/issues/177 ; CONFIG_ASYNC_TCP_STACK_SIZE - stack usage measured: ESP32: ~2.3K, ESP32S3: ~3.5k ; CONFIG_ASYNC_TCP_TASK_PRIORITY - default is 10, was 5 for EMS-ESP build_flags = ${common.core_build_flags} ${factory_settings.build_flags} ${common.my_build_flags} -D ONEWIRE_CRC16=0 -D CONFIG_ETH_ENABLED -D CONFIG_UART_ISR_IN_IRAM -D CONFIG_ASYNC_TCP_STACK_SIZE=6144 -D CONFIG_ASYNC_TCP_QUEUE=32 -D CONFIG_ASYNC_TCP_TASK_PRIORITY=10 unbuild_flags = ${common.core_unbuild_flags} [espressi32_base] platform = espressif32@6.8.1 framework = arduino board_build.filesystem = littlefs build_flags = ${common.build_flags} build_unflags = ${common.unbuild_flags} extra_scripts = pre:scripts/build_interface.py scripts/rename_fw.py [espressi32_base_tasmota] ; use Tasmota's library for 4MB variants ; it removes some unused libs (like mbedtsl, so no WiFi_secure.h) and increases available heap ; Tasmota Arduino Core 2.0.17 with IPv6 support, based on IDF 4.4.7 ; platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.05.00/platform-espressif32.zip ; Tasmota Arduino Core 2.0.18 with IPv6 support, based on IDF 4.4.8 platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.06.00/platform-espressif32.zip ; Tasmota Arduino Core 3.0.1.240605 based on IDF v5.1.4.240602 ; platform = https://github.com/tasmota/platform-espressif32/releases/download/2024.06.10/platform-espressif32.zip framework = arduino board_build.filesystem = littlefs build_flags = ${common.build_flags} -DTASMOTA_SDK build_unflags = ${common.unbuild_flags} extra_scripts = pre:scripts/build_interface.py scripts/rename_fw.py [env] monitor_speed = 115200 monitor_filters = direct upload_speed = 921600 build_type = release check_tool = cppcheck, clangtidy check_severity = high, medium check_flags = cppcheck: --std=c++11 -v clangtidy: --checks=-*,clang-analyzer-*,performance-* lib_ldf_mode = chain+ lib_deps = https://github.com/emsesp/EMS-ESP-Modules.git ; ; build for GitHub Actions CI ; ; the Web interface is built seperately during the GH Action so is skipped (not included in extra_scripts) ; [env:ci_s_4M] ; 4MB ESP32 - using Tasmota - no SSL, no PSRAM - like the BBQKees older S32 models extends = espressi32_base_tasmota extra_scripts = scripts/rename_fw.py board = esp32dev board_build.partitions = esp32_partition_4M.csv build_flags = ${espressi32_base_tasmota.build_flags} [env:ci_s_16M] ; 16MB ESP32 - using Tasmota - no SSL, no PSRAM - like the BBQKees older S32 models extends = espressi32_base_tasmota extra_scripts = scripts/rename_fw.py board = esp32dev board_build.partitions = esp32_partition_16M.csv build_flags = ${espressi32_base_tasmota.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="S32"' [env:ci_s_16M_P] ; 16MB ESP32 - with PSRAM - like BBQKees E32V2 extends = espressi32_base extra_scripts = scripts/rename_fw.py board = esp32dev board_build.partitions = esp32_partition_16M.csv board_build.extra_flags = -DBOARD_HAS_PSRAM build_flags = ${espressi32_base.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="E32V2"' [env:ci_s3_16M_P] ; 16MB ESP32-S3 - with PSRAM - like BBQKees S3 extends = espressi32_base extra_scripts = scripts/rename_fw.py board = lolin_s3 board_build.f_cpu = 240000000L board_upload.flash_size = 16MB board_build.partitions = esp32_partition_16M.csv build_unflags = ${common.unbuild_flags} build_flags = ${espressi32_base.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"' ; ; Direct builds ; [env:s_4M] extends = espressi32_base_tasmota board = esp32dev board_upload.flash_size = 4MB board_build.partitions = esp32_partition_4M.csv build_flags = ${espressi32_base_tasmota.build_flags} [env:s_asym_4M] extends = espressi32_base_tasmota board = esp32dev board_upload.flash_size = 4MB board_build.partitions = esp32_asym_partition_4M.csv [env:s_16M_P] extends = espressi32_base board = esp32dev board_build.extra_flags = -DBOARD_HAS_PSRAM board_upload.flash_size = 16MB board_build.partitions = esp32_partition_16M.csv [env:c3_mini_4M] extends = espressi32_base_tasmota board = lolin_c3_mini board_upload.flash_size = 4MB board_build.partitions = esp32_partition_4M.csv build_flags = ${espressi32_base_tasmota.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="C3MINI"' ; lolin C3 mini v1 needs special wifi init. ; https://www.wemos.cc/en/latest/c3/c3_mini_1_0_0.html#about-wifi [env:c3_miniv1_4M] extends = espressi32_base_tasmota board = lolin_c3_mini board_upload.flash_size = 4MB board_build.partitions = esp32_partition_4M.csv build_flags = ${espressi32_base_tasmota.build_flags} -DBOARD_C3_MINI_V1 '-DEMSESP_DEFAULT_BOARD_PROFILE="C3MINI"' [env:s2_4M] extends = espressi32_base_tasmota board = lolin_s2_mini board_upload.flash_size = 4MB board_build.partitions = esp32_partition_4M.csv build_flags = ${espressi32_base_tasmota.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="S2MINI"' [env:s3_16M] extends = espressi32_base board = lolin_s3 board_build.f_cpu = 240000000L board_upload.flash_size = 16MB board_build.partitions = esp32_partition_16M.csv board_upload.use_1200bps_touch = false board_upload.wait_for_upload_port = false build_flags = ${espressi32_base.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"' [env:s3_32M] extends = espressi32_base board = lolin_s3 board_build.f_cpu = 240000000L board_upload.flash_size = 32MB board_build.partitions = esp32_partition_32M.csv board_build.flash_mode = opi board_build.arduino.memory_type: opi_opi build_unflags = ${common.unbuild_flags} build_flags = ${espressi32_base.build_flags} '-DEMSESP_DEFAULT_BOARD_PROFILE="S32S3"' # for testing against the latest Arduino core v3 with IDF 5.1 [env:espressi32_v3] platform = espressif32 platform_packages= platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#3.0.1 platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/esp32-arduino-libs.git#idf-release/v5.1 framework = arduino board = esp32dev board_build.filesystem = littlefs board_upload.flash_size = 16MB board_build.partitions = esp32_partition_16M.csv board_build.extra_flags = -DBOARD_HAS_PSRAM build_flags = ${common.build_flags} build_unflags = ${common.unbuild_flags} ; ; Building and testing natively, standalone without an ESP32. ; See https://docs.platformio.org/en/latest/platforms/native.html ; ; It will generate an executbale which when run will show the EMS-ESP Console where you can run tests using the `test` command. ; ; See https://docs.platformio.org/en/latest/core/installation/shell-commands.html#piocore-install-shell-commands ; ; to build and run directly on linux: pio run -e native -t exec ; ; to build and run on Windows, it needs winsock for the console input so: ; - For the first time, install Msys2 (https://www.msys2.org/) and the GCC compiler with `run pacman -S mingw-w64-ucrt-x86_64-gcc` ; - Then, build with `pio run -e native` to create the program.exe file ; - run by calling the executable from the Mysys shell e.g. `C:/msys64/msys2_shell.cmd -defterm -here -no-start -ucrt64 -c /d/dev/proddy/EMS-ESP32/.pio/build/native/program.exe` ; - or integrate into Windows Terminal https://www.msys2.org/docs/terminals/ ; [env:native] platform = native build_flags = -DARDUINOJSON_ENABLE_ARDUINO_STRING=1 -DEMSESP_STANDALONE -DEMSESP_TEST -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev.0\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" -std=gnu++14 -Og -ggdb build_type = debug build_src_flags = -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-missing-braces -I./lib_standalone -I./lib/uuid-common/src -I./lib/uuid-console/src -I./lib/uuid-log/src -I./lib/semver -I./lib/PButton -I./lib/ArduinoJson -I./lib/espMqttClient/src -I./lib/espMqttClient/src/Transport build_src_filter = +<*> +<../lib_standalone> +<../lib/uuid-common> +<../lib/uuid-console> +<../lib/uuid-log> +<../lib/semver> +<../lib/PButton> +<../lib/espMqttClient/src> +<../lib/espMqttClient/src/Transport> lib_compat_mode = off lib_ldf_mode = off lib_ignore = Module EMS-ESP-Modules ; unit tests ; pio run -e native-test -t exec ; works on Linux, Windows, and MacOS ; to auto generate the API exepected test results, compile with -DEMSESP_UNITY_CREATE and capture the output, and paste into the test_api.cpp file [env:native-test] platform = native test_build_src = true build_flags = -DARDUINOJSON_ENABLE_ARDUINO_STRING=1 -DEMSESP_STANDALONE -DEMSESP_TEST -DEMSESP_UNITY ; -DEMSESP_UNITY_CREATE -DEMSESP_DEFAULT_LOCALE=\"en\" -DEMSESP_DEFAULT_TX_MODE=8 -DEMSESP_DEFAULT_VERSION=\"3.7.0-dev.0\" -DEMSESP_DEFAULT_BOARD_PROFILE=\"S32\" -std=gnu++14 -Os -ggdb -Wall -Wextra -lgcov --coverage -fprofile-arcs -ftest-coverage build_type = debug build_src_flags = -Wno-unused-parameter -Wno-sign-compare -Wno-missing-braces -I./lib_standalone -I./lib/uuid-common/src -I./lib/uuid-console/src -I./lib/uuid-log/src -I./lib/semver -I./lib/PButton -I./lib/ArduinoJson -I./lib/espMqttClient/src -I./lib/espMqttClient/src/Transport -I./test/api -I./test build_src_filter = +<*> - +<../test> +<../lib_standalone> +<../lib/uuid-common> +<../lib/uuid-console> +<../lib/uuid-log> +<../lib/semver> +<../lib/PButton> +<../lib/espMqttClient/src> +<../lib/espMqttClient/src/Transport> lib_ldf_mode = off lib_deps = Unity lib_ignore = Module EMS-ESP-Modules test_testing_command = ${platformio.build_dir}/${this.__env__}/program