ble_peripheral 0.0.1 copy "ble_peripheral: ^0.0.1" to clipboard
ble_peripheral: ^0.0.1 copied to clipboard

Ble peripheral is a Flutter plugin that allows you to use your device as Bluetooth Low Energy (BLE) peripheral

Ble Peripheral #

Ble peripheral is a Flutter plugin that allows you to use your device as Bluetooth Low Energy (BLE) peripheral

This is an OS-independent plugin for creating a BLE Generic Attribute Profile (GATT) server to broadcast user-defined services and characteristics. This is particularly useful when prototyping and testing servers on different devices with the goal of ensuring that expected behavior matches across all systems.

Setup #

Android #

Add the following permissions to your AndroidManifest.xml file:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

IOS/Macos #

Add permission in info.plist

<key>NSBluetoothAlwaysUsageDescription</key>
<string>For advertise as ble peripheral</string>

For MacOS, make sure to enable bluetooth from xcode

Windows #

Requires Nuget for Winrt api's

Usage #

Make sure to initialize first

final BlePeripheral blePeripheral = BlePeripheral();
await blePeripheral.initialize();

Add services

UUID serviceBattery = UUID(value: "0000180F-0000-1000-8000-00805F9B34FB");
UUID characteristicBatteryLevel = UUID(value: "00002A19-0000-1000-8000-00805F9B34FB");

BleService batteryService = BleService(
      uuid: serviceBattery,
      primary: true,
      characteristics: [
        BleCharacteristic(
          uuid: characteristicBatteryLevel,
          properties: [
            CharacteristicProperties.read.index,
            CharacteristicProperties.notify.index
          ],
          value: null,
          descriptors: [],
          permissions: [
            AttributePermissions.readable.index
          ],
        ),
      ],
    );

List<BleService> services = [batteryService];
await blePeripheral.addServices(services);

Start advertising

blePeripheral.startAdvertising(services,"TestDevice");

Stop advertising

blePeripheral.stopAdvertising();

Ble communication #

Create a class which extends BleCallback

class PeripheralCallbackHandler extends BleCallback {
  @override
  void onAdvertisingStarted(String? error) {
    print("advertisingStarted: $error");
  }

  @override
  void onBleStateChange(bool state) {
    print("BleState: $state");
  };

  @override
  void onServiceAdded(BleService service, String? error) {
    print("Service added: ${service.uuid.value}");
  }

  @override
  void onWriteRequest(BleCharacteristic characteristic, int offset, Uint8List? value) {
    print("characteristic WriteRequires: ${characteristic.uuid.value}");
  }

  @override
  ReadRequestResult? onReadRequest(BleCharacteristic characteristic, int offset, Uint8List? value) {
    print("characteristic ReadRequest: ${characteristic.uuid.value}");
    // Reply a response to readRequest, return null to respond as failure
    return ReadRequestResult(
      value: Uint8List.fromList([]),
      offset: 0,
    );
  }

 
  @override
  void onCharacteristicSubscriptionChange(BleCentral central, BleCharacteristic characteristic, bool isSubscribed) {
    print("characteristic SubscriptionChange: ${characteristic.uuid.value}");
  }
  

  /// IOS/MacOS only  
  @override
  void onSubscribe(BleCentral bleCentral, BleCharacteristic characteristic){
     /// called on apple, when central subscribe to characteristic
  }
      
  /// IOS/MacOS only 
  @override
  void onUnsubscribe(BleCentral bleCentral, BleCharacteristic characteristic) {
    /// called on apple, when central unSubscribe from characteristic
  }


  /// Android only 
  @override
  void onConnectionStateChange(BleCentral central, bool connected) {
    /// called on android when central successfully connected
  }

  /// Android only 
  @override
  void onBondStateChange(BleCentral central, int bondState) {
    /// called on android when central successfully paired
    print("onBondStateChange: ${central.uuid.value} : ${BondState.fromInt(bondState)}");
  }
}

Setup this class to receive updates

blePeripheral.setBleCallback(PeripheralCallbackHandler());

TODO #

Complete windows implementation

Note #

Still under development, api's might change, this is just the initial version, feel free to contribute or report any bug!

16
likes
130
pub points
73%
popularity

Publisher

verified publisherrohitsangwan.in

Ble peripheral is a Flutter plugin that allows you to use your device as Bluetooth Low Energy (BLE) peripheral

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, pigeon, plugin_platform_interface

More

Packages that depend on ble_peripheral