I want to create a project that will use multiple micro controllers. One will handle some button inputs (let’s call it Slave), and send the info about pressed buttons to the other micro controller (call it Master.
It would be nice if I can set this up in one project, so I don’t need keep two windows of VSCode open.
So I want to have
src/
mainMaster.cpp
mainSlave.cpp
otherFiles.h
otherFiles.cpp
How do I need to configure my platformio.ini
such that mainMaster.cpp
will only be compiled and uploaded to the Master, and mainSlave.cpp
will only be compiled and uploaded to the Slave?
Current platformio.ini
:
[env:nanomaster]
platform = atmelavr
board = nanoatmega328new
framework = arduino
upload_protocol = arduino
upload_port = COM7
monitor_port = ${env:nanomaster.upload_port}
monitor_speed = 115200
[env:nanoslave]
platform = atmelavr
board = nanoatmega328new
framework = arduino
upload_protocol = arduino
upload_port = COM8
monitor_port = ${env:nanoslave.upload_port}
monitor_speed = 115200
2 Likes
See documentation for src_filter
.
2 Likes
So like this?
; default src_filter
[env]
src_filter = +<*> -<.git/> -<.svn/> -<example/> -<examples/> -<test/> -<tests/>
[env:nanomaster]
platform = atmelavr
board = nanoatmega328new
framework = arduino
upload_protocol = arduino
upload_port = COM7
monitor_port = ${env:nanomaster.upload_port}
monitor_speed = 115200
src_filter = ${env.src_filter} -<mainSlave.cpp> ; exclude the slave cpp file
[env:nanoslave]
platform = atmelavr
board = nanoatmega328new
framework = arduino
upload_protocol = arduino
upload_port = COM8
monitor_port = ${env:nanoslave.upload_port}
monitor_speed = 115200
src_filter = ${env.src_filter} -<mainMaster.cpp> ; exclude the main cpp file
Exactly, that’s how it works for me too. Recreating your dummy project with mainSlave.cpp
and mainMaster.cpp
you can see that for the specific environments, only one of the main files is compiled in.
$ pio run
Processing nanomaster (platform: atmelavr; board: nanoatmega328new; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/nanoatmega328new.html
PLATFORM: Atmel AVR 2.0.0 > Arduino Nano ATmega328 (New Bootloader)
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 30KB Flash
PACKAGES:
- framework-arduino-avr 5.0.0
- toolchain-atmelavr 1.50400.190710 (5.4.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 6 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/nanomaster/src/mainMaster.cpp.o
Archiving .pio/build/nanomaster/libFrameworkArduinoVariant.a
Compiling .pio/build/nanomaster/FrameworkArduino/CDC.cpp.o
Indexing .pio/build/nanomaster/libFrameworkArduinoVariant.a
Compiling .pio/build/nanomaster/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/HardwareSerial0.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/HardwareSerial1.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/HardwareSerial2.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/HardwareSerial3.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/PluggableUSB.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/Print.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/USBCore.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/WInterrupts.c.o
Compiling .pio/build/nanomaster/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/WString.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/abi.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/hooks.c.o
Compiling .pio/build/nanomaster/FrameworkArduino/main.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/new.cpp.o
Compiling .pio/build/nanomaster/FrameworkArduino/wiring.c.o
Compiling .pio/build/nanomaster/FrameworkArduino/wiring_analog.c.o
Compiling .pio/build/nanomaster/FrameworkArduino/wiring_digital.c.o
Compiling .pio/build/nanomaster/FrameworkArduino/wiring_pulse.S.o
Compiling .pio/build/nanomaster/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/nanomaster/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/nanomaster/libFrameworkArduino.a
Indexing .pio/build/nanomaster/libFrameworkArduino.a
Linking .pio/build/nanomaster/firmware.elf
Checking size .pio/build/nanomaster/firmware.elf
Building .pio/build/nanomaster/firmware.hex
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [ ] 0.4% (used 9 bytes from 2048 bytes)
Flash: [ ] 1.4% (used 444 bytes from 30720 bytes)
============================================================================================ [SUCCESS] Took 1.49 seconds ============================================================================================
Processing nanoslave (platform: atmelavr; board: nanoatmega328new; framework: arduino)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/nanoatmega328new.html
PLATFORM: Atmel AVR 2.0.0 > Arduino Nano ATmega328 (New Bootloader)
HARDWARE: ATMEGA328P 16MHz, 2KB RAM, 30KB Flash
PACKAGES:
- framework-arduino-avr 5.0.0
- toolchain-atmelavr 1.50400.190710 (5.4.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 6 compatible libraries
Scanning dependencies...
No dependencies
Building in release mode
Compiling .pio/build/nanoslave/src/mainSlave.cpp.o
Archiving .pio/build/nanoslave/libFrameworkArduinoVariant.a
Indexing .pio/build/nanoslave/libFrameworkArduinoVariant.a
Compiling .pio/build/nanoslave/FrameworkArduino/CDC.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/HardwareSerial.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/HardwareSerial0.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/HardwareSerial1.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/HardwareSerial2.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/HardwareSerial3.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/PluggableUSB.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/Print.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/USBCore.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/WInterrupts.c.o
Compiling .pio/build/nanoslave/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/WString.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/abi.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/hooks.c.o
Compiling .pio/build/nanoslave/FrameworkArduino/main.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/new.cpp.o
Compiling .pio/build/nanoslave/FrameworkArduino/wiring.c.o
Compiling .pio/build/nanoslave/FrameworkArduino/wiring_analog.c.o
Compiling .pio/build/nanoslave/FrameworkArduino/wiring_digital.c.o
Compiling .pio/build/nanoslave/FrameworkArduino/wiring_pulse.S.o
Compiling .pio/build/nanoslave/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/nanoslave/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/nanoslave/libFrameworkArduino.a
Indexing .pio/build/nanoslave/libFrameworkArduino.a
Linking .pio/build/nanoslave/firmware.elf
Building .pio/build/nanoslave/firmware.hex
Checking size .pio/build/nanoslave/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [ ] 0.4% (used 9 bytes from 2048 bytes)
Flash: [ ] 1.4% (used 444 bytes from 30720 bytes)
============================================================================================ [SUCCESS] Took 1.29 seconds ============================================================================================
Environment Status Duration
------------- -------- ------------
nanomaster SUCCESS 00:00:01.491
nanoslave SUCCESS 00:00:01.290
============================================================================================ 2 succeeded in 00:00:02.781 ============================================================================================