2008年4月3日 星期四

用藍牙dongle和樂高(LEGO)機器人Mindstorms NXT連線

前言

自從結婚後,除了工作或日常使用需要之外,已經逐漸少碰各種新奇的電腦軟硬體了。

藍牙(或稱藍芽,從英文Bluetooth直接翻譯的話,藍牙是比較正確的說法)是一種電腦和周邊無線連接的標準。聽過這名詞也有數年的時間了,一般常見的就是用它來連接滑鼠、鍵盤、手機、耳機等,不過從來也沒想到要去"玩"它。

起因

一般來說,玩樂高積木是屬於美感創造的過程,可以訓練我們的右腦。但是樂高積木有幾個系列卻是和機械原理、機器人、程式設計相關的,包含邏輯機械推理,可以訓練我們的左腦,我想拿來和我兒子玩,同時訓練他的左右腦。

目前版本的樂高機器人已經是第二代了,稱為Mindstorms NXT(底下簡稱NXT)。隨著科技進步,第二代機器人有了不少改進的地方,例如感測裝置的多樣化、採用精簡指令中央處理單元ARM的運算核心、圖型化程式介面,還有這篇文章的主角 - 藍牙無線連接能力。

我目前使用中的電腦卻都不具備藍牙連線能力,一年多來都是靠USB連接NXT。最近一時興起,想說這麼久以來還不知道NXT的藍牙功能如何,雖然NXT出現不久後,就有看到疑似抱怨的文章說,NXT的藍牙相容性不佳。但經過這一陣子,我理所當然想問題應該都解決了吧!

於是,就在沒仔細作功課的狀況下,去買了一支USB介面的藍牙傳輸器回來。不過買的當時還是有特別挑選過,不敢買太便宜的,就買了支400元而且造型超薄,又號稱具有最新藍牙功能的傳輸器,想說該不會這麼倒楣,就是這支和NXT不相容吧!

不料,心存僥倖的結果再次得到懲罰。雖然隨傳輸器所附的驅動程式很順利裝上,也可以順利和NXT取得連線,但是進入NXT的程式設計軟體(NXT-G)卻怎樣都無法和NXT連線。

問題分析

用傳輸器本身附的程式可以連線,用NXT-G卻不行,怎麼辦?當然就是請出無所不知的google老師來好好的作功課了。

結果這一找,才發現原來藍牙的相容性問題這麼多呀!不只樂高有,很多手機、耳機的藍牙也是問題百出,原因不是出在硬體本身,而是NXT-G和藍牙驅動程式的相容性問題。

原來,藍牙雖然已經發展了這麼多年,有個部份卻一直沒有統一的標準,就是應用程式和驅動程式間有一個所謂的藍牙堆疊(Bluetooth stacks)的部份。目前這部份是三國鼎立,主要有三個標準 - Windows XP SP2內建、Widcomm、Bluesoleil。根據樂高官網上記載,NXT只相容於Windows XP SP2內建和Widcomm的藍牙堆疊,Bluesoleil並不支援。

如果沒仔細想,可能覺得問題似乎不大。但是要知道:
1. 微軟並沒有為藍牙的支援設定認證的標準,也就是說,在驅動程式和應用程式之間,是沒有一套公認的介面標準的,也沒有任何的認證機制。Windows對於藍牙的支援要從XP SP2才勉強算有,而且不是強制的標準,支援的硬體又少,以現在來說也有些過時,已經很久沒有更新了。根據眾多網路看到的意見,效能和功能都有不少問題。
2. Widcomm的問題是這家公司後來被Broadcom買下來,除非製造商交錢買license,否則都會被列入不支援的名單。然而Broadcom自己也賣藍牙晶片,基於商場競爭的顧慮,大部分其他公司的藍牙晶片不會考慮搭配Widcomm的驅動程式出貨。

所以,在市面上買到的藍牙傳輸器,有很高的機率所附的驅動程式是Bluesoleil,而且更慘的是你得要買回家安裝後才知道。

其實並不是Bluesoleil不好,事實上它的介面還滿好用的,而且和硬體間的運作也沒問題,提供的功能也完整,甚至有比較厲害的玩家透過自己寫的程式,用Bluesoleil和NXT的確是可以溝通的。
問題只在於,NXT-G為了不知名的原因就是不支援Bluesoleil,即使官網論壇上已經累積了許多使用者的報怨,樂高公司對此卻沒有任何回應。

這就是為什麼會有這麼多人反應,樂高機器人NXT藍牙連線有問題。

解決之道

從以上的問題原因分析我們知道,癥結並不在於硬體之間無法溝通,而在於NXT-G樂高機器人的圖形化程式設計軟體只支援Windows XP SP2和Widcomm兩種驅動程式的藍牙堆疊。所以要解決這個問題,可能的幾個方法如下:

1. 買一個附有
Widcomm或支援Windows XP SP2藍牙驅動程式的傳輸器。但是產品包裝上都不會註明,只能靠運氣。再不然就是搜尋網上使用者的意見,買別人說沒問題的傳輸器。除了不見得買得到相同的之外,還是有一定的風險,因為即使是相同的產品,有可能因為時間或區域不同而附上不同的驅動程式。

2. 用所買的傳輸器配合Windows XP SP2的驅動程式。但是支援的傳輸器種類很少,大部分都無法安裝。有人試著修改使其支援更多的傳輸器,如果你有興趣可以試試看。但據說微軟的驅動程式效能功能均不佳,所以我還沒試過,只是把它當作備用的解決方案。

3. 用所買的傳輸器配合Widcomm的驅動程式。這是初步看來最可行的方法了。但實際上,卻還是有它困難的部份須要克服:

a. 之前提到過,基於商業因素,雖然技術上Widcomm要配合各家的藍牙傳輸器不是問題,但實際上,Widcomm本身設下重重阻礙,故意不支援別家的藍牙傳輸器。google老師雖然提示了許多破解的方法,但是你會發現還是無法使用,也有許多的人反應了同樣的情形。

b. 原來最大量能夠找到的破解方法,是一支WidcommLicensePatcher的程式,藉由修改授權硬體的列表檔案,使得Widcomm在安裝時,認為你的硬體也在支援之列。很不幸的
WidcommLicensePatcher在不同地區版本的Windows XP有可能會遇到問題(似乎是因為語言不同造成的),而我所找到的,都無法在中文正體版本中正常使用。

c. 另外有一個比較不為人知的破解方法,步驟較為麻煩,而且只能用在5.1.0.1100(非最新的版本)或之前的版本,是用一個Widcomm_patcher_v2的程式在安裝完Widcomm後重開機進入安全模式,更改驅動程式來避過硬體檢查的程式碼,這個方法就沒有作業系統語系的問題了。

結語

經過三個整天的奮鬥,終於順利讓我的藍牙傳輸器可以在NXT-G中使用了。其中還牽涉到幾個瑣碎的關鍵並未在文中提及,如果你的條件和我都一樣卻還是無法成功,那麼請你仔細閱讀破解檔中所附的說明文件,特別是有關這三個部份:
1. 關閉Windows XP SP2的藍牙支援。
2. 確定在安裝Widcomm前已經反安裝所有的藍牙相關驅動程式。
3. 找出硬體傳輸器的Vendor ID和Device ID,並且確定它們出現在你找到的Widcomm驅動程式的btwusb.inf中,否則須手動修改。

此外,
Widcomm_patcher_v2的破解方法只能用在Windows XP SP2 32位元的作業系統,不支援Windows Vista。

2 則留言:

匿名 提到...

去Y拍上找D-LINK的藍牙,一個一百元有找,用的是SP2內建的驅動程式,就不用搞這麼久了!

林景智慧工程研究室 提到...

謝謝你提供的資訊,有機會再買的話就來買D-Link :)
當初只大約知道相容性是個問題,所以就想說買貴一點的應該比較好吧?不料反而想錯了方向 Orz