React Native 블루투스 통합: 장치 연결 및 데이터 전송
React Native 블루투스 통합: 장치 연결 및 데이터 전송
React Native는 크로스 플랫폼 모바일 앱 개발을 위한 인기 있는 프레임워크입니다. 이 글에서는 Bluetooth 통합을 통해 React Native 애플리케이션에서 장치와 연결하고 데이터를 주고받는 방법을 소개합니다. 주로 'react-native-ble-plx' 라이브러리를 사용하여 블루투스 기능을 구현할 것입니다. 시작하기 전에 필요한 도구와 설정을 확인하세요.
필요한 도구 및 설정
블루투스 기능을 구현하기 위해 다음과 같은 도구가 필요합니다:
- Node.js 및 npm: 최신 버전 설치
- React Native CLI:
npm install -g react-native-cli
- Xcode (iOS 개발용)
- Android Studio (Android 개발용)
- 물리적 블루투스 장치 (테스트용)
'package.json' 파일에 'react-native-ble-plx' 라이브러리를 추가합니다.
json"dependencies": { "react-native-ble-plx": "^2.0.0" }
그리고 라이브러리를 설치합니다.
bashnpm install react-native-ble-plx react-native link react-native-ble-plx
iOS의 경우 Podfile
을 업데이트 한 후 pod install
명령을 실행합니다.
rubypod 'react-native-ble-plx', :path => '../node_modules/react-native-ble-plx'
블루투스 관리자 초기화 및 장치 스캔
블루투스 관리자를 초기화하고 장치 목록을 스캔하여 찾는 절차는 다음과 같습니다.
javascriptimport { BleManager } from 'react-native-ble-plx'; import { Platform, PermissionsAndroid } from 'react-native'; const manager = new BleManager(); async function scanForDevices() { if (Platform.OS === 'android' && Platform.Version >= 23) { const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION); if (granted !== PermissionsAndroid.RESULTS.GRANTED) { return; } } manager.startDeviceScan(null, null, (error, device) => { if (error) { console.error(error); return; } if (device) { console.log(`디바이스 발견: ${device.name} (${device.id})`); } }); } scanForDevices();
장치 스캔을 종료하려면 manager.stopDeviceScan()
메소드를 사용합니다.
장치 연결 및 서비스 탐색
발견된 장치와 연결하고 해당 장치의 서비스를 탐색하려면 다음과 같습니다.
javascriptasync function connectToDevice(deviceId) { try { const device = await manager.connectToDevice(deviceId); console.log('장치에 연결되었습니다:', device.id); const services = await device.discoverAllServicesAndCharacteristics(); return services; } catch (error) { console.error(`장치 연결 실패: ${error.message}`); } }
데이터 전송 및 수신
블루투스를 통해 데이터를 주고받기 위해 서비스와 특성을 설정합니다. 여기서는 기본적인 데이터 읽기 및 쓰기 작업을 다룹니다.
javascriptasync function readData(deviceId, serviceUUID, characteristicUUID) { try { const characteristic = await manager.readCharacteristicForDevice(deviceId, serviceUUID, characteristicUUID); const data = Buffer.from(characteristic.value, 'base64').toString('utf-8'); console.log('수신된 데이터:', data); } catch (error) { console.error(`데이터 읽기 실패: ${error.message}`); } } async function writeData(deviceId, serviceUUID, characteristicUUID, message) { try { const base64Message = Buffer.from(message, 'utf-8').toString('base64'); await manager.writeCharacteristicWithResponseForDevice(deviceId, serviceUUID, characteristicUUID, base64Message); console.log('데이터 전송 성공'); } catch (error) { console.error(`데이터 전송 실패: ${error.message}`); } }
서비스 UUID와 특성 UUID는 블루투스 장치의 스펙에 따라 다르므로 장치의 문서를 참조하시기 바랍니다.
에러 핸들링 및 디버깅
블루투스 통합 작업 시 다양한 에러가 발생할 수 있습니다. 이러한 에러를 핸들링하고 디버깅하는 방법을 알아봅니다.
javascriptmanager.onDeviceDisconnected(deviceId, (error, device) => { if (error) { console.error(`장치 연결 끊김 에러: ${error.message}`); } else { console.log(`장치 연결 끊김: ${device.id}`); } });
최대한 모든 가능성을 고려하여 에러를 처리하고, 디버깅 로그를 남기는 것이 좋습니다.
결론
이제 React Native를 사용하여 블루투스를 설정하고, 장치에 연결하며 데이터를 주고받는 방법을 이해하셨을 것입니다. 이 가이드를 통해 효과적으로 블루투스 기능을 통합하여 더 나은 사용자 경험을 제공할 수 있을 것입니다. 추가적으로 더욱 복잡한 블루투스 통신이 필요하다면, 'react-native-ble-plx' 라이브러리의 문서를 참고하거나, 공식 블루투스 스펙 문서를 참조해주세요.