Coder Social home page Coder Social logo

lex-yang / react-native-ble-peripheral Goto Github PK

View Code? Open in Web Editor NEW

This project forked from himelbrand/react-native-ble-peripheral

0.0 0.0 0.0 133 KB

a simulator for a BLE peripheral, to help with testing BLE apps without an actual peripheral BLE device

JavaScript 4.16% Java 43.09% Objective-C 6.40% Swift 42.67% Ruby 3.69%

react-native-ble-peripheral's Introduction

React Native BLE Peripheral

Native BLE Peripheral in React Native

Welcome

This is a simulator for a BLE peripheral, to help with testing BLE apps without an actual peripheral BLE device this project is not yet complete, for all ready parts see documentation below. (docs are not complete, feel free to improve them)

Realease notes

  • fixed issues fixed on github repo in npm package - starting from version 1.2.0
  • IOS support was added in version 2.0.0
  • merged PR to fix write charicaristics - version 2.0.1

Still missing

if you would like to contribute to this project or suggest more future features you're welcome to so via an issue or pull request.

IOS support

right now this package does not support IOS, so any one that wants to help and contribute the IOS support is more than welcome

Installation

npm install react-native-ble-peripheral --save
or 
yarn add react-native-ble-peripheral

npm page - https://www.npmjs.com/package/react-native-ble-peripheral

Add permissions

  • In AndroidManifest.xml add:
 <uses-permission android:name="android.permission.BLUETOOTH"/>
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Project setup and initialization auto

react-native link

Project setup and initialization manually

  • In android/settings.gradle
...
include ':react-native-ble-peripheral'
project(':react-native-ble-peripheral').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-ble-peripheral/android')
  • In android/app/build.gradle
...
dependencies {
    /* YOUR DEPENDENCIES HERE */
   compile project(':react-native-ble-peripheral') // <--- add this
}
  • Register Module (in MainApplication.java)
import com.himelbrand.forwardcalls.RNForwardCallsPackage;  // <--- import

public class MainActivity extends ReactActivity {
  ......

  @Override
  protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          new RNBLEPackage() // <--- Add this
      );
  }

  ......

}

Usage

Import

import BLEPeripheral from 'react-native-ble-peripheral'

Add Service

BLEPeripheral.addService(UUID:string, primary:boolean)

BLEPeripheral.addService('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', true) //for primary service
BLEPeripheral.addService('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', false) //for non primary service

Add Characteristic

BLEPeripheral.addCharacteristicToService(ServiceUUID:string, UUID:string, permissions:number, properties:number)

https://developer.android.com/reference/android/bluetooth/BluetoothGattCharacteristic.html the link above is for permissions and properties constants info

Permissions:

  • 1 - Readable
  • 2 - Readable Encrypted
  • 4 - Readable Encrypted MITM (Man-in-the-middle) Protection
  • 16 - Writable
  • 32 - Writable Encrypted
  • 64 - Writable Encrypted MITM Protection
  • 128 - Writable Signed
  • 256 - Writable Signed MITM

Properties:

  • 1 - Broadcastable
  • 2 - Readable
  • 4 - Writable without response
  • 8 - Writable
  • 16 - Supports notification
  • 32 - Supports indication
  • 64 - Signed Write
  • 128 - Extended properties
BLEPeripheral.addCharacteristicToService('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 16 | 1, 8) //this is a Characteristic with read and write permissions and notify property

Notify to devices

BLEPeripheral.sendNotificationToDevices(ServiceUUID:string, CharacteristicUUID:string, data:byte[])

  • note #1: in js it's not really a byte array, but an array of numbers
  • note #2: the CharacteristicUUID must be of a Characteristic with notify property
BLEPeripheral.sendNotificationToDevices('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', [0x10,0x01,0xA1,0x80]) //sends a notification to all connected devices that, using the char uuid given

start Advertising

note:use this only after adding services and characteristics

 BLEPeripheral.start()
  .then(res => {
       console.log(res)
  }).catch(error => {
       console.log(error)
  })

In case of error, these are the error codes:

  • 1 - Failed to start advertising as the advertise data to be broadcasted is larger than 31 bytes.
  • 2 - Failed to start advertising because no advertising instance is available.
  • 3 - Failed to start advertising as the advertising is already started.
  • 4 - Operation failed due to an internal error.
  • 5 - This feature is not supported on this platform.

stop Advertising

 BLEPeripheral.stop()

Set name (optional)

BLEPeripheral.setName(name:string)

This method sets the name of the device broadcast, before calling start.

BLEPeripheral.setName('RNBLETEST')

DOCs and project is under development Any help would be welcome... feel free to contact me

react-native-ble-peripheral's People

Contributors

eskelcz avatar hezhii avatar himelbrand avatar lex-yang avatar naturalclar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.