The firmware can be used on three different levels:

  • basis - basic functionality, which will support the most common use-cases
  • intermediate - customisation via templates: to support common special sensors, without the need to manually write firmware
  • expert - API to firmware library to make your own custom code for the nodes

Core functionality

  • support reading of 9 dof sensor via i2c
  • read 4 channels of ADC
  • read battery status
  • send sensed data to base station
  • (configurable) debounce for digital input pins
  • advanced PWM control to ramp up to a new value within a certain amount of time
  • switch between wireless mode and USB mode
  • serial API to send data to another node (via RX/TX or USB)
  • option to send own sensor data via RX/TX
  • option to transceive and forward data received via wireless connection from other nodes

Extensions / customisation options

  • read out other i2c sensors
  • read out specialised sensors (e.g. capacitive, ultrasound distance)
  • control certain types of actuators (Stepper motor, H-Bridge, …)
  • receiving custom messages and act on them
  • control NeoPixel RGB leds on any of the digital pins
  • more finegrained PWM control for different kind of patterns of PWM output

Customisation options for firmware

There is a template library for common other sensors (i.e. the ones that we have used and tested); for each option this template library includes:

  • external library needed for functionality (adjusted from online sources to fit in the framework)
  • header section: include the library, initialize the class instance, special functions needed
  • setup section: which will be inserted in the setup section of the firmware
  • loop section: which will be inserted in the loop section of the firmware
  • message section: which will be inserted in the message parsing section of the firmware
  • documentation for hooking up the sensor

There will be a guide on how to make your own templates.

And it is possible to extend the firmware with your own code, by writing the firmware. The advanced level.