본문 바로가기

소프트박스 코딩

아두이노에서 블루투스 데이터 통신을 위한 스케치 코드

반응형


아두이노에서 블루투스 데이터 통신을 위한 스케치 코드


특정한 기능의 코드는 다양한 코드를 살펴보는 것이 좋다. 아래 코드는 블루투스를 통해 문자를 전송 받고, 문자열 종료 표시(보통 개향문자 '\n'을 사용)를 발견하면 수신한 문자열을 다시 블루투스를 통해 스마트 폰으로 전송하는 스케치 코드이다.


회로 연결도를 참고한다.




우선 블루투스 모듈의 RX, TX 데이터 선을 아두이노 D3, D2 에 연결한다. 소스코드는 아래에 주석과 함께 설명하니 참고하시라.


한 가지 자주 헷갈리고 뒤바뀌는 점이 바로 씨리얼 포트의 RX-TX 정의 번호와 블루투스 모듈 RX-TX 연결 번호이다. 쉽게 생각하면 된다. 아두이노에서 데이터를 받는 RX 번호에서 나오는 선은 블루투스의 데이터를 보내는 TX 번호로 받는다는 것만 알아두면 된다. 즉 상호 연관되는 번호가 반대라는 것이다. 아래 코드 3line 의 씨리얼 포트 RX가 2번이면 무조건 블루투스 모듈의 TX 선에 연결된다는 것이다.   


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <SoftwareSerial.h>
 
SoftwareSerial BTSerial(23);  // SoftwareSerial(RX, TX)
 
byte buffer[1024];    // 데이터 수신 버퍼
int bufferPosition;   // 버퍼에 기록할 위치
 
void setup()  
{
  BTSerial.begin(9600);   // 블루투스 모듈 초기화
  Serial.begin(9600);   // 시리얼 모니터 초기화
  bufferPosition = 0;
}
 
void loop()
{
  if (BTSerial.available()){      // 블루투스로 데이터 수신
    byte data = BTSerial.read();
    Serial.write(data);       // 수신된 데이터 시리얼 모니터로 출력
    buffer[bufferPosition++= data;
    if(data == '\n'){     // 문자열 종료 표시를 
      buffer[bufferPosition] = '\0';
 
      // 스마트폰으로 전송할 문자열을 시리얼 모니터에 출력
      Serial.print("Echo Back : "); 
      Serial.write(buffer, bufferPosition);
      
      // 스마트폰으로 문자열 전송
      BTSerial.write(buffer, bufferPosition);
 
      bufferPosition = 0;
    }
  }
}
 

 

블루투스로 데이터 송수신을 수행하는 안드로이드 앱은 아래 첨부 파일을 다운로드 받아 설치하고 실행해 보세요. - 이거 해보니 자꾸 안드로이드 앱이 종료된다. 하지 마세요!


apk 실행파일 : BluetoothTest.apk 


bluetoothtest.apk

반응형