iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0

前言

官方套件使用範例

想帶大家認識 Flutter Blue 套件 怎麼使用。
了解裡面的參數。

藍牙中具體有些哪些:藍牙名字(name)藍芽裝置(device)藍牙信號強度(riss)藍牙服務(service) 藍牙服務下麵又有小服務。

藍芽物件介紹

BluetoothState 藍芽狀態

可以去監聽 Stream = FlutterBlue.instance.state
BluetoothState

  • unknown, // 未知狀況,通常我設定這個為初始值
  • unavailable, // 不存在藍芽
  • unauthorized, // 未授權
  • turningOn, // 正在開啟
  • on, // 已經開啟
  • turningOff, // 正在關閉
  • off // 已經關閉

ScanResult 藍芽裝置資訊

可以去監聽 Stream = FlutterBlue.instance.scanResults

  • rssi
  • advertisementData
    發出廣播封包的裝置,其中廣播封包包含裝置的 MAC 位址也可以有其他額外的資料,像是 device name等...。
  • device(BluetoothDevice)
    • name // 裝置名稱
    • id // 裝置 id
    • type(BluetoothDeviceType) // 裝置的狀態
    • services // 裝置服務
    • mtu // 監聽 MTU (byte 為單位)
    • state // 監聽裝置的狀態
    • isDiscoveringServices 監聽搜尋服務
    • discoverServices() // 從新搜尋服務
    • disconnect() // 取消連接服務
    • connect() 連接服務
    • requestMtu() // 請求改變 Mtu 大小, (IOS 不支援)

BluetoothService

當搜尋到 ScanResult 拿到裡面的 device 後。
stream: device.services,
BluetoothService

  • uuid
  • deviceId
  • isPrimary
  • characteristics
  • includedServices

歡迎上官網了解GATT參數

想要監聽已經連藍芽的狀態

可以每 2 秒監聽 Devices 這樣子。
Stream.periodic(Duration(seconds: 2)).asyncMap((_) => FlutterBlue.instance.connectedDevices),

用法

初始化藍芽

FlutterBlue flutterBlue = FlutterBlue.instance;

開始搜尋藍芽

// Start scanning
flutterBlue.startScan(timeout: Duration(seconds: 4));

// Listen to scan results
var subscription = flutterBlue.scanResults.listen((results) {
    // do something with scan results
    for (ScanResult r in results) {
        print('${r.device.name} found! rssi: ${r.rssi}');
    }
});

// Stop scanning
flutterBlue.stopScan();

連接、中斷 藍芽

// Connect to the device
await device.connect();

// Disconnect from device
device.disconnect();

啟用 BlueTooth Service

List<BluetoothService> services = await device.discoverServices();
services.forEach((service) {
    // do something with service
});

讀寫 characteristics

https://pub.dev/packages/flutter_blue#read-and-write-characteristics

var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
    List<int> value = await c.read();
    print(value);
}

// Writes to a characteristic
await c.write([0x12, 0x34])

讀寫 descriptors

https://pub.dev/packages/flutter_blue#read-and-write-descriptors

// Reads all descriptors
var descriptors = characteristic.descriptors;
for(BluetoothDescriptor d in descriptors) {
    List<int> value = await d.read();
    print(value);
}

// Writes to a descriptor
await d.write([0x12, 0x34])

Set notifications and listen to changes

https://pub.dev/packages/flutter_blue#set-notifications-and-listen-to-changes

await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
    // do something with new value
});

讀取 MTU and 請求更改 Mtu size

https://pub.dev/packages/flutter_blue#read-the-mtu-and-request-larger-size

final mtu = await device.mtu.first;
await device.requestMtu(512);

Refrence

flutter_blue 套件
GATT
參數


上一篇
【第二十天 - Flutter 與 Android、iOS 溝通方式 - 官方範例講解】
下一篇
【第二二天 - Flutter GitHub Search 範例+RxDart+搜尋快取】
系列文
Flutter - 複製貼上到開發套件之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言