https://pub.dev/packages/flutter_blue
flutter_blue | Flutter Package
Flutter plugin for connecting and communicating with Bluetooth Low Energy devices, on Android and iOS
pub.dev
제가 개발하는 IoT 앱의 주요 기능 중에 하나가 블루투스 입니다.
블루투스 관련 개발은 안드로이드, iOS도 프레임워크 동작이 다르고, 실제 결과도 조금씩 달라서 굉장히 까다롭습니다.
각 OS별로 안정되게 구현된 블루투스 관련 로직을 플러터로 구현하면서 생각보다 꽤 많이 고생했습니다.
제가 설치해보고 테스트해본 라이브러리는 다음과 같습니다.
1. flutter_reactive_ble 5.0.2
2. flutter_ble_lib 2.3.2
3. flutter_blue 0.8.0
모두 장단점이 확실히 있습니다. 개발하시는 분의 스타일에 따라 가면 될 것 같습니다.
블루투스 모듈은 크게 검색, 연결, 데이터 쓰기, 데이터 읽기, 연결 종료 로 이루어 집니다.
위의 내용은 순차적으로 이루어지며, 순차적으로 잘 이루어 졌을 때는 모든 라이브러리가 큰 문제가 없었습니다.
하지만 제가 개발하는 앱은 검색, 재검색, 상시 연결 종료 등의 복잡한 기능을 가져서
결과적으로 유명한(LIKES, POPULARITY가 높은) 블루투스 라이브러리들로 만족할 수 없었습니다.
위 라이브러리들은 안드로이드에서는 모두 정상적으로 동작되나, iOS에서는 문제가 있었습니다.
flutter_blue 경우는 가장 많이 사용하는 라이브러리인데, 솔직하게 중간에 무슨 문제가 있어서 사용을 중단했다가 그 부분을 해결한 후에 이제는 사용 중인 라이브러리입니다.
* 저는 flutter_blue로 사용 중입니다. 혹시 라이브러리 사용하시다가 에러나시면 댓글 주시면 댓글로 문의 주세요.
아래는 flutter_blue 를 사용 방법 입니다.
설치 방법
dependencies:
flutter_blue: ^0.8.0
초기화
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();
데이터 쓰기
// Reads all 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])
데이터 읽기
await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
// do something with new value
});
'Flutter(플러터) > Bluetooth' 카테고리의 다른 글
Flutter 블루투스 기본 세팅 (0) | 2021.12.27 |
---|---|
Flutter 블루투스 - flutter_ble_lib (0) | 2021.12.27 |
Flutter 블루투스 - flutter_reactive_ble (0) | 2021.12.27 |
댓글