2014年9月21日 星期日

Scratch : wii2scratch + Wiimote 當小貓咪的控制(感應)器

2014年9月21日 星期日

常常覺得被人家問問題是很幸福的事,如果能夠馬上知道答案,肯定了自己的實力;不知道答案時,在找解答的過程中,有時要花很多時間和心力,卻可以讓自己的觸角更深、更廣。最近有人問到以 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 通訊時,主要是使用 WiiuseJWiiuse,正因為如此,它可以跨平臺使用,除了 Windows 以外,Linux 和 Mac OS 應該都可以使用。

既然是 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 ) 前,有兩件事情要先完成:
  1. 啟動 Scratch ,並啟用「遠端感應器」(Remote Sensor Connections) 的功能。
  2. 將 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 的安裝目錄。最後執行底下的指令:

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 的藍芽反應有一點慢,可能還要調校一下程序。

5 則留言:

  1. 雄老師您好:
    我就是跟您請教如何透過Wii2Scratch讓Scratch跟Wiimote連動者
    非常感謝、非常感謝您將這兩份(另一份是Linux)資料上傳!
    按照您的指導,目前我還是卡在
    『 先開啟 Windows 的「命令列提示字元」,並切換至 wii2scratch 的安裝目錄。最後執行底下的指令: java -jar Wii2Scratch.jar 』這個關卡
    還得再努力尋找一下...
    雖然我還沒連結成功,不過已看到這篇大作,就迫不及待想跟您說聲
    「謝謝」

    回覆刪除
  2. 您好: 我已試到開啟 Windows 的「命令列提示字元」視窗,視窗內除了上面兩行版本說明外,空一行之下,就只有一行 C:\Users\user> 沒有任何其它指令或文字
    而您所謂切換至 wii2scratch 的安裝目錄。最後執行底下的指令: java -jar Wii2Scratch.jar ...
    目前還是不知如何進行下去了?! 不好意思 再次打擾您了

    回覆刪除
    回覆
    1. 您好:
      在猜想,您應該沒有接觸過 DOS。文中執行的指令您要自己用鍵盤輸入或是複製我文中的指令後貼上(需用到的指令都在圖中以箭頭標出了)。

      刪除
  3. 早上按照您指示的方法,終於將Scratch 1.4 跟Wiimote連結成功!解決了困惑一段時日的問題。好高興,真謝謝您。
    確實我是不屬於DOS的年代,應該說是有Windows之後,才開始接觸電腦的! 原來在Windows的狀態下,還存有執行DOS指令去作業的模式! 這是到目前為止,一直都沒機會去面對的。
    最後,還是要跟您說聲:謝謝。

    回覆刪除
  4. 不好意思,wiimote和電腦的藍牙以連好,「Connected to wiimote [id 1]」的訊息,而且 Wiimote 把手會振動。
    但wiimote按A鍵及上下搖動,小貓咪很鎮定的沒移動?老鼠也變成木頭人?
    綠旗也點了!不曉得何故?

    回覆刪除

 
雄::gsyan © 2009. Design by Pocket