Software Download

History of the different RadioShuttle software versions. Required for downloading the software:

  • LongRa: 8-digit code, which is located on the back of the LongRa board
  • ECO Power: device ID printed on the board
  • Eagle: device ID labelled in the box

Available RadioShuttle versions

Version 4.3.2 (28 March 2022)

A linker missing symbol “restartTickerTimer” has been fixed

Version 4.3.1 (16 January 2022)

An I2C problem with the Si7021 sensor and the Arduino ESP32 SDK 2.0.2 was fixed..

Version 4.3 (27 December 2021)

Support for the lastest Arduino ESP32 SDK
The RadioShuttle protocol source code with all its libraries is available for reviewing. Check out

  • Arduino ESP32 SDK 2.0.2 support. The new ESP IDF SDK comes with many capable features, therefore we adopted more SDK APIs
    • “WatchDog” is now implemented in the IDF SDK APIs, it frees up the extra 64-bit timer used
    • dprintf() timestamps are now based on the SDK gettimeofday(), no extra 64-timer used
    • sleep() is now implemented via the “cpu_ll_waiti” API (also works on the RISC-V ESP32-C3)
    • Internal support for the ESP32-S2 version (for later use or dev kits)
    • Internal support for the new RISC-V ESP32-C3 (for later use or dev kits)
    • Migrated our timer implementation to use IDF SDK timer APIs, therefore the 64-bit native Timers are not occupied anymore
  • NVProperty library
    • Initial support for the ESP32-S2 eFuse memory
    • Preliminary C3 support, must be completed later on
  • New WS2812 LED library
    • Our LED library is compatible with the ESP32, ESP32-S2, ESP32-C3
    • Supports RGB and RGBW LEDs
    • LED stripe refreshing works in the background, no CPU ultilization

Existing programs must update to the latest “LoRa.cpp”, “LoRa.h”, “xPinMap.h” and “RTCUtil.cpp” files, otherwise they will not work. For the ESP32 ECO Power and Eagle boards, the “platforms.txt” file must be modified to include the -mlogncalls option. Edit “platforms.txt”, which can be found in “Library/Arduino15/packages/esp32/hardware/esp32/2.0.2/”, and add the -mlongcalls option in the “compiler.S.flags.esp32” section
(compiler.s.flags.esp32=-mlongcalls …).

Version 4.2-u1 (3 April 2021)

  • Fixes the battery voltage measurement using the ESP32 SDK 1.0.6

Existing programs must update to the latest “LoRa.cpp”, “LoRa.h”, “xPinMap.h” and “RTCUtil.cpp” files, otherwise they will not work.

Version 4.2 (30 March 2021)

Minor software enhancements, updated examples and bug fixes.
The RadioShuttle protocol source code with all its libraries is now available for reviewing. Check out

  • “Property Editor” now includes sensor properties
  • The Arduino “SimpleNodeExample” and “Mbed OS RemoteTempSensor” have been updated to use the „SENSOR_INTERVAL“ property settings
  • Arduino ESP32 fixed a problem with NTP Clock updates in all RadioShuttle examples supporting WiFi. It could happen that timers were not working for the duration of an NTP backward time change
  • Enhanced the “ESP32MQTTAlarmSystem” and “ESP32Doorbell” examples
  • Tested with Arduino ESP32 SDK 1.0.3, 1.0.4 and 1.0.6
  • Mbed OS: fixed a timer overflow problem which occurred when using the Online IDE or Mbed Studio ARM C/C++ compiler. As a result, the node froze after 12 minutes. Using GCC, everything works fine

Existing programs must update to the latest “LoRa.cpp”, “LoRa.h”, “xPinMap.h” and “RTCUtil.cpp” files, otherwise they will not work.

Version 4.1 (4 September 2020)

Major software enhancements, updated examples and bug fixes. The MQTT Gateway is now final and works with the ECO Power board as well as with the new Eagle board.
The RadioShuttle protocol source code is now included for reviewing. Check out

  • MQTT Gateway is completed with bidirectional LoRa <-> MQTT routing
  • “Property Editor” is now included in all examples and can be activated
    by shortly pressing the “Reset” button and then holding the “User” button for approx. 5 seconds
  • “PMSensorRadio” air quality sensor example upgraded to work with LongRa, ECO Power and the Eagle boards
  • RadioShuttle protocol update to support direct messages without a protocol request overhead. This is good for time-critical applications or broadcasts where the
    protocol response from many clients does not work in parallel.
    Direct messages are supported via the “MF_Direct” flag of SendMsg()
  • Eagle board deepsleep status flashing support
  • The RadioShuttle supplied libraries include a GitHub reference in
    “”. No GIT Repro copies included anymore
  • StopWatchDog() support to stop the watchdog in case it should not be used
  • Increased the number of parallel timeout timers to 12
    (used to be 10, can be changed in “Arduino-mbed.h” if required)
  • The timer microseconds callback registration via attach_us() now uses
    a 64-bit parameter to allow timeouts longer than 35 minutes.
    The same applies to attach() (for milliseconds) or attach_sec()
  • The “CPUBench” benchmark testing program has been modernized to use a C++ template. Testing has been extended to include: Integer, Float, Int64 and Double performance
  • ESP32 SDK APIs have been updated to replace deprecated APIs
  • Added the idleCbs.RegisterIdeCallback() function to register callbacks
    on interrupt level, e.g. within timers. These callbacks will be called
    in the loop within sleep/deepsleep. See userButtonTimerFunc() in “RTCUtil.cpp”
  • Added a preliminary “Remote Relay” example support for Arduino ESP32 & D21.
    This is also included in the Mbed OS Turtle software

Existing programs must update to the latest “LoRa.cpp”, “LoRa.h”, “xPinMap.h” and “RTCUtil.cpp” files, otherwise they will not work. The “PinMap.h” file has been renamed to “xPinMap.h” for compatibility reasons with a conflicting name in Mbed OS.

Version 4.0 (8 July 2020)

Support for the Eagle board, updated examples and bug fixes. Arduino and Mbed OS are on the same feature level. The RadioShuttle protocol source code is now included for reviewing. Check out

  • Support for the ESP32 Eagle board (board with WiFi, LoRa, display)
  • Support for the Arduino D21 version 1.8.3
  • Added HELIOS_Si7021 driver (identical for Arduino & Mbed OS)
  • OLED_SSD1306 driver, previously OLED (identical for Arduino & Mbed OS)
  • Added NVProperty source code (identical for Arduino & Mbed OS)
  • Updated RadioShuttle library (identical for Arduino & Mbed OS)

Existing programs must update to the latest “LoRa.cpp”, “LoRa.h”, “xPinMap.h” and “RTCUtil.cpp” files, otherwise they will not work. The “PinMap.h” file has been renamed to “xPinMap.h” for compatibility reasons with a conflicting name in Mbed OS.

Version 3.8 (2 October 2019)

This new release contains major enhancements, new examples and bug fixes. Most software feedback came from discussions with users and from the recent RadioShuttle customer survey.

  • The Node Offline mode now works correctly with AES messages
  • “AddRadio” allows specifying a custom message retry delay parameter (instead of the default). In the previous versions there was an additional 4000 ms delay before retries, this long delay for debugging has been removed
  • Added the “RadioShuttleSimpleNode” example which sends sensor data to a remote station. This includes temperature, humidity and battery status. The data is automatically sent every 30 minutes or when the user button is pressed. This example is battery optimized with deepsleep support and offers an easy-to-use template for node applications
  • Added the “RadioShuttlePanicButton” example, which is very similar to “RadioShuttleSimpleNode”, but with an additional basic buzzer sound support to confirm the help searching person that the panic alarm is on its way. The “Panic Button” node can be used with the “ESP32RadioShuttleMQTT” gateway which will forward the data to an MQTT server
  • Added the new “ESP32Doorbell” solution example. This example supports a doorbell key and door opener relay. Pressing a doorbell key places phone calls via the connected FRITZ!Box using the TR-064 protocol. In addition, it sends an MQTT message to the “MQTT Push” app informing that the doorbell was rang. The door can be opened via the “MQTT Push” app. This example supports SSD1306 displays showing temperature data and the network connection status. It also supports LoRa nodes as a RadioShuttle station
  • Enhanced the RadioShuttle Idle() function, to allow keeping it busy during transmits via the “forceBusyDuringTransmits” option. This is helpful to ensure that the messages are delivered before turning power off. This only affects custom hardware
  • ESP32: Added support for the ESP32 to specify the wake-up pin via deepsleep() parameters. The default wake-up is the user button (SW0 pin)
  • ESP32: Added deepsleep() parameter to allow specifying the LED pin for periodic flashing during deepsleep
  • ESP32: Fixed GPIO wake-up in deepsleep, in the previous versions GPIO wakeup from deepsleep did not work reliably. See “ESP32WakeupGPIOStatus” variable in “RTCUtil.cpp” and in the “RadioShuttleSimpleNode” example
  • The LongRa Revision 7.5 board is now the default in the “PinMap.h” file, users with previous LongRa boards must change the “PinMap.h” file to the 7.2 board version
  • Added the “RadioShuttleRadioTest2” example. This example should be easier for new users; the whole LoRa specific setup code moved to “LoRa.cpp”. “RadioShuttleRadioTest2” can be used as a server (e.g. Station Basic) or as a node (e.g. Node Offline).
    “RadioShuttleRadioTest2” will also receive messages from “RadioShuttleSimpleNode”. The message input handler (“TempSensorRecvHandler”) can be copied from “LoRa.cpp” into the main “RadioShuttleRadioTest2.ino” to allow for an own input handler which can be customized. The idea behind “LoRa.cpp”, “LoRa.h”, “RTCUtil.cpp” and “PinMap.h” is that these files should not be touched, to allow using always the latest versions of these files. For newer RadioShuttle versions, custom projects using these files must be upgraded to the latest RadioShuttle “LoRa.cpp”, “LoRa.h”, “RTCUtil.cpp” and “PinMap.h” file versions

Existing programs must update to the latest “LoRa.cpp”, “LoRa.h”, “PinMap.h” and “RTCUtil.cpp” files, otherwise they will not work.

Version 3.7 (19 July 2019)

  • ECO Power WatchDog Reset Support
    The new WatchDog function restarts the ESP32 automatically if the ESP32 program is stuck and cannot call the sleep() function on a regular basis. The automatic WatchDog function increases the availability considerably.
    In “RTCInit.cpp” WatchDog is automatically activated (by default 120 seconds) and can be adapted to your needs
  • Sticking deepsleep() in LongRa D21 fixed
    There were situations where deepsleep() was stuck from time to time and WatchDog restarted the D21 MCU. Meanwhile we have come to the conclusion that this has to do with two AtmelD21 hardware bugs. The software now has integrated workarounds to solve the problems
  • “RadioTest.ino” with support for even more properties
    In addition, these properties are automatically used, if available: LORA_FREQUENCY, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, LORA_TXPOWER, LORA_FREQUENCY_OFFSET, LORA_APP_PWD

Existing programs must update to the latest “PinMap.h” and “RTCUtil.cpp” files, otherwise they will not work.

Version 3.5 (10 May 2019)

  • ECO Power RTC time is now UTC time based
  • Automatic timezone and daylight saving time support
  • NTP time update support for the ESP32, see “NTPUpdate.h”, “NTPUpdate.cpp”
  • NTP update of the DS3231 RTC, if available
  • NTP time update added in “ESP32MQTTClient” and “ESP32MQTTAlarmSystem” examples
  • Updated OLED SSD1306 display support (bug fixes)
  • Updated Adafruit_Si7021 sensor driver to work with newer ESP32 SDKs
  • RadioShuttle supports the Heltec ESP32 LoRa boards (license required, 25 € ). This includes the Heltec ESP32 LoRa Kit v1, v2 and ESP32 LoRa stick versions
  • RadioShuttle support for the upcoming Turtle board (Mbed OS)
  • Minor bug fixes and enhancements

Version 3.3 (8 March 2019)

  • Fixed problem when sending messages from server to node (wrong or too low transmission power)
  • Fixed problem at reduced transmission power (transmission with 14 dBm, although a lower value was specified)
  • Fixed compiler error in “BlinkyEnhanced_C_Plus_Plus” example
  • Enhanced “NVProperty” (non-volatile memory)
  • Added new example “RadioContinuesTX”, which permanently transmits an FM signal to tune antennas

Version 3.1 (1 November 2018)

  • D21 permanent memory support (Properties). At the end of the D21 flash memory, 16 kB (changeable) are reserved for settings. Therefore the sketch must not be larger than 232 kB; 8 k bootloader and 16 k property memory are occupied
  • New Arduino D21 “bossac” USB flash utility, which deletes the D21 flash memory only in the required program area. Details can be found in the LongRa board documentation
  • Improved “PropertyEditor” sample application (in “Examples->Arduino-mbed-APIs”)
  • Update of all examples, settings are now automatically loaded via the “GetProperties” function
  • AES passwords now also work with property settings

Version 3.0 (1 October 2018)

  • Added support for latest ESP32 Arduino SDK (also works with older ESP32 SDKs)
  • Added new RTC ds3231 I2C support
  • Added new Si7021 Sensor I2C support
  • Enhanced “PropertyEditor”, which now allows setting the radio type e.g. RS_Node_Offline
  • New for D21: Added non-volatile flash properties for the LongRa board
    • By default, the last 16 kB of the D21 is used for properties
    • See “NVProperty.h” for “propSizekB” details
    • Make sure that “–lock=15” is included in the “platforms.txt” file (see RadioShuttle Sketch Installation for LongRa)
    • LongRa board users must once add the node and code via “PropertyEditor” (LORA_DEVICE_ID, LORA_CODE_ID)
  • New simplified RadioTest example uses all parameters via properties
    • Ensure that at minimum the following properties are set:
      • LORA_DEVICE_ID (already pre-set for the ECO Power boards)
      • LORA_CODE_ID (already pre-set for the ECO Power boards)
      • LORA_RADIO_TYPE (1 for RS_Node_Offline, 3 for RS_Node_Online, 4 for RS_Station_Basic)
  • Support for the new LongRa 7.5 boards (offers more free pins, and a pre-configured function for battery measurement). See new “PinMap.h” file to enable the new D21_LONGRA_REV_750 board

Using property settings for the RadioShuttle applications brings major benefits. Properties allow defining settings per board once and uploading identical sketches on all boards because the custom settings will automatically be used from from the non-volatile memory. With this release the properties are fully supported by the ESP32 ECO Power and the D21 LongRa boards.

Version 2.6 (1 July 2018)

  • Universal version, for ESP32 ECO Power and D21 LongRa boards
  • New examples, from timer test program driven “Blinky” to RadioShuttle MQTT gateway (currently 17 examples)
  • Bug fixes (reproducible problems were solved)
  • New “InitLoRaChipWithShutdown” function deactivates the LoRa chip, to enable the usage of programs on LongRa or ECO Power boards in power-saving operation
  • Preparation for battery measurement on LongRa boards (a Tech Info describing the modification of two resistors comes separately)
  • Updated LongRa board (version 7.4) support
  • “SendMsg()” has received additional flags:
    • “CF_CopyData” copies data into the internal network buffer rather than referencing them
    • “CF_FreeData” flags the transmission data to be released after transmission (via C++ “delete[ ]”)
  • Important note: In “InitSerial()”, “” must be replaced with “!” in each existing program
  • Software support for debouncing buttons. The “InterruptIn” class can be activated for automatic debouncing via “debounce()”. If no parameters are specified, the default is 300 ms
  • Many detail improvements of ESP32 support
  • Fixed potential crashes in the ESP32 RadioShuttle debug output. Nothing may be output in interrupt routines of the ESP32
  • New “pause(millis)” function activates the ESP32 “lightsleep” mode and goes to sleep. Nothing happens during the break, then it simply continues
  • Timer class now also allows “read_ns()”, to get the elapsed time in nanoseconds

Version 2.0 (11 Mai 2018)

  • ESP32 ECO Power support

Version 1.8 (24 Jan 2018)

  • New hardware reset via “WatchDog” if sleep() or deepsleep() is not called within 30 seconds. See InitWatchDog() in the RadioTest example (file: “RTCUtil.cpp”)
  • New output function rprintf(), similar to dprintf(), but without timestamp in the output

Version 1.6 (18 Dec 2017)

  • Introduced simple version number, 1.6 (1.4, 1.5 was for internal use only)
  • Added support for presetting RTC clock based on the Arduino compile time
  • Added support for setting the “dprintf” start time to the RTC time
  • Implemented a workaround that the Arduino map function need not be changed in the “WMath.h/WMath.cpp” sources anymore
  • Enhanced documentation for “InitSerial()”, the LED parameter can be NULL
  • RTC clock will always be set when the compile time is newer than the RTC time

Version 1.3 (14 Nov 2017)

  • Added support to unload the SX1276 driver and RadioShuttle protocol
  • Enhanced key debouncing support
  • Added support to force “SerialUSB” when button “A” is pressed on power-on or reset
  • Fixed timer problems which resulted into non-working switches
    and other hanging problems
  • Fixed negative timestamps in “dprintf” printing
  • Added proper MCU pin names into “PinMap.h” for the LongRa board
  • Deactivated display power by default for the LongRa board
  • Added support for the Adafruit Feather M0 LoRa 868 MHz board. This board will be supported in the future. (25 € license fee per board)
  • Added support to use DIO0 pins for CAD (Channel Activity Detection) detection which means only DIO0 is required for the RadioShuttle LoRa operation when only LoRa is used. DIO1, DIO2, DIO3, DIO4 pins are not required in the future

Version 1.2 (28 Sep 2017)

  • RadioTest: Added support for user buttons to wake up immediately from deepsleep
  • RadioTest: Added easy switch to use RadioShuttle::Node_Offline with deepsleep
  • Fixed calculation of the frequency offset with negative numbers
  • Added support for adjusting the frequency offset to allow matching all devices against a TCXO clock or other master clock
  • Changed “SerialMonitor” detection timeout from 3 to 5 seconds (timeout of 0 in “InitSerial” means USB is always on)
  • New RTC clock initializaition and time display during startup
  • “UpdateRadioProfile” can be updated anytime, allows changing radio frequency, spreading factor, etc. during operation via the new “UpdateRadioProfile” function
  • Added an “StrError” function which turns RadioShuttle error codes into strings
  • Added cleartext error reporting for the RadioTest examples
  • RadioStatus: TXStart callback includes the used TX power in dBm
  • RadioTest: Displays the frequency and spreading factor on startup
  • RadioTest: Added debounce support for tactile switches
  • Added “DeInitRadio” function to unload RadioShuttle protocol and drivers and release its memory resources
  • RadioTest: Moved RadioShuttle init code from setup into “InitRadio“ function
  • Added “UpdateNodeStartup” function which allows switching from RadioShuttle::Node_Online to RadioShuttle::Node_Offline or reverse. This enables energy savings for RadioShuttle::Node_Online nodes

Version 1.0 Maker Faire Hannover (24 Aug 2017)

  • Supports LongRa Arduino boards (Rev. 6.0-7.2)
  • Power saving mode (sleep) even with USB and “Serial Monitor” active
  • Extended power saving mode (deepsleep) without USB, requires operation as node: RadioShuttle::RS_Node_Offline
  • Fine particles sensor app included (Nova PM Sensor SDS011)
    Example: “PMSensorRadio”
  • RadioTest app (“Message Ping”) is included. RadioShuttle example application allows exchange of simple messages
    Example: “RadioTest”