아두이노 - BLE | Arduino - BLE

이 튜토리얼에서는 다음을 배우게 됩니다:

Arduino BLE

이 튜토리얼의 범위:

이 튜토리얼은 특히 블루투스 로우 에너지(BLE, 블루투스 4.0)에 대해 다루고 있음을 알려드립니다. 클래식 블루투스(블루투스 2.0)에 대한 정보를 찾고 계시다면, 비슷한 튜토리얼 아두이노 - 블루투스를 참고해 주세요.

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×HM-10 Bluetooth Module Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Recommended) Breadboard Shield For Arduino Uno 쿠팡 | Amazon
1×(Recommended) Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

HM-10 블루투스 모듈에 대하여

HM-10은 시리얼을 블루투스 저에너지로 변환하는 기능을 하는 시리얼 BLE 모듈입니다. 다음과 같은 작업을 수행합니다:

  • 시리얼 RX 핀에서 데이터를 받아 BLE를 통해 스마트폰과 같은 짝이 맞는 장치로 전송합니다.
  • BLE에서 데이터를 받아(짝이 맞는 장치로부터) 시리얼 TX 핀으로 보냅니다.

특히, 아두이노를 사용하여 스마트폰 앱(안드로이드/iOS)과 통신할 때 다음과 같은 일이 발생합니다:

  • 아두이노는 시리얼/소프트웨어시리얼 핀을 통해 HM-10 블루투스 모듈에 연결합니다.
  • HM-10 블루투스 모듈은 스마트폰 앱과 페어링됩니다.
  • 아두이노는 시리얼/소프트웨어시리얼로 데이터를 보내 스마트폰 앱에 데이터를 전송합니다.
  • 아두이노는 시리얼/소프트웨어시리얼에서 읽어 스마트폰 앱으로부터 데이터를 받습니다.
  • 아두이노에서 추가적인 BLE 코드는 필요하지 않습니다.

핀아웃

BLE Pinout

HM-10 BLE 모듈에는 6개의 핀이 있습니다:

  • BKR 핀: 모듈의 동작을 제어하는 핀입니다. 초보자라면 이 핀은 무시하세요.
  • RX 핀: 직렬 데이터 핀으로, 이 핀을 아두이노의 TX 핀에 연결하세요. 이 핀에서 받은 데이터는 Bluetooth로 전송됩니다.
  • TX 핀: 직렬 데이터 핀으로, 이 핀을 아두이노의 RX 핀에 연결하세요. BLE를 통해 수신된 데이터는 직렬 데이터로서 이 핀을 통해 전송됩니다.
  • GND 핀: 전력 핀으로, 이 핀을 전원 소스의 GND에 연결하세요.
  • VCC 핀: 전력 핀으로, 이 핀을 공급 전압의 3.3V에 연결하세요.
  • STATE 핀: 작동 상태를 나타냅니다:
    • 대기 모드에서 깜박임 - 500ms 펄스 반복;
    • 연결 상태에서 켜짐 - 고 수준.

    ※ NOTE THAT:

    • 우리는 오직 4개의 핀을 사용해야 합니다: VCC, GND, RX, TX
    • 일부 제조업체들은 단 4개의 핀만으로 HM-10을 생산합니다.

블루투스 시리얼 모니터 앱에 대하여

Bluetooth Serial Monitor 앱은 Arduino IDE의 시리얼 모니터 모습을 모방한 모바일 애플리케이션입니다. Arduino 스케치에 추가 코드 없이 Arduino 보드와 Bluetooth를 통한 통신을 가능하게 합니다. 사용하기 위해서는 다음 단계를 따르세요:

  • 아두이노를 HM-10 블루투스 모듈에 연결하세요.
  • 스마트폰에 블루투스 시리얼 모니터 앱을 다운로드하고 설치하세요.
  • 앱을 열고 HM-10 블루투스 모듈에 연결하세요.

이러한 단계를 완료하면, 기존 아두이노 코드를 수정하거나 블루투스 특정 코드를 추가할 필요 없이, 아두이노 IDE의 시리얼 모니터를 사용하는 것처럼 아두이노에서 데이터를 보내고 받을 수 있습니다.

선연결

Arduino BLE Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

배선 테이블

Arduino Pins HM-10 Bluetooth Pins
RX (Pin 0) TX
TX (Pin 1) RX
5V VCC
GND GND
BKR (NOT connected)
STATE (NOT connected)

※ NOTE THAT:

아두이노 코드는 Serial 객체를 Serial1, Serial2 또는 SoftwareSerial(사용 가능한 경우)과 같은 대안으로 교체함으로써 다른 핀을 사용할 수 있습니다.

블루투스 프로그래밍 방법

전문적인 블루투스 코드가 필요하지 않고, 시리얼 코드만 필요합니다.

아두이노가 스마트폰의 블루투스 앱으로 데이터를 전송합니다

아두이노 보드에서 스마트폰의 블루투스 앱으로 데이터를 전송하려면 다음의 아두이노 코드를 사용할 수 있습니다. 이 예제는 아두이노에서 스마트폰 앱으로 매 초마다 "Arduino here, command me!"라는 메시지를 보내는 것을 보여줍니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ble */ void setup() { Serial.begin(9600); } void loop() { Serial.println("Arduino here, command me!"); delay(1000); }

사용 방법

코드를 사용하고 아두이노 보드를 BLE를 통해 스마트폰에 연결하려면 다음 단계를 따르세요:

  • 스마트폰에 블루투스 시리얼 모니터 앱을 설치하세요.
  • 제공된 배선도에 따라 HM-10 블루투스 모듈을 아두이노 보드에 연결하세요.
  • 아두이노 IDE를 열고, 위에 제공된 코드를 복사한 다음 아두이노 보드에 업로드하세요. 코드를 업로드할 수 없는 경우, 블루투스 모듈에서 TX 및 RX 핀을 분리한 후 코드를 업로드하고 다시 RX/TX 핀을 연결하세요.
  • 아두이노 IDE에서 시리얼 모니터를 엽니다.
  • 스마트폰에서 블루투스 시리얼 모니터 앱을 열고 BLE 모드를 선택하세요.
Bluetooth Serial Monitor App

스마트폰을 HM-10 블루투스 모듈과 페어링하세요.

Bluetooth Serial Monitor pairing

안드로이드 앱에서 결과를 관찰하세요.

Bluetooth Serial Monitor App

아두이노 IDE의 시리얼 모니터에서 결과를 관찰하세요.

COM6
Send
Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

단계를 따르고 코드를 실행하면, 아두이노 IDE의 시리얼 모니터와 안드로이드 앱에 표시되는 데이터가 일치하는 것을 관찰할 수 있습니다.

블루투스 앱이 아두이노로 데이터를 전송합니다

아래 코드는 다음 작업을 수행합니다:

  • 블루투스 앱에서 아두이노 보드로 데이터를 보내세요.
  • 아두이노 보드는 수신된 데이터를 읽은 다음 블루투스 기기로 응답을 보냅니다.
/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ble */ // 주의: Bluetooth 모듈을 다른 핀에 연결하는 경우 Serial을 다른 Serial/Software Serial로 변경하세요 void setup() { Serial.begin(9600); } void loop() { Serial.println(F("Arduino here, command me!")); if (Serial.available()) { // 데이터가 수신되면 String command = Serial.readStringUntil('\n'); // 개행 문자를 만날 때까지 문자열 읽기 if (command == "LED OFF") { Serial.println("LED is turned OFF"); // 스마트폰 앱에 동작을 보고 // 할 일: 여기서 LED를 제어하세요 } else if (command == "LED ON") { Serial.println("LED is turned ON"); // 스마트폰 앱에 동작을 보고 // 할 일: 여기서 LED를 제어하세요 } } delay(500); }

사용 방법

아두이노와 안드로이드 앱에서 코드를 사용하는 방법은 다음과 같습니다:

  • 아두이노 IDE를 열고 위에 제공된 코드를 붙여넣으세요.
  • Upload 버튼을 클릭하여 코드를 아두이노 보드에 업로드하세요.
  • 아두이노 IDE에서 시리얼 모니터를 엽니다.
  • 안드로이드 앱을 열고 이전 예제에서 제공된 지침을 사용하여 HM-10 블루투스 모듈과 페어링하세요.
  • 연결되면, 안드로이드 앱에서 "LED ON" 또는 "LED OFF"를 입력하고 "SEND" 버튼을 누르세요.
Bluetooth Serial Monitor App

아두이노 보드는 데이터를 받아 시리얼 포트에 응답을 출력할 것입니다. 이 데이터는 블루투스 앱으로 전송될 것입니다.

안드로이드 앱에서 결과를 확인하세요.

Bluetooth Serial Monitor App

아두이노 IDE의 시리얼 모니터에서 결과를 확인하세요.

COM6
Send
Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! LED ON LED is turned ON Arduino here, command me! Arduino here, command me! Arduino here, command me! LED OFF LED is turned OFF Arduino here, command me! Arduino here, command me!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

위의 단계를 완료하면 아두이노 IDE의 시리얼 모니터와 안드로이드 앱에 표시되는 정보가 같다는 것을 알게 될 것입니다.

스마트폰 앱을 통한 BLE로 LED 제어를 위한 아두이노 코드

다음 아두이노 예제 코드는 블루투스 시리얼 모니터 앱을 통해 받은 “ON”“OFF” 명령을 사용하여 내장 LED를 켜고 끕니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ble */ // NOTE: 다른 핀에 Bluetooth 모듈을 연결한다면 Serial을 다른 Serial/Software Serial로 변경하세요 #define LED_PIN 8 void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // 디지털 핀을 출력으로 설정: } void loop() { if (Serial.available()) { // 데이터가 들어오면 String command = Serial.readStringUntil('\n'); // 개행 문자를 만날 때까지 문자열 읽기 if (command == "OFF") { digitalWrite(LED_PIN, LOW); // LED 끄기 Serial.println("LED is turned OFF"); // 스마트폰 앱에 작업 보고 } else if (command == "ON") { digitalWrite(LED_PIN, HIGH); // LED 켜기 Serial.println("LED is turned ON"); // 스마트폰 앱에 작업 보고 } } }

Arduino가 블루투스/BLE를 통해 LED를 제어하는 방법 튜토리얼에서 더 자세한 지침을 확인할 수 있습니다.

아두이노 코드 - 스마트폰 앱을 통한 BLE로 서보 모터 제어

다음 아두이노 코드는 블루투스 시리얼 모니터 앱에서 각도 값을 받아 서보 모터의 각도를 제어합니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-ble */ // NOTE: 다른 핀에 Bluetooth 모듈을 연결하면 Serial을 다른 Serial/Software Serial로 변경하세요 #include <Servo.h> Servo servo; // 서보를 제어하기 위한 서보 객체 생성 int pos = 0; // 서보 위치를 저장할 변수 void setup() { Serial.begin(9600); servo.attach(11); // 서보 객체에 11번 핀에 있는 서보를 연결 } void loop() { if (Serial.available()) { // 데이터가 들어오면 int angle = Serial.parseInt(); if (angle >= 0 && angle <= 180) { servo.write(angle); // 서보 회전 Serial.print("Rotated servo to angle: "); // 스마트폰 앱에 동작을 보고 Serial.println(angle); } else { Serial.print("Invalid angle: "); // 유효하지 않은 값이라고 스마트폰 앱에 보고 Serial.println(angle); } } }

Arduino controls Servo Motor via Bluetooth/BLE 튜토리얼에서 더 자세한 지침을 볼 수 있습니다.

Bluetooth Serial Monitor 앱이 유용하다면 Play Store에서 별 5개를 부탁드립니다. 감사합니다!

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

함수 참조

댓글

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!