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-nrfutil
tool, which is fine — it generates the correctzip
DFU 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
DFU
mode device names. - Supports DFU ZIP packages directly (the
.dat
,.hex
,.bin
bundled 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 genpkg
to 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
