[블루투스] RN-52 사용하기 (RN52 아두이노 블루투스 스피커)

데이빗 2016-03-18 (금) 09:30 8년전 14053  

요즘 칩셋 하나에 모든 기능이 다 들어가 있는 SOC가 많이 나오고 있습니다.

이를 따라가듯 블루투스를 메인으로 추가적인 기능을 탑재한 칩이 나왔습니다.

바로 RN 52라는 칩입니다.

특징

Buetooth 3.0을 기반으로 2.1+EDR, 1.2, 1.1과도 호환이 가능합니다.

GPIO 핀과 UART핀이 있어 외부에서 제어가 용이합니다.

A2DP, AVRCP, HFP/HSP, 그리고 SPP를 지원합니다.

또 iAP를 지원하기에 아이폰 / 맥에서도 작동이 가능합니다. 

16옴 스피커를 구동할 수 있는 앰프가 내장되어 있으며 S/PDIF나 I2S를 이용하여 외부 오디오 코덱을 사용할 수 있습니다.

RoHS, FCC, ICS, CE 인증을 받았습니다.

2채널의 오디로 스트리밍을 지원하며 스테레오 헤드셋 사용이 가능합니다.

마이크도 사용이 가능하며 이를 이용하여 무선 이어폰등을 만들 수 있습니다.


사용하기

주요 핀들에 대해 먼저 설명하도록 하겠습니다.
브레이크아웃 보드 기준입니다.

 핀 이름

기능 

기타 

 3.3V (VCC)

 전원부 +를 입력해주는 부분입니다.

 3 ~ 3.6V 입력 가능

 PWR_EN

 초기 구동 핀

 HIGH 입력시 보드 동작 시작

 GND

 전원부 -를 입력해주는 부분입니다.

 

 UART_RX

 UART 통신 RX핀

 연결할 대상의 TX에 연결

 UART_TX

 UART 통신 TX핀

 연결할 대상의 RX에 연결

 GPIO9

 커맨드 모드 선택 핀

 LOW 입력시 커맨드 모드로 동작

 SPK_L+

 스피커 왼쪽 +

 

 SPK_L-

 스피커 왼쪽 -

 

 SPK_R+

 스피커 오른쪽 +

 

 SPK_R-

 스피커 오른쪽 -

 

 
기본 설정을 위해 커맨드 모드로 들어가 보도록 하겠습니다.

VCC와 GND를 연결해준 후 컴퓨터와 통신을 위해 RX, TX, GND를 연결해 줍니다. (VCC는 안해주셔도 됩니다.)

여기서 기본 baud가 115200이기에 FTDI를 사용하였습니다.
이때 GPIO7번과 GND를 연결해주면 baud를 9600으로 사용할 수 있습니다.

시리얼 통신을 위해 아두이노 IDE를 실행시킨 후 FTDI의 포트로 설정해 줍니다.

02cd46d8a607ca14b01d10ead866e139_1458259


시리얼 모니터(Ctrl + Shift + M)를 실행시킨 후 baud를 115200, 그리고 캐리지 리턴을 추가해 줍니다.

02cd46d8a607ca14b01d10ead866e139_1458259


그리고 GPIO9번과 GND를 연결해 줍니다.

그러면 시리얼 모니터에 아래와 같이 CMD라는 글자가 뜰 것입니다.

이는 커맨드모드라는 뜻이며 여기서 나가고 싶을 경우 GND와의 연결을 제거해 주시면 됩니다.

이때에는 END가 뜰 것입니다.


02cd46d8a607ca14b01d10ead866e139_1458259


다시 연결을 재개한 후 D를 입력해 보겠습니다.

기본적인 설정등을 보기 위한 명령어입니다.

 02cd46d8a607ca14b01d10ead866e139_1458259

<출력은 상이할 수 있습니다.>

블루투스 이름, 핀번호, 설정등등이 나옵니다.

일단 이대로 두고 스피커를 연결해 보도록 하겠습니다.

여기서는 0.5W 8옴 스피커를 사용하였습니다.

스피커를 각각 R+, R-, L+, L-에 연결해 줍니다.

이때 이어폰등 3극에 연결하실 분들은 -를 하나로 묶은 뒤 각각 +를, 그리고 -에 묶은 단자를 연결해 주시면 됩니다.

각 LED가 서로 왔다갔다 하면서 번갈아 켜지면 블루투스 연결 대기상태입니다.

확인한 후 블루투스를 연결해 줍니다.

휴대폰에서 음악 어플을 켠 후 블루투스로 출력을 선택합니다.

그 후 음악을 틀어줍니다.


나름 괜찮은 소리가 나옵니다.

브레드보드에 보면 스위치 2개가 달려있을 것입니다.

해당 스위치는 각각 GPIO12번과 GPIO10번에 연결되어 있습니다.

이 부분은 Volume up과 Volume down 핀으로 해당 부분이 LOW상태가 될 경우 작동합니다.

이를 사용하기 위해 아까 실행시켜 두었던 시리얼 모니터 창으로 다시 돌아갑니다.

그리고 S%,07 이라는 명령어를 전송합니다.

02cd46d8a607ca14b01d10ead866e139_1458259


이 부분은 데이터시트를 보면 아래와 같이 나와 있습니다.

02cd46d8a607ca14b01d10ead866e139_1458259


07은 모든 기능을 활성화 시키는 것을 의미합니다.

그러면 GPIO에 스위치를 연결하여 기능등을 사용할 수 있습니다.

각 핀별 기능은 다음과 같습니다.

 GPIO 5

 소리 증가

 GPIO 10

 소리 감소

 GPIO 11

 이전곡

 GPIO 12 

 다음곡

 GPIO 13

 재생 / 일시정지 


소리 증가와 감소는 RN-52에 대하여 동작하며(대상 기기의 소리를 줄이지 않음) 11, 12, 13번은 대상 기기에 대해 동작합니다.


SPP(시리얼 통신)

이제 블루투스를 사용하는 이유중 하나인 SPP를 사용해 보도록 하겠습니다.

SPP는 주로 데이터를 주고받는데 쓰이며 아두이노에서 센서값을 전달하거나 휴대폰으로 제어할 때 많이 사용됩니다.

설정을 2가지 바꿔 줍니다.

SD,02 - 어떤 형식으로 보여지는지를 설정합니다. 이를 SPP만 사용하도록(02) 해주어야지 SPP 어플에서 정상인식 했습니다.
SK,02 - 어떤 기능을 사용할지 설정합니다.

설정 변경 전
02cd46d8a607ca14b01d10ead866e139_1458259


설정 변경 후
02cd46d8a607ca14b01d10ead866e139_1458259


이제 SPP 어플을 이용하여 값을 주고받을 수 있습니다.
이때 커맨드 모드는 꺼져있어야 합니다.(GPIO9번이 GND에 연결되어 있으면 안됨)

GPIO 제어하기

이런 기능들 외에도 I@와 I& 명령어를 이용하여 각 GPIO의 input, output, high, low를 설정해줄 수 있습니다.

예를 들어 GPIO 5번에 LED를 물린 후 On / Off를 하고싶다면 아래와 같이 해주시면 됩니다.

1. 커맨드 모드에서 I@, I& 명령어(대문자 i)로 현재 값을 읽는다. 
초기 설정시 I@는 000C, I&는 3CB4로 되어 있습니다.

2. 해당 핀을 출력 모드(output)로 변경한다. 
이때 5번 포트를 On 하기 위해서 초기값에 | 0010을 해준 002C를 보냅니다.(I@,002C)

3. 해당 핀의 HIGH, LOW를 정해준다.
초기값이 3CB4이기에 이미 켜져있는 상태입니다. 이를 끄기 위해서는 & FFDF을 해준 3C94를 보냅니다.(I&,3C94)

input 모드인데 HIGh상태라면 풀업이 되어있는 상태를 뜻합니다. 이는 아두이노 pinMode에서 INPUT_PULLUP과 같습니다.


이로써 RN-52의 기능을 알아보았습니다.
정말 작은 칩이지만 이를 이용하여 할 수 있는 것은 무궁무진할 것 같습니다.

특히 단순한 GPIO 제어를 벗어나 스피커, 마이크 기능까지 있기에 다양한 용도로 사용이 가능할 것입니다.

이상입니다.





 

메카리워즈 Image Map


모바일 버전으로 보기