반응형

HC-05 / HC-06 블루투스 모듈을 연결한 아두이노 우노와 안드로이드 앱간 블루투스 통신하는 방법을 다루고 있습니다.



1. Arduino Uno와 Android 폰간의 페어링


2. LED 제어 테스트


3. 채팅 테스트



마지막 업데이트 - 2018. 8. 30




진행하기 전에 다음 두 포스팅을 먼저 확인하세요.


1. 아래 포스팅에 있는 안드로이드 앱 소스 코드를 사용하여 폰에 앱을 설치해주세요.



Android와 PC JAVA 프로그램 간 블루투스 통신 예제

http://webnautes.tistory.com/849   




2. 아래 포스팅을 참고하여 아두이노 우노와  HC-05 / HC-06 블루투스 모듈을 연결해주세요.



Arduino Uno에 HC-05 / HC-06 Bluetooth 모듈 연결하여 사용하는 방법

http://webnautes.tistory.com/846





1. Arduino Uno와 Android 폰간의 페어링

Arduino Uno에 HC-05 Bluetooth 모듈 연결하고 소스 코드를 업로드한 상태에서 진행합니다.

LED 제어 테스트 또는 채팅 테스트 소스코드를 아두이노에 업로드하면 됩니다.



1. 안드로이드 폰의 설정에서 블루투스를 활성화해줍니다.





2. 주변에 있는 블루투스 디바이스를 찾기 위해 검색을 터치합니다.





3. HC-05 블루투스 모듈이  검색되면 해당 항목을 선택합니다.





4. PIN 번호 1234를 입력하고 등록을 선택합니다.





5. 잠시후 등록된 기기에 HC-05가 추가됩니다.





2. LED 제어 테스트

1. 아두이노 우노에 다음 코드를 업로드합니다.

아두이노 우노와 PC 간에 테스트 하기 위해 사용했던 코드와 차이가 있으므로 다음 코드로 바꾸어 주어야 합니다.  


#include <SoftwareSerial.h>

SoftwareSerial softwareSerial(2, 3); // RX, TX


void setup() {

 softwareSerial.begin(9600);
 pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {

 if (softwareSerial.available() > 0 ) {


   char command = softwareSerial.read();
   int ledStatus = digitalRead(LED_BUILTIN);

   switch (command){

     case '1':
     
       if (ledStatus == LOW){
         digitalWrite(LED_BUILTIN, HIGH);
         softwareSerial.println("LED가 켜졌습니다.\n");
       }
       else{
         softwareSerial.println("이미 LED가 켜져있습니다.\n");
       }
       break;

     case '2':
     
       if (ledStatus == HIGH){
         digitalWrite(LED_BUILTIN, LOW);
         softwareSerial.println("LED가 꺼졌습니다.\n");
       }
       else{
         softwareSerial.println("이미 LED가 꺼져있습니다.\n");
       }
       break;

     case 'S':
     case 's':
         
       if (ledStatus == LOW){
         softwareSerial.println("LED 상태: 꺼짐\n");
       }
       else {
         softwareSerial.println("LED 상태: 켜짐\n");
       }
       break;
     
   }   
 }
}




2. 안드로이드 앱을 실행하면 페어링된 HC-05가 목록에 보입니다.  선택해줍니다.





3. 연결이 되면 상단에 connected to HC-05라고 표시됩니다.



안드로이드와 아두이노 간에 블루투스 통신 중에는 HC-05 블루투스 모듈의  LED가 두번 연속 깜빡이는 것을 반복하게 되는데 통신이 연결된 상태라는 의미입니다.


안드로이드앱에서 백버튼을 눌러 종료하면  통신이 종료되어 HC-05의 모듈이 연속적으로 계속 깜빡이게 됩니다.




4. 몇가지 테스트해본 결과 입니다.

최근에 주고 받은 문자열이 맨위에 올라오게 됩니다.





3. 채팅 테스트

이번엔 안드로이드와 아두이노 간 서로 문자열을 주고 받는 테스트를 진행합니다.



1. 아두이노에 아래 코드를 업로드해줍니다.


#include <SoftwareSerial.h>

int bluetoothTx = 2;
int bluetoothRx = 3;

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

void setup()
{
 //Setup usb serial connection to computer
 Serial.begin(9600);
 bluetooth.begin(9600);
}


void loop()
{
 //Read from bluetooth and write to usb serial
 if(bluetooth.available())
 {
   char toSend = (char)bluetooth.read();
   Serial.print(toSend);
 }
 
 //Read from usb serial to bluetooth
 if(Serial.available())
 {
   char toSend = (char)Serial.read();
   bluetooth.print(toSend);
 }
}




2. Android 앱을 실행하여 페어링된 디바이스 목록에서 HC-05를  선택해줍니다.





3. 연결이 되면 상단에 connected to HC-05라고 표시됩니다.





4. 아두이노 IDE의 메뉴에서 툴 > 시리얼 모니터를 선택합니다.

하단에 있는 콤보박스를 새 줄로 변경합니다.





5. 안드로이드앱에서 문자열을 적은 후, SEND를 선택합니다.





6. 시리얼 모니터에 수신된 문자열이 출력됩니다.





7. 이번엔  시리얼 모니터에서 문자열을 적은 후 엔터를 누르거나 전송 버튼을 클릭합니다.





안드로이드에서 받은 한글 문자열이 깨져서 나옵니다.   한글의 경우에만 인코딩 문제가 있는 듯합니다.







문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts