Awesome
react-native-nordic-dfu
This library allows you to do a Device Firmware Update (DFU) of your nrf51 or nrf52 chip from Nordic Semiconductor. It works for both iOS and Android.
For more info about the DFU process, see: Resources
This is a fork from the main library!
- Please keep in mind the our availability to maintain this fork is limited and is based on our project needs.
- If need the main documentation you can find it here.
- This fork contains the latest verisons of
iOSDFULibrary
&Android-BLE-Library
.
Installation
Install and link the NPM package per usual with
npm install --save https://github.com/Salt-PepperEngineering/react-native-nordic-dfu
or
yarn add https://github.com/Salt-PepperEngineering/react-native-nordic-dfu
For React Native below 60.0 version
react-native link react-native-nordic-dfu
Project Setup
Unfortunately, the ios project is written in Objective-C so you will need to use use_frameworks! :linkage => :static
.
Note: We are considering rewriting the ios module on Swift, but it depends very much on how much free time we have and how much we needed right now.
Podfile
:
- Flipper Disabled
target "YourApp" do
...
pod "react-native-nordic-dfu", path: "../node_modules/react-native-nordic-dfu"
...
use_frameworks! :linkage => :static
...
:flipper_configuration => FlipperConfiguration.disabled,
...
end
- Flipper enabled
static_frameworks = ['iOSDFULibrary']
pre_install do |installer|
installer.pod_targets.each do |pod|
if static_frameworks.include?(pod.name)
puts "Overriding the static_frameworks? method for #{pod.name}"
def pod.build_type;
Pod::BuildType.new(:linkage => :static, :packaging => :framework)
end
end
end
end
target "YourApp" do
...
pod "react-native-nordic-dfu", path: "../node_modules/react-native-nordic-dfu"
...
:flipper_configuration => FlipperConfiguration.enabled,
...
end
AppDelegate.mm
:
...
#import "RNNordicDfu.h"
...
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[RNNordicDfu setCentralManagerGetter:^() {
return [[CBCentralManager alloc] initWithDelegate:nil queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)];
}];
// Reset manager delegate since the Nordic DFU lib "steals" control over it
[RNNordicDfu setOnDFUComplete:^() {
NSLog(@"onDFUComplete");
}];
[RNNordicDfu setOnDFUError:^() {
NSLog(@"onDFUError");
}];
...
}
New Example
cd newExample
yarn setup
- Go to
newExample/App.tsx
- Update the
filePath
variable with the link to the firmware file - Update the
BleManagerService.init('', '');
function with the DFU Service & the device name - Press
Connect to Device in Area
button - When you see some small info about the device on the screen Press the
Start Update
- If you have any problems connecting to the Device pleas consult the react-native-ble-manager
Issues
- For configuration issues please also check this (https://github.com/Pilloxa/react-native-nordic-dfu/issues/171)
Resources
- DFU Introduction
- Secure DFU Introduction
- How to create init packet
- nRF51 Development Kit (DK) (compatible with Arduino Uno Revision 3)
- nRF52 Development Kit (DK) (compatible with Arduino Uno Revision 3)