ASH84

Software Engineer/Developer, co-founder of Payhere. Ex-Banksalad. Intereseted in iteroperability, bootstrap company, writting.

[C#] Bluetooth Communication in Black Jack phone(블랙잭에서 블루투스 이용)

created:2008-12-22
updated:2017-03-28
edit

블랙잭 폰에서(블랙잭 1) 블루투스를 이용한 프로그램 개발.

주의사항
– 기존의 PC 환경과는 다르게 SerialPort class를 통한 연결은 어려울 뿐만 아니라, 잘 되지가 않는다. 때문에 C# 으로 개발하기 위해서는 기존의 SerialPort 방식과는 다른 방식을 사용해야 한다.

*라이브러리 : InTheHand *

InTheHand 는 이동성(mobility)를 위한 .NET Component를 제공하는데, 무료로 다운 받아서 사용할수 있고, 현재는 2.2 버전까지 Release가 되어 있다. 또한 설치를 하면, 자동으로 샘플코드 등을 볼수가 있기 때문에 빠르고 쉽게 개발 할 수가 있다. 윈도우 모바일에서의 적외선 통신, 블루투스 통신등을 지원하는 라이브러리 뿐만 아니라, 다양한 라이브러리가 있으며, 그에대한 설명또한 MSDN처럼 잘 되어 있다. Link : http://inthehand.com/

![](http://ash84.net/wp-content/uploads/1/494f0a00e8d23B2.jpg)
Library

1. 블루투스 기기 탐색(Discovery Devices)

///

/// SDP 프로토콜을 통해서 주변의 디바이스 정보를 수집
///

BluetoothDeviceInfo[] bluetoothDeviceInfo;

///

/// 블루투스 클라이언트 정보
///

private BluetoothClient bluetoothClient;

///

/// 서비스 정의: 현재는시리얼포트 서비스만 지원한다.
///

private Guid service = BluetoothService.SerialPort;

///

/// BluetoothClient.GetStream()과 연결할 NetworkStream
///

NetworkStream peer;

public void Discovery_Devices()
{

BluetoothRadio.PrimaryRadio.Mode = RadioMode.Discoverable; //블루투스 모드를 Discoverable 모드로 전환

bluetoothClient = new BluetoothClient();

Cursor.Current = Cursors.WaitCursor; //검색하는 동안 기다리는 커서로 변경

bluetoothDeviceInfo = bluetoothClient.DiscoverDevices(4); //찾을 최대의 디바이스 수

// 찾은 디바이스 이름과 주소를 콤보박스에 명시
comboBoxDevices.DataSource = bluetoothDeviceInfo;
comboBox
Devices.DisplayMember = “DeviceName”;
comboBoxDevices.ValueMember = “DeviceAddress”;
comboBox
Devices.Focus();

//커서를 원래대로
Cursor.Current = Cursors.Default;

}

*2. 선택한 디바이스와 연결(Connect)
*

if (bluetoothClient.Connected false)
{
//선택한 디바이스 주소와 연결하려는 서비스를 기반으로 접속
bluetoothClient.Connect(new BluetoothEndPoint((BluetoothAddress)comboBox_Devices.SelectedValue, service));

if (bluetoothClient.Connected true)
{
//NetworkStream 을 GetStream() 과 연결함으로써 시리얼포트에서 데이터를 읽어온다.
peer = this.bluetoothClient.GetStream();

//Receive Thread 시작
th = new Thread(new ThreadStart(Receive));
th.Start();

}

}

}

3. 시리얼포트 서비스를 이용해서 데이터 받기

위와 같은 방식으로 특정 서비스에 해당하는 기기를 찾을수도 있고, 또한 연결할 수도 있다. 본 포스팅에서는 가장 많이 사용하는 시리얼포트 서비스에(Serial Port Service)에 대해서 윈도우 모바일 상에서 어떻게 다른 기기로 부터 데이터를 받을거 인가 하는 문제에 대한 방법을 제시했다. 더 많은 자료는 IntheHand를 참고 하시길 바란다.

Exception(예외)

위의 코드를 적용할때, 윈도우 모바일상에서 코딩시, 스레드를 작동시킬경우,

“Control.Invoke는 별도 스레드에 만들어진 컨트롤과 상호 작용하는 데 사용해야 합니다”

라는 예외가 발생할 것입니다. 이럴경우에는, http://drkein.tistory.com/69 이 부분을 참고해 주시기 바랍니다.

그 밖에 블루투스를 이용한 채팅이나, 블루투스 연결을 기다리는 부분에 대해서 좀더 알고 싶으시다면, 다음의 동영상을 보시면 많은 도움이 될것입니다. 프랑스 어이고, 화질이 별로 안좋긴 하지만, 그래두 많은 도움이 될것 입니다

494f10e1e2b54A5.wmv




 2009.11.09 참고

위의 글은 Windows Mobile 5. 즉, 블랙잭 1을 대상으로 프로그래밍을 했을때 IntheHand Component를 이용해서 블루투스 기기를 쉽게 개발시에 이용하는 방법에 대해서 기술해 놓은 내용이다. 하지만, Windows Mobile 6.0 부터는 MS에서 본격적으로 Sample Code를 통해서 제공하고 있기 때문에 그 내용을 보는것이 더 도움이 되리라 생각된다.


#bluetooth  #c#  #dev  #Serial Port  #블랙잭  #블랙잭에서 블루투스 이용하기  #블루투스  #윈도우 모바일  #윈도우 모바일 5  #프로그래밍  #프로그램개발