2010년 6월 16일 수요일

mbed에 블루투스 모듈 연결 (Bluetooth interface for mbed)

mbed 에 블루투스를 추가해 보았다.
이번에 사용한 모듈은 myBleutooth-EX (27,100원) 라는 것으로 디바이스마트에서 구입하였다.
SPP를 지원하고 별다른 설정 없이 매우 쉽게 사용할 수 있다. 단 모듈에 연결하는 시리얼의 통신속도가 고정되어 있어 구입할 때 자신이 사용할 속도에 맞춰 구입해야 한다. 여기서는 모듈을 구입하러 갔을 때 38.4K밖에 재고가 없어 선택의 여지가 없었다.
 

CTS/RTS를 사용해서 플로우 컨트롤을 할 수도 있지만 그건 옵션이고 위의 5개 핀(Vcc, GND, TxD, RxD, RST)만 연결해주면 된다.



mbed 모듈로 자체적으로 USB시리얼을 지원하고 그 이외에 추가 시리얼포트를 가지고 있기 때문에 사용하기 매우 편리하다.


둘 다 2.54 피치의 핀헤더이기 때문에 만능기판에 와이어로 간단하게 연결해 주었다.


mbed 보드에서 USB 시리얼 <-> 블루투스 모듈에 연결된 시리얼 포트간에 서로 입력받은 데이터를 상대방에게 포워딩 해 주는 간단한 예제 프로그램을 만들어주면 바로 동작을 테스트 해 볼 수 있다.

#include "mbed.h"

Serial pc(USBTX, USBRX);
Serial bt(p28, p27);

int main() {
    char buf[256];
   
    bt.baud(38400);
   
    while(1) {
        if (pc.readable()) {
            bt.putc(pc.getc());
        }
   
        if (bt.readable()) {
            pc.putc(bt.getc());
        }
    }
}


mbed.org에서 IDE로 가서 위의 소스코드를 입력한다.


입력이 끝나면 Compile 버튼을 눌러 프로젝트를 빌드한다.

성공적으로 빌드가 끝나면 위와 같이 바이너리 파일이 생성되고 바로 컴퓨터로 다운받게 된다.

바이너리 파일의 이름을 지정하고 저장해주면 된다.


파일을 저장한 다음 mbed 보드를 USB포트에 연결하면 컴퓨터에 MBED라는 USB플래쉬 디스크가 만들어진다. 방금 다운한 바이너리 파일을 이 디스크에 복사해주면 된다. 복사가 끝나고 mbed 보드의 RESET 버튼을 눌러주면 가장 최근에 복사된 바이너리 파일이 mbed보드의 NXP 프로세서 프로그램 플래쉬로 복사되고 바로 실행된다. (별도의 플래쉬 라이팅 프로그램이 필요없어 매우 편리하다.)

단 테스트를 하기 전에 mbed보드에 전원을 연결하고 테스트 컴퓨터와 myBluetooth-EX 모듈간에 페어링을 해 줘야 한다. 컴퓨터와 디바이스간 페어링은 처음에 한번만 해 주면 이후에는 다시 할 필요가 없다. 아래는 맥에서 페어링 하는 예제이다.




테스팅 하는 구성은 다음과 같다.

컴퓨터에서 2개의 시리얼 터미널 프로그램을 실행시킨다.

첫번째 터미널은 블루투스 모듈과 SPP로 연결시킨다. 위에서 블루투스 모듈과 페어링 되면서 가상 시리얼 포트가 생성되었기 때문에 터미널 설정의 포트에 보면 myBluetooth-EX 가상포트가 보인다.


설정을 마치고 Connect 버튼을 눌러주면 블루투스 모듈과 커넥션을 만들기 위한 잠깐의 딜레이 후에 연결된걸 볼 수 있다.

두번째 터미널은 USB 시리얼 포트를 통해 mbed와 연결해 준다. mbed가 USB로 연결되면 usb serial 포트가 보이게 된다. 참고로 mbed의 USB 시리얼포트의 디폴트 통신속도는 9600 bps이다.

연결된 상태의 동작 예제이다. 위의 화면에서 왼쪽 터미널은 블루투스로 연결되었고 오른쪽은 USB 시리얼로 연결되었다. 각각 왼쪽 터미널에서 'bbb'를 눌렀고 오른쪽 터미널에서 'aaa'를 눌렀을 때 화면이다. 각각 상대방 쪽으로 데이터가 제대로 전송된 걸 확인할 수 있다.

다음번엔 Wiznet의 지원을 받아 임베디드 WLAN 모듈인 WIZ610wi를 연동시켜 보도록 하겠다.

댓글 4개:

  1. 비밀 댓글 입니다.

    답글삭제
  2. @Anonymous - 2010/07/01 18:15
    ATMEGA 128 모듈과 연결하는 경우에 기본적으로 Vcc, GND, TxD, RxD만 연결해주면 됩니다. 좀 더 확실하게 해 주고 싶으면 AVR의 reset 핀을 저 모듈의 RST에 연결시켜 주면 AVR이 리셋될 때 블투모듈도 같이 리셋되게 해줄수 있구요.



    가지고 계신 AVR보드 사진이나 자료를 보여주시면 좀 더 자세히 설명해 드릴 수 있을거 같습니다.

    답글삭제
  3. 비밀 댓글 입니다.

    답글삭제
  4. @Anonymous - 2010/07/19 15:01
    128보드의 Tx, Rx, GND는 블투모듈에 연결해주고 128보드의 Vcc를 레귤레이터에 연결해서 레귤레이터 출력을 블투모듈의 Vcc에 연결해주면 됩니다.



    128 블투모듈

    ------ -------

    Tx - (옵션으로 저항 연결) - Rx

    Rx ------------------ Tx

    GND ------------------ GND

    Vcc - 3.3V 레귤레이터 - Vcc



    그리고 블투모듈의 Tx, Rx가 아마도 5V tolerable일거 같긴한데 좀 더 안전하게 해 주려면 128 Tx와 블투 Rx사이에는 http://www.makingthings.com/documentation/how-to/scale-a-5v-signal-to-3.3v 이렇게 저항을 연결해 주면 됩니다.

    답글삭제