Dynamic variables (interpolations) are useful when you have a custom configuration data between build environments. For examples, extra build_flags or project dependencies lib_deps.
Each variable should have a next format: ${<section>.<option>}
, where
<section>
is a value from [<section>]
group, and <option>
is a
first item from pair <option> = value
.
You can inject system environment variable using sysenv
as a section
.
For example, ${sysenv.HOME}
.
Variable can be applied only for the option’s value
Multiple variables are allowed
The Section [platformio] and Section [env]
sections are reserved and could not be used as a custom section. Some good
section names might be extra
or custom
.
Note
If you need to share common configuration options between build environments, please take a look at “Global scope” in Section [env] or extends option which allows extending of other sections.
Example:
[env]
; Unix
lib_extra_dirs = ${sysenv.HOME}/Documents/Arduino/libraries
; Windows
lib_extra_dirs = ${sysenv.HOMEDRIVE}${sysenv.HOMEPATH}\Documents\Arduino\libraries
; You MUST inject these options into [env:] section
; using ${extra.***} (see below)
[extra]
build_flags = -D VERSION=1.2.3 -D DEBUG=1
lib_deps_builtin =
SPI
Wire
lib_deps_external = ArduinoJson@>5.6.0
[env:uno]
platform = atmelavr
framework = arduino
board = uno
build_flags = ${extra.build_flags}
lib_deps =
${extra.lib_deps_builtin}
${extra.lib_deps_external}
[env:nodemcuv2]
platform = espressif8266
framework = arduino
board = nodemcuv2
build_flags = ${extra.build_flags} -Wall
lib_deps =
${extra.lib_deps_builtin}
${extra.lib_deps_external}
PubSubClient@2.6
OneWire
; Keep sensitive data in environment variables
;
; Unix
; export WIFI_SSID='\"my\ ssid\ name\"'
; export WIFI_PASS='\"my\ password\"'
;
; Windows
; set WIFI_SSID='"my ssid name"'
; set WIFI_PASS='"my password"'
[env:esp32dev]
extends = env:nodemcuv2
platform = espressif32
board = esp32dev
build_flags =
-DWIFI_SSID=${sysenv.WIFI_SSID}
-DWIFI_PASS=${sysenv.WIFI_PASS}
Warning
Be careful with special characters in system environment variables on Unix systems,
especially when they are used as the value for preprocessor directives.
Symbols like $
, &
, ~
, etc must be explicitly escaped, for example:
export WIFI_PASS='\"my\~p\&a\\\$\$\$\$word\"'