You can push the upload settings in its environment, then the build environment which uses it extends
it, and then you can generate build_flags
additionally. See docs regarding e.g. common_env_data
.
I tested this technique with a minimal platformio.ini
and an Uno
[upload_settings]
upload_port = COM14
upload_speed = 115200
monitor_speed = 9600
[env:uno]
platform = atmelavr
board = uno
framework = arduino
; automatically inherit attributes from upload_settings
extends = upload_settings
; make some settings visible as macros
; string-escape string values, integers are passed as normal
build_flags =
-D UPLOAD_PORT=\"${upload_settings.upload_port}\"
-D UPLOAD_SPEED=${upload_settings.upload_speed}
-D MONITOR_SPEED=${upload_settings.monitor_speed}
code
#include <Arduino.h>
void setup() {
Serial.begin(9600);
Serial.println("This firmware was uploaded from " + String(UPLOAD_PORT));
Serial.println("At " + String(UPLOAD_SPEED) + " baud.");
Serial.println("Monitor speed was " + String(MONITOR_SPEED) + " baud.");
}
void loop() {}
prints
This firmware was uploaded from COM14
At 115200 baud.
Monitor speed was 9600 baud.
For your concrete platformio.ini
you can e.g. try…
[upload_settings]
upload_port = COM15
upload_speed = 115200
monitor_speed = 9600
[env:wiscore_rak4631]
platform = nordicnrf52
board = wiscore_rak4631
framework = arduino
lib_deps =
ArduinoModbus
closedcube/ClosedCube OPT3001@^1.1.2
boschsensortec/BSEC Software Library @ ^1.6.1480
beegee-tokyo/SX126x-Arduino@^1.2.1
build_flags =
-L".pio/libdeps/wiscore_rak4631/BSEC Software Library/src/cortex-m4/fpv4-sp-d16-hard"
-DREGION_AU915
-D UPLOAD_PORT=\"${upload_settings.upload_port}\"
-D UPLOAD_SPEED=${upload_settings.upload_speed}
-D MONITOR_SPEED=${upload_settings.monitor_speed}
extends = upload_settings