2007年10月3日 星期三

wiimote與PC自動連線

PC上用wiimote玩了許久的全民打棒球之後,上禮拜在終於玩到了別人的wii實機. 原來wiimote跟wii本尊的配對是那麼地簡單 .

人就是常常喜歡跟別人比來比去 ,在沒有玩到wii的時候 ,總覺得在玩game之前先用滑鼠設定一下也還不會太麻煩 ,但一碰到wii之後 .心裡面的"訪談製造機"馬上就跳出一句"wii能, PC為什麼不能 ?"

wii 可以 ,PC當然也要可以啦. 這應該沒什麼困難的吧.

1/10/08 經反應sdk下載點失效後, sdk下載點修改到簡體中文官網

我的藍芽棒用的是BlueSoleil ,所以就把這個字打給Google去查. 不用一秒鐘Google就跳出來說GlovePIE配上BlueSoleil本身就可以自動連結, 但是我怎麼試也試不出來. 作者也沒講要如何啟動這功能.

一時找不到現成的那就自己來動手吧 ,二話不說 ,馬上就去IVT 官方網站下載SDK. 下載回來後就看一下API的文件準備開始自己寫個小工具......


結果搞半天都還搞不出什麼名堂. 程式都已經縮減成下面那樣只有五行了, 驅動程式還是一直回覆我系統錯誤



int main(int argc, char* argv[])
{
BOOL bResult;
DWORD dwResult;
bResult=BT_InitializeLibrary();
SDK_BtInquiry();
}

//
//


在絕望之際 ,只好再去求助Google了 ,結果IVT的官方論壇已經有人回覆說要換最新版的驅動程式就好了.回來再仔細看看, 也對, 人家SDK的檔名就註明了是供2.0版以上用的 ,我的驅動程式是1.4版的當然不太能用嘛.

那會不會......GlovePIE也是換新版驅動就好了呢 ?這種小問題當然是馬上動手做實驗就知道囉.

1分鐘
2分鐘
3分鐘過去

還真的咧 ,只要換上官網上最新的驅動程式 ,而且照著貓星球先配對過一次, 變成下面這種畫面.

bluesoleil


只要在GlovePIE有執行的狀態, 而且沒有刪除wiimote的資料. 我們在任何時候同時按著wiimote的1,2二鍵就可以自動與PC連結了.

最棒的是GlovePIE 後面可以加上-號和一個檔名 ,像是 GlovePIE -mouse.pie 這樣

那我們只要在啟動裡放進上面的指令, 自己在客廳組的HTPC就可以只用把遙控器和其他的無線鍵盤滑鼠都拿掉了. 一支wiimote加上GlovePIE再配上2.x的BlueSoleil就輕鬆將它都取代了.不管是當家庭劇院播放器或是拿來玩體感遊戲都很適用.

相關閱讀:
使用 wii 手把 來玩全民打棒球

2 則留言:

DucK-QuacK 提到...

因為官方sdk的下載連結已經失效很久了,也不知道其他什麼地方能取得sdk。
請問哪裡可以取得您所寫完整的自動連接wiimote的程式碼?又或者是不是能直接向您索取已編譯的可執行檔?

武功卓越 提到...

To Quack:
我剛才發現簡中官網還可以下載. 裡面就有一個完整的command line範例. 而且很容易就可以整合到MFC的gui程式. 下面是我寫的一個小例子之片斷.另外也可以註冊一個call back function 然後每隔20~30秒下一個inquery的command.


void CBtguiDlg::OnWait()
{
char buffer[250];
// TODO: Add your control notification handler code here
SetDlgItemText(IDC_STATIC1,"開始");
MainInit();
SetDlgItemText(IDC_STATIC1,"初始完成");


GetDlgItemText (IDC_EDIT1,buffer,3);
g_targetBdAddr[5]=HexToI(buffer);
GetDlgItemText (IDC_EDIT2,buffer,3);
g_targetBdAddr[4]=HexToI(buffer);
GetDlgItemText (IDC_EDIT3,buffer,3);
g_targetBdAddr[3]=HexToI(buffer);
GetDlgItemText (IDC_EDIT4,buffer,3);
g_targetBdAddr[2]=HexToI(buffer);
GetDlgItemText (IDC_EDIT5,buffer,3);
g_targetBdAddr[1]=HexToI(buffer);
GetDlgItemText (IDC_EDIT6,buffer,3);
g_targetBdAddr[0]=HexToI(buffer);

sprintf (buffer,"藍芽裝置位址:%2x:%2x:%2x:%2x:%2x:%2x",g_targetBdAddr[5],g_targetBdAddr[4],g_targetBdAddr[3],g_targetBdAddr[2],g_targetBdAddr[1],g_targetBdAddr[0]);
SetDlgItemText(IDC_STATIC1,buffer);
if (GetDlgItemInt(IDC_EDITPAIR)) {
SetDlgItemText(IDC_STATIC1,"開始配對");
GetDlgItemText (IDC_EDITPIN,buffer,8);
SDK_BtPair(buffer);
SetDlgItemText(IDC_STATIC1,"配對完成");
}

if (SDK_BtConnectService() !=0)
return;
SetDlgItemText(IDC_STATIC1,"連結完成");
CheckActive(HandleBTCOM);

}

執行檔其實IVT 的driver裝好就有了, 打下列指令 (00:1A:E9:38:A7:F8 改成您wiimote的address即可) 效果與前面的程式片段相同.


"C:\Program Files\IVT Corporation\BlueSoleil\gprs.exe" "00:1A:E9:38:A7:F8" 4388

張貼留言