Hi there,
And Congrats on getting that Salad mixed and working…It’s a big deal the DFU - OTA area everyone can use it if it worked easier.
One reason I like the MCUBoot Bootloader over Adafruity.
Some stuff to consider…and AI observations.
Key Observations on the User’s Approach
- He used Adafruit’s
adafruit-nrfutiltool, which is fine — it generates the correctzipDFU packages expected by the bootloader. - He had issues with BLE disconnection and name change to
ADA_DFU, which is a known quirk with the Adafruit bootloader. The app doesn’t reconnect automatically unless explicitly designed to do so. - He relied on Bluefruit Connect, which isn’t maintained as actively as Nordic’s tools and doesn’t handle edge cases well (like reconnecting to
ADA_DFU).
What He Did Right
- Replaced the outdated bootloader with an Adafruit UF2-compatible one (from AovestdiPaperino’s GitHub likely — he’s known in the community).
- Used BLE UART to trigger OTA DFU without buttons — ideal for sealed, headless systems.
- Created a real-world workaround for OTA reconnection glitches.
What Could Be Improved
1. Use nRF Connect for Mobile Instead
- It automatically handles reconnection to
DFUmode device names. - Supports DFU ZIP packages directly (the
.dat,.hex,.binbundled in a.zip). - Better error reporting and logging.
- Actively maintained by Nordic.
2. Use a Proper Bootloader with Buttonless DFU Support
- Either Adafruit’s latest bootloader with buttonless DFU enabled
- Or MCUboot + Zephyr/NCS (more complex, but truly robust)
- This solves the “needs manual reset” problem entirely when correctly configured.
3. Simplify With Arduino IDE Tools
- If the device is always sealed and headless, you can pre-bundle the DFU trigger via:
#include <bluefruit.h>
Bluefruit.begin();
Bluefruit.setTxPower(4);
Bluefruit.setName("SensorNode");
bledfu.begin(); // Needed if using Adafruit bootloader
If doing sealed SensorNodes like my project:
Stick with Adafruit’s bootloader for UF2 + OTA (just flash it once using SWD).
Use nrfutil dfu genpkgto generate OTA ZIP from Arduino.hex.
Trigger DFU in code (enterOTADfu()orNVIC_SystemReset()after setting flags).
Use nRF Connect for Mobile for smoother updates — especially with multiple SensorNodes.
IMO, Bluefruit Connect can work, but it’s clunky.
nRF Connect for Mobile is more robust, supports reconnections, and should be the go-to for DFU via BLE.
I’m currently working on a Multi-Node connected SensorNode setup
The DFU is the holy grail for this sort of thing.
HTH
GL
PJ ![]()
6 SensorNode’s each with TEMP, HUMID, BATTERY, Motion or Digital BLE characteristics. all readable and two Notifies each. All 6 connected to a Xiao ESP32S3

