2011年12月9日星期五

Wiimote : 以 WiimoteAutoConnect 進行連線(2011.12.14更新)

2011年12月9日星期五
2009 年時我利用 C# 和 In The Hand 32feet.NET 中的 InTheHand.Net.Personal.dll [該 dll 檔案的授權方式為 Microsoft Public License (Ms-PL) ] ,寫了一個可以幫我們讓電腦透過藍芽和 Wiimote 連線的小工具 WiimoteAutoConnect 。程式沒多少行,但是省去了使用  MS Windows 內建的MS Bluetooth Stack 時必須先手動移除舊連線的紀錄,才能重新連線的麻煩,也順便加上了可以自訂的小功能,讓我們使用 Wiimote 電子白板時可以更輕鬆一點。
兩年過去,來到 2011 年,學校的班級電腦改用 Windows 7 64bit,不知何故,舊版的 InTheHand.Net.Personal.dll  在搜尋藍芽裝置時,找不到任何裝置。前一陣子我改用 WiiPair2 來連線,但是看到同事教室的 Windows XP 在用 WiimoteAutoConnect 時,找到 Wiimote 準備安裝 HID 的驅動程式時,可能因為安裝花費的時間較久,以致自動啟動座標軟體(Smoothboard) 變成是在 Wiimote 連好線之前,而造成錯誤,還要再手動執行該程式才能正常使用 Wiimote 電子白板。當初設計時有考慮同一支座標軟體可能會重覆執行,因此把在啟動前將已啟動的程序先終止,這部份功能似乎也沒有發揮作用(後來查了一下,原來是程式寫錯了,根本不會有作用)。為了解決前述兩個問題和 Windows 7 64 bit 的問題,我把已塵封兩年的 C# 程式碼再拿出來修改。

WiimoteAutoConnect V.2009

2009 的版本在 Windows 7 64 bit 中沒有作用的問題,到  32feet.NET 下載了 2011.06.10  v.3.2.609.0 的 InTheHand.Net.Personal.dll 後,重新編譯過,解決了。

WiimoteAutoConnect V.2011.12.04

Wiimote 連線後自動啟動自訂程式的部份,原來是用 sleep 的方式讓程式等五秒鐘,但是有個缺點,程式會好像卡住一樣,訊息沒更新,等候的時間也無法自訂。所以,在新版中,除了改用 timer 來判斷什麼時候啟動程式,設定的畫面也多了一個「等候幾秒後才自動執行上述程式」的選項,連線較順利的電腦可以設短一點,反之連線較慢的機器則可以設長一點,以避免 Wiimote 來不及連線的情形。在設定畫面的兩個按鈕中間也會出現倒數計時的效果。


可自訂的參數

WiimoteAutoConnect 可以設定的選項如下:
  • 「搜尋藍芽裝置的時間」:由於 Wiimote 在我們按完配對的紅色鈕或是 (1)(2) 按鈕後,只有大約 20 秒左右的等待連線的時間,而 Windows 這邊如果使用預設的藍芽裝置搜尋時間會耗掉不少時間,因此,設置了這個參數可以讓我們改變 Windows 去搜尋 Wiimote 的時間。我一般都是設成 2 或 3 秒就可以找到教室裡的 Wiimote 。
  • 「連線失敗,3秒後自動重試」:這個功能主要是讓程式和 Wiimote 連線失敗時可以自動再試著連線,這樣可以省下需要再按連線按鈕的時間。(Ver. 2011.12.13 以後的版本才有此功能)
  • 「連線成功後自動關閉本程式」:如果希望在找到 Wiimote 並完成藍芽的連線後,自動離開 WiimoteAutoConnect ,就勾選這個項目。
  • 「自動執行程式」:一般我們在將 Wiimote 和電腦連線完以後,會再啟動「座標軟體」,所以設了這個參數可以讓我們指定想要由 WiimoteAutoConnect 來自動啟動的程式路徑。
  • 「等候幾秒後才自動執行上述程式」:由於在安裝和 Wiimote 連線的驅動程式時,每臺電腦所會耗掉的時間並不同,因此提供此參數讓使用者可以自訂要幾秒鐘後才自動啟動指定的程式。

當我如果有設定或是修改過上述的四個選項後,「儲存設定值」的按鈕就會變成可按的狀態,如果想要保存目前的設定值,別忘了按一下哦!而這些設定值,Windows XP 會儲存在以下的資料夾中(xxxx 是Windows登入時的帳號名稱):
  • Documents And Settings\xxxx\Local Settings\Application Data\WiimoteAutoConnect

使用方法

由於 WiimoteAutoConnect 是使用 C# 開發的,並架構在 .Net Framework 2.0 上,所以,電腦必須有安裝 .Net Framework 2.0 以上。把 WiimoteAuotConnect.zip 下載後,解壓縮到想存放的資料夾後,即可使用。

  1. 插入藍芽傳輸器(Bluetooth Dongle)或是啟動藍芽功能。
  2. 啟動 WiimoteAutoConnect.exe 。
    如果是第一次使用,可以依個人需求,先設定前述的四個可自訂的選項。
  3. 按下 Wiimote 的配對鈕或是打開 Wiimote 的電源(使用外接電源者)。
  4. 按下 WiimoteAutoConnect 的「搜尋並連線」鈕。

如果電腦是第一次使用藍芽和 Wiimote 連線或是已很久沒連線時,由於 Wiimote 的裝置名稱「Nintendo RVL-CNT-01」需要透過系統去擷取並更新,會耗掉一些時間,可能需要執行兩次步驟 4 才能順利完成連線。基本上,在程式最下方的狀態列可以看到簡易的狀態。 

啟動後自動進行搜尋連線

2011.12.13 以後的版本可以在執行命後加上 「auto」的參數,這樣,程式一被啟動,會倒數三秒,然後自動進入搜尋藍芽裝置並連線的程序。 
設定的方法如下:
  • 為 WiimoteAutoConnect 建立捷徑
對準程式按滑鼠的右鍵後可以在桌面建立捷徑方便使用

  • 修改捷徑執行的內容,加上 「auto」的參數
對準捷徑按滑鼠右鍵,點選「內容」後,可以為程式加上參數

小記

  • 我買的第一個藍芽 Dongle ESS388 在 Windows XP 下原來無法使用 MS Bluetooth Stack 的,但是在 Windows 7 下居然有支援了。不過,也真是的,為什麼不連 XP 一起更新 driver !
  • 在 Windows 7 64 bit 下測試 ESS388 時發生一件怪事,利用 WiimoteAutoConnect 連線時,只看得到藍芽裝置搜尋結果中有 Wiimote , 卻一直無法連線。後來由控制臺中用手動的方式新增藍芽裝置連線成功,斷線再重新用 WiimoteAuoConnect 連線才正常運作。本來以為這種情形是因為 Windows 7 的關係,但是在 Windows 7 32bit 中卻有正常。原因待查,反正,如果有遇到類似情形,就先用手動的方式連一次 Wiimote 再試試囉!


程式下載

版權聲明

  • InTheHand.Net.Personal.dll 來自 32feet.NET ,版權歸  In The Hand。


相關文章


更新紀錄
  • 2011.12.14
    * 將連線失敗後是否自動重新試著連線列為可自訂的選項。
    * 修正在倒數計時時如果按下 "搜尋並連線" 鈕時,倒數的程序沒有停止的錯誤。
    * 把原來預設的藍芽裝置搜尋時間改為 2 秒 (其實我都設 1 秒),經過測試,在 Windows 7 64 bit 下,搜尋時間設太長,很容易超過 Wiimote 等待連線的時間。
  • 2011.12.13
    * 修改了連線的程序:先移除未連線的 Wiimote 後再重新搜尋藍芽裝置,以免明明 Wiimote 沒有進入準備連線狀態卻出現 HID 驅動安裝成功的假象。HID service 啟動後再重新搜尋一次藍芽裝置一秒鐘,以計算出正確的已連線 Wiimote 數。
    * 如果都沒有找到 Wiimote 或是連線失敗時,程式會等三秒鐘後自動再重新搜尋並連線。
    * 在 .exe 指令後如果加了一個 auto 的參數,程式在啟動後三秒就會自動按下 "搜尋並連線" 的按鈕。這部份可以先建一個本程式的捷徑,然後對準圖示按右鍵選[內容] 後,在指令的後面自己加,方便想再減少操作程序的人使用。
  • 2011.12.09
    * 將 InTheHand.Net.Personal.dll 的授權書 (InTheHand.Net.Personal.Dll.License.txt) 加入壓縮檔中。
  • 2011.12.04
    * InTheHand.Net.Personal.dll 更新, 改用 2011.06.10 的版本,可支援 Windows 7 64 bits 。
    * 修改連線成功後,啟動自訂程式的程序,會先清除已啟動過的,等候自訂的秒數後才啟動程式。
    * 修改版面配置,加入啟動自訂程式前的倒數計時畫面。
  • 2009.05
    * 草創


10 意見:

林延財 提到...

您好:

我是新北市光華國小的老師,最近也是為了連線windows7,找了很多方法,我遇到的問題是已經找到wiimote,定位完後紅外線筆無法點選投影幕上的物件,不知您是否有遇到同樣的問題。
林延財

提到...

延財老師您好:
依您的描述,您應該是用了 Johnny Lee 的 Wiimote Whiteboard 座標軟體,它在 Windows 7 64 bit 會出現只能定位,卻無法控制滑鼠游的情形。
個人是使用 Smoothboard 0.4.6 ,沒有這樣的問題。您可以 google 一下,網路上還找得到。建議您用以下的關鍵字找:

smoothboard .zip

不然,只好用別的座標軟體。

林延財 提到...

您好:

  您好厲害,我是用whiteboard座標軟體,我再試試smoothboard看看。謝謝您。

山居隱 提到...

雄老師您好:

我是高雄市崇德國小的老師,
我的筆電內建藍芽,
作業系統是Vista,
wii在連線後四個藍燈就閃個不停,
雖然顯示連線,
但是wii還是沒有作用,
請問有什麼地方操作錯誤嗎?
謝謝您提供的資源。

林宏燁

提到...

宏燁老師您好:
如果您是使用 WiimoteAutoConnect 來進行藍芽線的,可以讓它再重新連一次(只啟動程式,Wiimote不動),確認一下是否己真的連線了。如果確實已連線,在啟動類似 WiimoteWhiteboard , Smoothboard ... 等座標軟體後,Wiimote 的燈號應該只剩下一個才對。
如果連線失敗,建議您將 Wiimote 電池關閉再重新依藍芽連的步驟重來應該就可以。

匿名 提到...

hello,

Thanks for you great job and effort.
I have a problem about using the WiimoteAutoConnect. As my Wii remote keep flashing, even it is connected.
And i cannot interact with either WiinRemote or GlovePIE.
So, am i missing anything, like Wii Remote Driver?

From HK

提到...

來自香港的朋友您好:
Wiimote 和電腦連線是靠 Blue tooth stack ,並不需要額外的 driver,我的 WiimoteAutoConecct 也不過是幫忙自動化而已,沒有它也是可以手動透過一般 blue tooth stack 的操作程序來完成連線的。
我在猜,您使用的 OS 應該是 Windows 7,因為當我修改 Wiimote Whiteboard 1.3 程式時,在 Windows 7 上遇過好幾次類似的情形,Wiimote 的四個 LED 一直閃爍,卻一直無法連線,連用手動的方式去操作 MS blue tooth stack 都無法連線。這種情形在 XP 比較不會。
建議您遇到這種情形時,把 Wiimote 電池(電源)拔掉,重接電源以後先以手動的方式試試。再不行就將電腦重新開機,Wiimote 關閉電源,都重開以後再試。以上,希望對能有所幫助。

山居隱 提到...

雄老師您好:

謝謝您的回覆,
我想請問紅外線led筆是否會影響接收效果?
我自製的紅外線led要很接近wii才感應得到光點,
螢幕上則完全沒反應,
tracking utilizaiton也是沒有反應,
或是wii和布幕的距離、
投影畫面的大小等,
是否都會影響呢?

目前卡在無法定位,因為wii完全感應不到紅外線燈~傷腦筋~
哪裡做錯了嗎?

謝謝您的回覆喔

林宏燁 敬上

提到...

宏燁老師您好:
紅外線 LED 其實有不同的波長的,去年底時我也曾買到不合用的,用相機都看得到,但是 Wiimote 只有在一公尺內時才感應得到。
距離、電池的電力及 LED 的波長都會影響到 Wiimote 是否能接收得到。那要買哪一種 LED 呢?詳細的數據我忘了,一般家電用遙控器用的那種IR LED 都可以在 10m 以內感應得到,另外一種判斷方法,通電時看得到有一個小紅點的這種 IR LED 是絕對不行(我就是不小心買到這種),它一般是給監視器當補光用的,波長不適合 Wiimote。
建議您可以先隨便拿一支遙控器測試一下 Wiimote,不過它按下時訊號通常不是恆亮,是閃爍的,反正只是測試而己。

山居隱 提到...

雄老師您好,
謝謝您的回覆,
我確實是買了小紅點的led,
會重新買過後再試試,
謝謝您的協助。

林宏燁敬上

 
© 2009. Design by Pocket