WindowsでBluetooth通信

Windows上で最も簡単にBluetooth通信を行う方法は、BlueSoleil等のドライバソフトウェアを使い、Windows APIからデータを送受信することである。
BlueSoleil等のソフトウェアは、Bluetooth通信に必要な認証やデバイスの探索、ペアリングの設定を行う。
また、Bluetoothのポートをシリアルポートであるかのように作成するため、Bluetooth通信をするコントロールはUSBやCOMポートを使うようにプログラミングすることができる。


BlueSoleilを使ってBluetoothのペアリングを設定するには、ツールバーのマイBluetoothからBluetoothサーチを選択する。



もし隠れていないBluetoothデバイスが存在すれば、デバイス一覧に発見されたデバイスが表示される。
(この段階では、デバイス名はMACアドレスで表示される)



ペアリングを組むためにペアデバイスを選ぶ。



デバイスごとのキーを入力すると、ペアリングが完了する。







また、他にもコントロールパネルのBluetoothデバイスから設定する方法もある。




コントロールプログラムを書くには、Windows APIを利用する。
ポート解放のためにCreateFile()、データを受信するのにReadFile()、データを送信するのにWriteFile()関数をそれぞれ用いる。
windows APIを利用するには、例えばC言語ならwindows.hをインクルードすればよい。
CreateFileに設定するべきポート番号は、対象のBluetoothデバイス用に割り当てられたものを利用する。
以下に、それぞれのAPIを利用例を書く。


// #include <windows.h>

/*
 * port open
 */

char port[] = "COM3:";
CString portStr(port);
HANDLE hComm;

hComm = CreateFile(
	portStr,
	GENERIC_READ | GENERIC_WRITE,
	0,
	NULL,
	OPEN_EXISTING,
	FILE_ATTRIBUTE_NORMAL,
	NULL );
//---

/*
 * init baud rate
 */
//DCB dcb;
//dcb.BaudRate = CBR_38400;
//dcb.ByteSize = 8;
//dcb.Parity = NOPARITY;
//dcb.StopBits = ONESTOPBIT;
//if( !SetCommState( hComm, &dcb ) ) {
//	CloseHandle(hComm);
//	this->closeBT();
//	return;
//}

/*
 * init timeout range
 */
COMMTIMEOUTS timeout;
if( !GetCommTimeouts( hComm, &timeout ) ) {
	CloseHandle(hComm);
	return;
}
timeout.ReadIntervalTimeout = MAXDWORD;
timeout.ReadTotalTimeoutMultiplier = 500;
timeout.ReadTotalTimeoutConstant = 0;
timeout.WriteTotalTimeoutMultiplier = 50;
if( !SetCommTimeouts(hComm, &timeout) ) {
	CloseHandle(hComm);
	return;
}

// ハンドル確認
if( hComm == INVALID_HANDLE_VALUE ) {
	CloseHandle(hComm);
	return;
	//exit( 1 );
}

/*
 * read data from COMx
 */
unsigned char readbuff[100];
DWORD readSize;

if( !ReadFile(hComm, readbuff, 100, &readSize, NULL) ) {
	CloseHandle(hComm);
	return;
}

/*
 * send data to COMx
 */
if( !WriteFile(hComm, writebuff, 100, &readSize, NULL) ) {
	CloseHandle(hComm);
	return;
}

/*
 * close port as finalize
 */
CloseHandle(hComm);
 
return;