🎨 아두이노 LED 제어 앱 - 블루투스(BLE)를 통해 아두이노와 연결하여 LED 색상과 모드를 실시간으로 제어할 수 있는 React Native 앱입니다.
- 🔍 자동 기기 검색: "Jake"라는 이름의 BLE 기기를 자동으로 검색하고 연결
- 🎨 색상 제어: RED, GREEN, BLUE 색상을 선택하여 아두이노 LED 제어
- 🌈 모드 선택:
- 무지개 모드 (01): 자동으로 색상이 변화하는 모드
- 원하는 색 고르기 모드 (02): 사용자가 직접 색상을 선택하는 모드
- 📡 실시간 통신: BLE를 통한 즉시 데이터 전송
- 🔒 권한 관리: Android BLE 권한 자동 요청 및 관리
- React Native: 0.77.0
- react-native-ble-plx: BLE 통신을 위한 라이브러리
- @react-native-picker/picker: 모드 선택을 위한 드롭다운 컴포넌트
- Buffer: 데이터 패킷 인코딩
- ✅ Android (API Level 21+)
- ✅ iOS (준비됨)
- Node.js: >= 18
- React Native CLI: 최신 버전
- Android Studio: Android 개발용 (API Level 21+)
- Xcode: iOS 개발용 (macOS만)
- 아두이노 기기: BLE 모듈이 탑재되고 "Jake"로 명명된 기기
git clone https://github.com/makerthon-filament/BluetoothArduinoApp.git
cd BluetoothArduinoApp/clientnpm install
# 또는
yarn installnpx react-native run-android
# 또는
npm run androidcd ios && pod install && cd ..
npx react-native run-ios
# 또는
npm run iosconst serviceUUID = '71c46861-691a-4b1e-9ddb-d722fa9ad632';
const characteristicUUID = '71c46862-691a-4b1e-9ddb-d722fa9ad632';앱에서 아두이노로 전송되는 데이터는 다음과 같은 형식입니다:
[모드(2자리)] + [R값(3자리)] + [G값(3자리)] + [B값(3자리)]
예시:
02255000000: 모드 02, RGB(255, 0, 0) - 빨간색01000255000: 모드 01, RGB(0, 255, 0) - 초록색02000000255: 모드 02, RGB(0, 0, 255) - 파란색
- 01 (무지개 모드): 아두이노에서 자동으로 색상을 순환
- 02 (색상 선택 모드): 앱에서 지정한 RGB 값으로 고정
- 앱을 실행합니다
- "🔍 BLE 기기 검색 및 연결" 버튼을 탭합니다
- 권한 요청이 나타나면 모두 허용합니다
- "Jake" 기기가 자동으로 검색되어 연결됩니다
연결이 완료되면:
- 모드 선택: 드롭다운에서 원하는 모드를 선택
- 색상 선택: RED, GREEN, BLUE 버튼 중 하나를 선택
- 전송: "🚀 데이터 전송" 버튼을 탭하여 명령을 아두이노로 전송
아두이노 측에서는 다음과 같은 설정이 필요합니다:
- Arduino (Uno, Nano, ESP32 등)
- BLE 모듈 (ESP32 내장 또는 외부 모듈)
- RGB LED 또는 LED 스트립
- 기기 이름:
"Jake" - 서비스 UUID:
71c46861-691a-4b1e-9ddb-d722fa9ad632 - 특성 UUID:
71c46862-691a-4b1e-9ddb-d722fa9ad632
앱에서 자동으로 요청하는 권한들:
Android 12+ (API Level 31+)
BLUETOOTH_SCAN: BLE 기기 검색BLUETOOTH_CONNECT: BLE 기기 연결ACCESS_FINE_LOCATION: 위치 기반 BLE 검색
Android 11 이하
ACCESS_FINE_LOCATION: BLE 검색을 위한 위치 권한
- 권한 거부: 앱 설정에서 모든 권한을 허용했는지 확인
- 기기를 찾을 수 없음: 아두이노 기기명이 "Jake"인지 확인
- 연결 실패: 아두이노가 켜져있고 BLE가 활성화되었는지 확인
- 명령이 전달되지 않음: UUID가 올바르게 설정되었는지 확인
- LED가 동작하지 않음: 아두이노 코드에서 RGB 값 파싱 로직 확인