常常覺得被人家問問題是很幸福的事,如果能夠馬上知道答案,肯定了自己的實力;不知道答案時,在找解答的過程中,有時要花很多時間和心力,卻可以讓自己的觸角更深、更廣。最近有人問到以 Wiimote 和 Scratch 互動的問題,裡面提到了一個之前沒聽過的中介程式「wii2scratch」。在「雄 - Raspberry PI : 以 Scratch 控制 GPIO」這篇文章中曾提到,如果在Scratch 中啟用「遠端感應器」(Remote Sensor Connections) 的功能,我們就可以透過網路來交換「訊息」,wii2scratch 和「ScratchGPIO2」一樣,它們的角色都是在 TCP/UDP port 42001 監聽 client 端(Scratch)的需求,以 socket 的方式傳送資訊或是執行指定的動作。而 wii2scratch 所做的主要工作就是和 Wiimote 保持密切聨繫,將 Wiimote 感應器有異動的資料傳給 Scratch 使用,甚至更進一步去控制 Wiimote。多了 Wiimote 搖桿,可以讓 Scratch 更有趣。
安裝 wii2scratch
wii2scratch 是用 Java 開發的,其實和 Wiimote 通訊時,主要是使用 WiiuseJ 及 Wiiuse,正因為如此,它可以跨平臺使用,除了 Windows 以外,Linux
既然是 Java 的程式,我們必須先安裝好 JRE (Java Runtime Environment),版本的部份,至少要 JRE6 以上。Windows 可以在下面的網站中下載離線版來安裝:
有了 JRE6 以上,接下來到 wii2scratch 網站中下載 wii2scratch 安裝程式:
將下載回來的檔案解壓縮,並執行解開的安裝程式,建立自己修改一下安裝的路徑,以免之後要使用 wii2scratch 時得找半天。我把它安裝到「C:\Wii2Scratch」
其實,安裝程式就是將檔案放到指定的目錄而已,沒有建立任何的執行捷徑。
如果用的是 64位元的 Windows ,記得還要到 WiiuseJ 的網站中下載 64 位元的 dll 來取代 wii2scratch 所安裝的 32 位元 wiiuse.dll 和 WiiuseJ.dll,不然會無法正常執行。
64 位元 wiiuse.dll 和 WiiuseJ.dll 的下載網址如下:
因為網站中並沒有給 unix like 用的安裝程式,如果想在 Linux 中使用,可以先在 Windows 中先進行所謂的「安裝」,再將整個目錄複製到 unix like 中用即可。當然囉!我們也可以直接由網站的 source 裡下載。
啟動 wii2scratch
在 Windows 裡,執行 wii2scratch 的程式( Wii2Scratch.jar ) 前,有兩件事情要先完成:
- 啟動 Scratch ,並啟用「遠端感應器」(Remote Sensor Connections) 的功能。
- 將 Wiimote 和電腦的藍芽配對、連線。
當我們啟動 Scratch 後,先點選「偵測」的類別,再對準「偵測器」的積木按滑鼠右鍵,並點選「啟動遠端感應器」。
如果出現「Windows 安全性警告」的對話框,就按一下「解除封鎖」的按鈕。
「啟動遠端感應器」的動作一定要先完成,不然被 wii2scratch 的啟動程序檢查到時,會出現底下的錯誤訊息而結束:
Couldn't get I/O for the connection to Scratch.
Wiimote 和電腦連線的部份,如果是 Linux ,這個步驟可以省略,wii2scratch中使用到的「WiiuseJ」會幫忙連好;如果是 Windows 則不會自動連線,必須多一個手動的步驟,和 Wiimote 電子白板類似,使用 Microsoft Bluetooth Stack 的可以利用控制臺按部就班進行連線,或是利用像我的 WiimoteAutoConnect,或是 WiimoteConnect、WiiPair ......等工具來連線,如果不是使用 Microsoft Bluetooth Stack 的,也可以使用 BlueSoleil、Toshiba、WIDCOMM ...... 等。
準備工作完成,我們先開啟 Windows 的「命令列提示字元」,並切換至 wii2scratch 的安裝目錄。最後執行底下的指令:
如果一切順利,連線成功時,畫面會出現類似「Connected to wiimote [id 1]」的訊息,而且 Wiimote 把手會振動。
前面提過,wii2scratch 扮演的角色是幫我們傳遞 Wiimote 感應器或按鈕的狀態,因此,編寫程序時,用最多會是「控制」裡的「廣播......」、「當接收到......」,另外就是「偵測」裡的「......的偵測值」這些單元。
準備工作完成,我們先開啟 Windows 的「命令列提示字元」,並切換至 wii2scratch 的安裝目錄。最後執行底下的指令:
java -jar Wii2Scratch.jar
如果一切順利,連線成功時,畫面會出現類似「Connected to wiimote [id 1]」的訊息,而且 Wiimote 把手會振動。
編寫 Scratch 程序
前面提過,wii2scratch 扮演的角色是幫我們傳遞 Wiimote 感應器或按鈕的狀態,因此,編寫程序時,用最多會是「控制」裡的「廣播......」、「當接收到......」,另外就是「偵測」裡的「......的偵測值」這些單元。
到底有哪些偵測值可用?可以先「按遍」Wiimote 上的按鈕,它們就會出現在前述的那些控制單元中,例如:「Wii1ButtonA」、「Wii1ButtonAPressed」、「WiiButtonAReleased」......。
詳細的說明,當然是要查一下 wii2scratch 的 wiki 囉!
在「MessagesToWiiMote」也可看到 wii2scratch 接受哪些指令。
簡單了弄了一個陽春版的貓捉老鼠遊戲,按了 Wiimote 上的 A 鈕後開始玩,可以用方向鍵來控制貓,也可以用搖的方式來前進,捉到老鼠後,Wiimote 把手會振動。讓小小孩試玩了一下,還滿新鮮的。
也試著把之前的「Arduino : S4A 藍芽無線遙控科學魔法車」搭配 wii2scratch 和 Wiimote,直接利用 Wiimote 把手來遙控車子,滿好玩的,只是 S4A 和 HC-05 的藍芽反應有一點慢,可能還要調校一下程序。
詳細的說明,當然是要查一下 wii2scratch 的 wiki 囉!
在「MessagesToWiiMote」也可看到 wii2scratch 接受哪些指令。
簡單了弄了一個陽春版的貓捉老鼠遊戲,按了 Wiimote 上的 A 鈕後開始玩,可以用方向鍵來控制貓,也可以用搖的方式來前進,捉到老鼠後,Wiimote 把手會振動。讓小小孩試玩了一下,還滿新鮮的。
也試著把之前的「Arduino : S4A 藍芽無線遙控科學魔法車」搭配 wii2scratch 和 Wiimote,直接利用 Wiimote 把手來遙控車子,滿好玩的,只是 S4A 和 HC-05 的藍芽反應有一點慢,可能還要調校一下程序。
雄老師您好:
回覆刪除我就是跟您請教如何透過Wii2Scratch讓Scratch跟Wiimote連動者
非常感謝、非常感謝您將這兩份(另一份是Linux)資料上傳!
按照您的指導,目前我還是卡在
『 先開啟 Windows 的「命令列提示字元」,並切換至 wii2scratch 的安裝目錄。最後執行底下的指令: java -jar Wii2Scratch.jar 』這個關卡
還得再努力尋找一下...
雖然我還沒連結成功,不過已看到這篇大作,就迫不及待想跟您說聲
「謝謝」
您好: 我已試到開啟 Windows 的「命令列提示字元」視窗,視窗內除了上面兩行版本說明外,空一行之下,就只有一行 C:\Users\user> 沒有任何其它指令或文字
回覆刪除而您所謂切換至 wii2scratch 的安裝目錄。最後執行底下的指令: java -jar Wii2Scratch.jar ...
目前還是不知如何進行下去了?! 不好意思 再次打擾您了
您好:
刪除在猜想,您應該沒有接觸過 DOS。文中執行的指令您要自己用鍵盤輸入或是複製我文中的指令後貼上(需用到的指令都在圖中以箭頭標出了)。
早上按照您指示的方法,終於將Scratch 1.4 跟Wiimote連結成功!解決了困惑一段時日的問題。好高興,真謝謝您。
回覆刪除確實我是不屬於DOS的年代,應該說是有Windows之後,才開始接觸電腦的! 原來在Windows的狀態下,還存有執行DOS指令去作業的模式! 這是到目前為止,一直都沒機會去面對的。
最後,還是要跟您說聲:謝謝。
不好意思,wiimote和電腦的藍牙以連好,「Connected to wiimote [id 1]」的訊息,而且 Wiimote 把手會振動。
回覆刪除但wiimote按A鍵及上下搖動,小貓咪很鎮定的沒移動?老鼠也變成木頭人?
綠旗也點了!不曉得何故?