Flutter에서 블루투스 통신 구현하기
Flutter로 블루투스 통신을 구현하면 IoT 장치, 웨어러블 기기, 또는 기타 블루투스 지원 장치와의 상호작용을 가능하게 합니다. 이 글에서는 Flutter에서 블루투스 통신을 설정하고 사용하는 방법을 다룹니다.
1. 블루투스 플러그인 선택하기
Flutter에서 블루투스 기능을 구현하려면 적절한 패키지를 사용해야 합니다. 대표적인 플러그인은 다음과 같습니다:
- flutter_blue: BLE (Bluetooth Low Energy) 지원
- blue: BLE와 클래식 블루투스 지원
- flutter_reactive_ble: 고성능 BLE 지원
이 글에서는 flutter_blue를 사용하여 블루투스 통신을 구현하는 방법을 설명합니다.
2. 초기 설정
2.1 pubspec.yaml에 패키지 추가
flutter_blue 패키지를 프로젝트에 추가합니다:
dependencies:
flutter:
sdk: flutter
flutter_blue: ^0.8.0
2.2 Android 설정
- AndroidManifest.xml에 다음 권한을 추가:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- Android 12 이상에서는 추가로 다음 권한이 필요합니다:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
2.3 iOS 설정
- ios/Runner/Info.plist 파일에 다음 항목 추가:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>이 앱은 블루투스 장치와 통신하기 위해 블루투스를 사용합니다.</string>
3. BLE 스캔 및 연결
3.1 장치 스캔
BLE 장치를 스캔하려면 다음 코드를 사용합니다:
import 'package:flutter_blue/flutter_blue.dart';
FlutterBlue flutterBlue = FlutterBlue.instance;
void startScan() {
flutterBlue.startScan(timeout: Duration(seconds: 4));
flutterBlue.scanResults.listen((results) {
for (ScanResult result in results) {
print('Device found: ${result.device.name}');
}
});
}
3.2 장치 연결
BLE 장치에 연결하려면 다음과 같이 합니다:
void connectToDevice(BluetoothDevice device) async {
await device.connect();
print('Connected to ${device.name}');
}
3.3 장치 연결 해제
void disconnectFromDevice(BluetoothDevice device) async {
await device.disconnect();
print('Disconnected from ${device.name}');
}
4. 데이터 전송 및 수신
4.1 서비스 및 특성 탐색
BLE 장치와 통신하려면 서비스와 특성을 탐색해야 합니다:
void discoverServices(BluetoothDevice device) async {
List<BluetoothService> services = await device.discoverServices();
for (BluetoothService service in services) {
print('Service: ${service.uuid}');
for (BluetoothCharacteristic characteristic in service.characteristics) {
print('Characteristic: ${characteristic.uuid}');
}
}
}
4.2 데이터 쓰기
특성에 데이터를 쓰려면:
void writeData(BluetoothCharacteristic characteristic, List<int> data) async {
await characteristic.write(data);
print('Data written: $data');
}
4.3 데이터 읽기
특성에서 데이터를 읽으려면:
void readData(BluetoothCharacteristic characteristic) async {
List<int> data = await characteristic.read();
print('Data read: $data');
}
4.4 알림 수신
특성의 알림을 활성화하여 데이터 변경 사항을 실시간으로 받을 수 있습니다:
void enableNotifications(BluetoothCharacteristic characteristic) async {
await characteristic.setNotifyValue(true);
characteristic.value.listen((data) {
print('Notification received: $data');
});
}
5. 블루투스 상태 관리
5.1 블루투스 활성화 상태 확인
flutterBlue.state.listen((state) {
if (state == BluetoothState.on) {
print('Bluetooth is ON');
} else {
print('Bluetooth is OFF');
}
});
5.2 권한 요청
권한이 필요한 경우 사용자가 직접 허용하도록 요청합니다:
import 'package:permission_handler/permission_handler.dart';
void requestPermissions() async {
if (await Permission.location.request().isGranted) {
print('Location permission granted');
}
}
6. 결론
Flutter에서 블루투스 통신을 구현하면 IoT 및 웨어러블 장치와의 상호작용이 가능해집니다. flutter_blue와 같은 패키지는 BLE 장치와의 연결, 데이터 전송 및 수신을 간단하게 만들어줍니다. 이 가이드를 바탕으로 다양한 블루투스 기반 애플리케이션을 개발해 보시기 바랍니다.
'Flutter' 카테고리의 다른 글
Flutter에서 TableCalendar를 활용한 캘린더 UI 구현 (0) | 2025.01.26 |
---|---|
Flutter에서 Bloc 상태 관리 이해하기 (0) | 2025.01.26 |
Flutter에서 Isolate 활용하기: 고성능 비동기 작업 처리 (0) | 2025.01.25 |
Flutter 프로젝트에서 클린 코드 작성하기 (0) | 2025.01.24 |
Flutter에서 Push Notification 심화 가이드 (0) | 2025.01.23 |