CAVEDU EV3 藍牙系列教學文,最大也最不好寫一篇… 終於寫出來了。必須要先謝謝探奇邱老師的分享。我相信 App Inventor 2 應該很快就會發布 EV3 相關的控制元件,到時候要控制EV3就不用這麼辛苦了。
本程式的 .aia 原始檔請由此頁面下載: http://www.appinventor.tw/ev3_direct_
請先參考 Xander 的教學文, 文中提到這些文件是從樂高非正式管道流出的. 雖然還未正式公布, 但既然我們已經做出來了, 就分享吧. 請參考樂高官方文件的 Communication Developer Kit 文件。
Xander 自己也寫了一篇 TCP/IP 來直接控制EV3的教學。大陸網友也有使用 iOS 來直接控制EV3的文章。
什麼是Direct Command?為什麼需要它?
Direct Command 是樂高公司所提供的一種通訊格式。可以在機器人端不需要任何程式的情況下,只要通訊建立(USB、藍牙與 Wifi)之後對EV3主機發送位元陣列就能達到諸多控制效果。因此不限於智慧型手機,只要是能夠與樂高機器人無線通訊的方式(藍牙或Wifi),都能用這樣的架構來通訊。(請注意:NXT的無線通訊方式只有藍牙)
多謝了 Direct command, 只要與 EV3 藍牙配對之後,機器人端不需要任何程式就可以由手機遙控了。
這樣的好處在於您不需要維護兩份程式碼,有時候改來改去很容易改錯或頭暈(我常常這樣拿錯的來改,改到發脾氣…) 另外手機端與機器人端的程式應該都是不同的程式語言,這樣也會增加開發上的難度。
您可以使用本份程式的架構來修改成姿態控制(orientation sensor)、觸碰點控制、語音控制等等,讓您的機器人更豐富。
您可以參考我們很久之前寫過的[NxtDirectCommand的SetInputMode參數說明],就能略窺一二 Direct Command 的運作原理。請參考CAVEDU 在 App Inventor 中文教學網上的文章(同步刊載於Robocon 官網).
根據樂高官方文件,您可以使用 Direct Command 做到的重要功能有:
- 啟動/停止主機上指定檔名的程式。
- 控制馬達啟動、停止、轉向、電力與角度上限。
- 取得感測器值與狀態
- 其餘請參考官方文件
我可以用 App Inventor 的 Nxt 相關元件來控制樂高EV3機器人嗎?
不行!
因為 NXT 與 EV3 的韌體是完全不同的架構,Direct Command 的架構也完全不同。所以您無法使用 App Inventor 的 Nxt 相關元件來控制樂高EV3機器人。
來介紹程式吧
Designer
控制介面分成幾個元件:
1. 最上面的ListPicker 用來選擇藍牙裝置,並在挑選完畢之後試著連線。
2. 中間的 Slider 用來調整電力,也就是 speed 變數值。
3, 中間的五個按鈕就是控制機器人的各個動作,事實上就是馬達電力的不同組合。換言之,左右調整電力之後再點選[前進]按鈕的話,機器人前進的速度也會不一樣喔。
4. 最下方的[斷線]按鈕則是中斷藍牙連線
Blocks
來介紹程式吧,我們使用 start / stop 這兩個副程式來處理 Direct Command。它們就是本程式的靈魂。
以 start 副程式來說,它可接受兩個參數:port / speed。您可以看到每次呼叫它時,都會初始化一個名為 data 的空清單,以這個範例來說,每一個清單元素代表一個位元組長度的內容。格式為:(13, 0, 0, 0, 128, 0, 0, 165, 0, port , 129, speed , 166 ,0, port )。這當然需要您去查找官方文件中,哪一個欄位是代表哪一筆資料。在此我們是將 port 與 speed 做出來。透過 speed 變數就可以直接控制馬達。這樣的架構,當您要改用姿態控制、觸碰點控制、語音控制時,整體架構是不變的,差別只在於如何修改speed 變數值而已。
連線設定,這裡就比較簡單,設定ListPicker 內容為藍牙裝置配對清單,點選之後就呼叫 BluetoothClient元件去發起連線。
接下來是各個按鈕事件,由於相當類似我們就不一一介紹了。按下前進按鈕[Button_FORWARD] 會先呼叫 stop 副程式停下所有馬達動作之後再用 start 副程式讓馬達轉動。speed 變數值是由 Slider 的位置所決定的。
左轉與右轉
後退與停止
請問….如果發生了507或515錯誤時該如何排除?
您好, 這個錯誤碼是顯示在手機的畫面上嗎?