아두이노 - 블루투스 | Arduino - Bluetooth

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

Arduino Bluetooth

이 튜토리얼의 범위:

이 튜토리얼은 클래식 블루투스(Bluetooth 2.0) 사용에 관한 것입니다. 블루투스 저에너지 - BLE (Bluetooth 4.0)를 찾고 계시다면, 이 비슷한 튜토리얼을 참고하세요: 아두이노 - 블루투스 저에너지

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×HC-05 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×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

HC-05 블루투스 모듈에 관하여

HC-05는 시리얼 블루투스 모듈입니다. 시리얼에서 블루투스로 변환하는 역할을 합니다.

  • 시리얼 RX 핀에서 데이터를 받아서 페어링된 장치(예: 스마트폰)에 블루투스를 통해 데이터를 전송합니다.
  • 블루투스에서 데이터를 받아서(페어링된 장치로부터) 시리얼 TX 핀으로 데이터를 보냅니다.

더 구체적으로, Arduino가 스마트폰 앱(Android/iOS)과 통신하는 맥락에서:

  • 아두이노는 시리얼/소프트웨어시리얼 핀을 통해 HC-05 블루투스 모듈에 연결됩니다.
  • HC-05 블루투스 모듈은 스마트폰 앱과 페어링됩니다.
  • 아두이노는 시리얼/소프트웨어시리얼로 데이터를 보내는 것만으로 스마트폰 앱에 데이터를 전송합니다.
  • 아두이노는 시리얼/소프트웨어시리얼로 데이터를 읽는 것만으로 스마트폰 앱에서 데이터를 수신합니다.
  • 아두이노에서는 특별한 블루투스 코드가 필요하지 않습니다.

핀배열

Bluetooth Pinout

HC-05 블루투스 모듈에는 6개의 핀이 있습니다:

  • 활성화/키 핀: 이 핀은 데이터 모드(LOW 설정)와 명령 모드(HIGH 설정) 사이를 전환하는 데 사용됩니다. 연결되지 않은 경우 기본적으로 데이터 모드입니다.
  • VCC 핀: 전원 핀, 이 핀을 공급 전압의 +5V에 연결하세요.
  • GND 핀: 전원 핀, 이 핀을 전원 소스의 GND에 연결하세요.
  • TX 핀: 직렬 데이터 핀, 이 핀을 아두이노의 RX 핀에 연결하세요. 블루투스를 통해 수신된 데이터가 직렬 데이터로 이 핀을 통해 전송됩니다.
  • RX 핀: 직렬 데이터 핀, 이 핀을 아두이노의 TX 핀에 연결하세요. 이 핀에서 수신된 데이터는 블루투스로 전송됩니다.
  • 상태: 상태 핀은 기판에 있는 LED에 연결되어 있으며, 블루투스가 제대로 작동하는지 확인하기 위한 피드백으로 사용할 수 있습니다.

그러나 기본 기능을 위해서는 HC-05 블루투스 모듈의 4개 핀만을 사용해서 아두이노에 연결하면 됩니다.

HC-05 블루투스 모듈에는 또한 두 개의 내장된 구성 요소가 있습니다:

  • LED: 모듈의 상태를 표시합니다.
    • 2초에 한 번씩 깜박임: 모듈이 커맨드 모드로 진입했습니다.
    • 반복해서 깜박임: 데이터 모드에서 연결을 기다리는 중입니다.
    • 1초에 두 번 깜박임: 데이터 모드에서 연결 성공
  • 버튼: 작동 모드(데이터 또는 커맨드 모드)를 선택하기 위해 키/활성화 핀을 제어하는 데 사용할 수 있습니다.

작동 원리

HC-05 블루투스 모듈에는 두 가지 작동 모드가 있습니다:

  • 데이터 모드: 페어링된 장치와 데이터를 교환하는 데 사용됩니다.
  • 명령 모드: 매개변수를 구성하는 데 사용됩니다.

다행히도 HC-05 블루투스 모듈은 구성 없이 기본 설정을 사용하여 아두이노와 함께 작동할 수 있습니다.

HC-05 기본 설정

Default Bluetooth Name “HC-05”
Default Password 1234 or 0000
Default Communication Slave
Default Mode Data Mode
Default Data Mode Baud Rate 9600, 8, N, 1
Default Command Mode Baud Rate 38400, 8, N, 1

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

Bluetooth Serial Monitor 앱은 아두이노 IDE의 직렬 모니터와 비슷한 사용자 인터페이스를 가진 모바일 앱입니다. 이 앱은 블루투스를 통해 아두이노와 통신합니다. PC의 직렬 모니터처럼 이 앱을 통해 아두이노와 상호작용할 수 있으며, 아두이노 코드에 블루투스 모듈을 위한 특별한 코드를 추가할 필요 없이 다음 단계를 수행함으로써 가능합니다:

  • Arduino를 HC-05 Bluetooth 모듈에 연결하십시오
  • 스마트폰에 Bluetooth Serial Monitor App을 설치하십시오
  • 앱을 열고 HC-05 Bluetooth 모듈과 페어링하십시오

이제 아두이노 IDE의 시리얼 모니터처럼 아두이노에서 데이터를 송수신할 수 있습니다. 기존의 아두이노 코드를 수정할 필요도 없고, 새 아두이노 코드에 블루투스 코드를 추가할 필요도 없습니다.

선연결

Arduino Bluetooth Wiring Diagram

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

배선 테이블

Arduino Pins HC-05 Bluetooth Pins
RX (Pin 0) TX
TX (Pin 1) RX
5V VCC
GND GND
Enable/Key (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-bluetooth */ void setup() { Serial.begin(9600); } void loop() { Serial.println("Arduino here, command me!"); delay(1000); }

사용 방법

  • 스마트폰에 블루투스 시리얼 모니터 앱을 설치하세요
  • 위의 배선도대로 HC-05 블루투스 모듈을 아두이노에 연결하세요
  • 위의 코드를 복사하여 아두이노 IDE에서 열어주세요
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노에 코드를 업로드하세요. 코드를 아두이노에 업로드하는데 실패할 수도 있습니다. 그런 경우, 블루투스 모듈의 TX 및 RX 핀을 분리한 다음 코드를 업로드하고 다시 RX/TX 핀을 연결하세요.
  • 아두이노 IDE에서 시리얼 모니터를 열어주세요
  • 스마트폰에서 블루투스 시리얼 모니터 앱을 열어주세요
  • 클래식 블루투스 모드를 선택하세요
Bluetooth Serial Monitor App

HC-05 블루투스 모듈과 페어링하세요.

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의 시리얼 모니터와 안드로이드 앱에서 보이는 데이터가 동일하다는 것을 알게 될 것입니다.

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

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

  • Bluetooth 앱이 데이터를 Arduino로 전송합니다.
  • Arduino가 데이터를 읽고 응답을 Bluetooth로 다시 전송합니다.
/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-bluetooth */ // 주의: 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); }

사용 방법

  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하기
  • Arduino IDE에서 시리얼 모니터 열기
  • Android 앱을 열고 이전 예제와 유사하게 HC-05 블루투스 모듈과 페어링하기
  • 연결 후, Android 앱에서 "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의 시리얼 모니터와 안드로이드 앱에 있는 데이터가 동일하다는 것을 확인할 수 있을 것입니다.

스마트폰 앱을 통한 블루투스로 LED 제어 - 아두이노 코드

아래의 아두이노 예제 코드는 Bluetooth Serial Monitor App에서 두 가지 명령어("ON"과 "OFF")를 받아 내장 LED를 켜고 끄는 기능을 수행합니다.

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-bluetooth */ // 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 controls LED via Bluetooth/BLE 튜토리얼에서 지침을 더 자세히 볼 수 있습니다.

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

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

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-bluetooth */ // 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가 Bluetooth/BLE를 통해 Servo Motor를 제어하는 방법 튜토리얼에서 더 자세한 지침을 확인할 수 있습니다.

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!