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;