Skip to content

manbomb/esp-idf-ble-provisioning-rn

Repository files navigation

react-native-esp-idf-ble-provisioning-rn

A module to do wifi/custom data provisioning to ESP IDF.

Installation

npm install react-native-esp-idf-ble-provisioning-rn

Minimum SDK Version

This module requires a minimum sdk version of 23 or higher. Look this page if you need help to do this:


Permissions

The permissions needed for use this module are: ACCESS_FINE_LOCATION, BLUETOOTH, BLUETOOTH_ADMIN. Please check them before. Useful link:


Usage

Example of usage with comments.

import EspIdfBleProvisioningRn from "react-native-esp-idf-ble-provisioning-rn";

// This method initialize the provision manager, it
// Important: this should be the first method to be called, before all others
EspIdfBleProvisioningRn.create();

// This method returns an array of objects representing the BLE devices detected by the phone
EspIdfBleProvisioningRn.scanBleDevices("PREFIX_").then(res => {
    // res is the array of devices
}).catch(e => {
    console.error(e)
})

// This method allow you to connect with the device
// Call this method before the next methods
EspIdfBleProvisioningRn.connectToBLEDevice(uuid).then(res => {
    // res will be {"success":true}
}).catch(e => {
    console.error(e)
})

// This method allow you to set pop on device
EspIdfBleProvisioningRn.setProofOfPossession("popexample");

// To get the pop of device call this method
EspIdfBleProvisioningRn.getProofOfPossession().then((pop) => {
    // pop is a string
}).catch((e) => {
    console.error(e)
})

//This method return an array of detected networks with SSID, RSI, Security type and Password (often empty)
EspIdfBleProvisioningRn.scanNetworks().then(res => {
    // res is an array of detected networks
}).catch(e => {
    console.error(e)
})

// This method is used when is required to provision custom data to custom endpoints
EspIdfBleProvisioningRn.sendCustomData("custom-endpoint", "data").then(resp => {
    // res will be {"success":true}
}).catch(e => {
    console.error(e)
})

// This method is used when is required to provision custom data to custom endpoints
// with the special cavieat that React-Native's bridges to Native can destroy binary data
// encoded as UTF-8 strings. See Example for details. Convert string to JS's Uint8Array, then to an array 
// of strings where each string has the hexidecimal representation of its corresponding byte
// there is a walk through in ./example/App.js
EspIdfBleProvisioningRn.sendCustomDataWithByteData("custom-endpoint",["0", "FF", "52"]).then(resp => {
    // this is worth tweaking, but I have found that the data response
    // is wrapped in some other packaging I have to strip away from
    // the beginning and then JSON parsing works. The Native Backend manages
    // encryption at the session level. ESPRESSIF's libraries default to security_1 (as opposed to 0)
    const data = JSON.parse(resp.data.substring(8));
    ToastAndroid.show(
        'Custom data with byte accuracy provisioned successfully',
        ToastAndroid.LONG,
    );
    console.log(data); // data, likely in 
}).catch(e => {
    console.error(e)
})

// This method is used to provision new wifi credentials on the device
EspIdfBleProvisioningRn.provisionNetwork("SSIS", "PASS").then(resp => {
    // resp will be {"success":true}
}).catch(e => {
    console.error(e)
})

Example app

You can find an useful example in this link: Example app here

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published