So for one of my first tests to play with my new Mesh devices, I used an Argon and a Xenon kit. I basically built the test hardware project for the Xenon – a light sensor connected to pin A0, used
Mesh.publish() to send its values to the mesh, then had the Argon relay those to the cloud with
But I didn’t want to have to manage two separate sets of code. So I used feature detection and conditional compilation to write a single program that deploys different code (node/gateway) depending on which device you are targeting.
The key logic is:
/** * If you are using a Xenon with the Ethernet FeatherWing, change this * value to '1' instead of '0' to use the device as a gateway instead * of a leaf node. */ #define HAVE_ETHERNET 0 /** * If you want to force an Argon or Boron to be a leaf instead of a * gateway, set this value to '1' instead of '0'. * * NOTE: FORCE_LEAFNODE will override HAVE_ETHERNET, so it doesn't make * sense to turn them both on. */ #define FORCE_LEAFNODE 0 /** * Define GATEWAY and LEAF, then conditinally compile our code, depending * on which device we are currently targeting. */ #define GATEWAY ( Wiring_Mesh && (Wiring_WiFi || Wiring_Cellular || HAVE_ETHERNET) && ! FORCE_LEAFNODE) #define LEAF ( Wiring_Mesh && ( FORCE_LEAFNODE || ! (Wiring_WiFi || Wiring_Cellular || HAVE_ETHERNET) ) )
Then you can just use
#if LEAF and
#if GATEWAY to target code to either type of device.