CAVEDU EV3 藍牙系列教學文,最大也最不好寫一篇… 終於寫出來了。必須要先謝謝探奇邱老師的分享。我相信 App Inventor 2 應該很快就會發布 EV3 相關的控制元件,到時候要控制EV3就不用這麼辛苦了。 本程式的 .aia 原始檔與 Lego 技術文件請由本頁面最末下載 請先參考 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 做到的重要功能有:
[slideshare id=36179584&doc=legomindstormsev3communicationdeveloperkit-140622235723-phpapp01&type=d] 我可以用 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 的位置所決定的。 左轉與右轉 後退與停止 |