아두이노 나노 ESP32 블루투스 로테이터 예제 BLE를 통한 각도 제어 튜토리얼

개요

이 예제는 DIYables Bluetooth STEM 앱을 통한 BLE(블루투스 로우 에너지)를 사용하여 Arduino Nano ESP32에 각도 위치 제어를 제공합니다. 스마트폰에서 무선으로 회전 각도와 서보 모터를 제어하세요. 제한 범위 및 연속 회전 모드를 지원합니다. 서보 제어, 로봇 공학, 팬-틸트 메커니즘, 각도 위치 조정에 적합합니다.

참고: Arduino Nano ESP32는 BLE만 지원하며 클래식 블루투스는 지원하지 않습니다. DIYables 블루투스 앱은 BLE를 통해 Android와 iOS 모두에서 작동합니다.

아두이노 나노 ESP32 블루투스 로테이터 예제 - BLE를 통한 각도 제어 튜토리얼

기능

  • 제한 모드: 최소/최대 각도 범위 설정 (예: 0° ~ 180°)
  • 연속 모드: 전체 360° 연속 회전
  • 실시간 각도: 사용자가 다이얼을 돌릴 때 각도 업데이트 수신
  • 서보 통합: 서보 모터 직접 제어
  • 초기 각도 동기화: 연결 시 현재 위치 전송
  • Android 및 iOS 지원: BLE는 두 플랫폼 모두 호환
  • 페어링 불필요: BLE는 수동 페어링 없이 연결

필요한 하드웨어

1×아두이노 나노 ESP32 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×(optional) Servo Motor 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 나노용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) 아두이노 나노용 브레이크아웃 확장 보드 쿠팡 | 아마존
1×(추천) 아두이노 나노 ESP32용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Arduino Nano ESP32 코드

빠른 시작

  • Arduino Nano ESP32가 처음이신가요? 아두이노 나노 ESP32 - 소프트웨어 설치를 참조하세요.
  • USB로 Arduino Nano ESP32를 컴퓨터에 연결하세요.
  • Arduino IDE를 열어주세요.
  • Arduino Nano ESP32 보드와 올바른 COM 포트를 선택하세요.
  • 왼쪽 사이드바에서 라이브러리 아이콘을 클릭하세요.
  • "DIYables Bluetooth"를 검색하고 DIYables의 DIYables Bluetooth 라이브러리를 선택하세요.
  • 설치를 클릭하세요.
아두이노 나노 ESP32 diyaBLEs 블루투스 라이브러리
  • 종속성 설치 메시지가 나타나면 모두 설치를 클릭하세요.
아두이노 나노 ESP32 diyaBLEs 블루투스 dependency

BLE 코드

  • Arduino IDE에서 파일 예제 DIYables Bluetooth ArduinoBLE_Rotator를 열거나, 코드를 편집기에 붙여 넣으세요.
/* * DIYables Bluetooth Library - ESP32 BLE Rotator Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Rotator feature: * - Rotatable disc/knob control (0-360 degrees) * - Continuous or limited angle range * - Perfect for servo control, compass display, volume knobs * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const char* DEVICE_NAME = "ESP32BLE_Rotator"; const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214"; const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214"; const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214"; // Create Bluetooth instances DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Rotator app instance DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Variables to store current angle float currentAngle = 0.0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Rotator Example"); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothRotator); bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Add your control logic here based on angle }); Serial.println("Waiting for Bluetooth connection..."); } void loop() { bluetoothServer.loop(); delay(10); }
  • 업로드를 클릭하여 스케치를 보드에 플래시하세요.
  • 시리얼 모니터를 열어주세요.
  • 시리얼 모니터 출력은 다음과 같아야 합니다:
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - Rotator Example Waiting for Bluetooth connection...
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

모바일 앱

  • 스마트폰에 DIYables 블루투스 앱을 설치하세요: Android | iOS

참고: DIYables 블루투스 앱은 BLE를 통해 Android와 iOS 모두에서 작동합니다. 수동 페어링이 필요 없습니다.

  • DIYables 블루투스 앱을 실행하세요.
  • 처음 실행 시 다음 권한을 허용하세요:
    • 근처 기기 (Android 12+) / 블루투스 (iOS) — 블루투스 기기 스캔 및 연결에 필요
    • 위치 (Android 11 이하에만 해당) — 구형 Android 버전에서 BLE 스캔에 필요
  • 기기에서 블루투스가 활성화되어 있는지 확인하세요.
  • 홈 화면에서 연결을 탭하세요. 앱이 BLE 기기를 스캔합니다.
diyaBLEs 블루투스 앱 - 스캔 버튼이 있는 홈 화면
  • 스캔 결과에서 "Arduino_Rotator"를 탭하세요.
  • 연결 후 홈 화면으로 돌아가 로테이터 앱을 여세요.
diyaBLEs 블루투스 앱 - 로테이터 앱이 있는 홈 화면

홈 화면의 설정 아이콘을 탭하여 앱을 표시하거나 숨길 수 있습니다. 자세한 내용은 DIYables 블루투스 앱 사용 설명서를 참조하세요.

  • 0° ~ 180°를 표시하는 회전 다이얼이 나타납니다.
  • 다이얼을 돌려 아두이노로 각도 값을 전송하세요.
diyaBLEs 블루투스 앱 - 로테이터 화면

Arduino IDE의 시리얼 모니터를 다시 확인하면 다음과 같이 표시됩니다:

Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Bluetooth connected! Angle changed: 45.00° Angle changed: 90.00° Angle changed: 135.00°
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

창의적인 커스터마이징 - 프로젝트에 코드 적용하기

회전 모드

// Limited mode: specify min and max angle DIYables_BluetoothRotator bluetoothRotator(bluetoothServer, ROTATOR_MODE_LIMITED, 0, 180); // Continuous mode: full 360° rotation DIYables_BluetoothRotator bluetoothRotator(bluetoothServer, ROTATOR_MODE_CONTINUOUS);

각도 변경 처리

bluetoothRotator.onRotatorAngle([](float angle) { Serial.print("Angle: "); Serial.println(angle); // Control a servo motor myServo.write((int)angle); });

현재 각도 전송

// Send current angle to the app (e.g., on connect) bluetoothRotator.sendAngle(currentAngle);

프로그래밍 예제

서보 모터 제어

#include <Servo.h> Servo myServo; float currentAngle = 90; void setup() { myServo.attach(9); myServo.write(currentAngle); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; myServo.write((int)angle); Serial.print("Servo: "); Serial.println(angle); }); } void loop() { bluetoothServer.loop(); }

팬-틸트 카메라 마운트

Servo panServo; Servo tiltServo; // Use two rotator instances for pan and tilt // Or use a single rotator for one axis // and a slider for the other void setup() { panServo.attach(9); tiltServo.attach(10); bluetoothRotator.onRotatorAngle([](float angle) { panServo.write((int)angle); Serial.print("Pan: "); Serial.println(angle); }); }

문제 해결

일반적인 문제

1. 앱에서 기기가 보이지 않음

  • 보드에 전원이 공급되고 스케치가 업로드되었는지 확인하세요
  • 스마트폰에서 블루투스가 활성화되어 있는지 확인하세요
  • Android 11 이하에서는 위치 서비스도 활성화하세요

2. 서보가 반응하지 않음

  • 서보가 올바른 핀에 연결되어 있는지 확인하세요
  • 서보 라이브러리가 포함되어 있고 attach()가 호출되었는지 확인하세요
  • 서보를 위한 전원 공급이 충분한지 확인하세요

3. 각도 범위가 잘못된 것 같음

  • 생성자의 min/max 값을 확인하세요
  • 제한된 범위에 ROTATOR_MODE_LIMITED가 사용되었는지 확인하세요

4. 재연결 시 다이얼이 0으로 초기화됨

  • 기기가 재연결될 때 sendAngle()을 사용하여 현재 각도를 전송하세요
  • 예제 코드가 onRotatorAngle 콜백에서 이를 처리합니다

5. 업로드 실패 또는 보드 인식 불가

  • 보드 매니저를 통해 최신 Arduino Nano ESP32 보드 패키지를 설치하세요
  • 다른 USB 케이블이나 포트를 시도해 보세요

프로젝트 아이디어

  • 서보 모터 컨트롤러
  • 팬-틸트 카메라 마운트
  • 로봇 팔 관절 제어
  • 다이얼 기반 온도 조절기 제어
  • 나침반/방향 표시

다음 단계

블루투스 로테이터 예제를 완료한 후 다음을 살펴보세요:

  1. 블루투스 슬라이더 — 선형 값 제어
  2. 블루투스 조이스틱 — 2D 위치 제어
  3. 블루투스 아날로그 게이지 — 시각적 피드백 표시
  4. 블루투스 다중 앱 — 로테이터와 다른 앱 위젯 결합

지원

추가 도움이 필요하시면:

  • API 레퍼런스 문서를 확인하세요
  • DIYables 튜토리얼을 방문하세요
  • 아두이노 커뮤니티 포럼