본문 바로가기
Flutter

Flutter에서 블루투스 통신 구현하기

by 안될개발 2025. 1. 26.

Flutter에서 블루투스 통신 구현하기

Flutter에서 블루투스 통신 구현하기

Flutter로 블루투스 통신을 구현하면 IoT 장치, 웨어러블 기기, 또는 기타 블루투스 지원 장치와의 상호작용을 가능하게 합니다. 이 글에서는 Flutter에서 블루투스 통신을 설정하고 사용하는 방법을 다룹니다.


1. 블루투스 플러그인 선택하기

Flutter에서 블루투스 기능을 구현하려면 적절한 패키지를 사용해야 합니다. 대표적인 플러그인은 다음과 같습니다:

이 글에서는 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 장치와의 연결, 데이터 전송 및 수신을 간단하게 만들어줍니다. 이 가이드를 바탕으로 다양한 블루투스 기반 애플리케이션을 개발해 보시기 바랍니다.