1 | | = サンプルアプリケーション = |
2 | | |
| 1 | = サンプルアプリケーションの実行 = |
| 2 | == サンプルプログラムのビルド・実行 == |
| 3 | === 実行形式とビルド方法 === |
| 4 | 本プラットフォームのアプリケーションは2つの形式で実行することができます。 |
| 5 | |
| 6 | * ダイナミックローダを使って動的にロードされて実行する |
| 7 | * ダイナミックローダを使わずスタンドアローンで実行する |
| 8 | |
| 9 | ==== 動的ローディング形式(ダイナミックローダ有り) ==== |
| 10 | 動的ローディング形式はダイナミックローダを使って、SDカードに入れた又はBluetooth等のシリアル通信で受信したアプリケーションのバイナリファイル(ELF形式)をロードして動的に実行する形式です。 |
| 11 | |
| 12 | この実行形式には、以下の特徴があります。 |
| 13 | |
| 14 | * EV3をリセットしなくても実行中のアプリケーションを動的に書き換えます |
| 15 | * アプリケーションが変更されてもBluetoothを再接続する必要がありません |
| 16 | * PCでアプリケーションのバイナリファイルをSDカードに書き込む手間を省略できます |
| 17 | * 複数のアプリケーションを同じSDカードに入れることができます |
| 18 | * 高速にコンパイルすることができます |
| 19 | * ローダとアプリケーションのインターフェスバージョン(PIL Version)を一致する必要があります |
| 20 | * ローダのPIL Versionが更新される場合、アプリケーションの再コンパイルが必要になります |
| 21 | * アプリケーションの最大サイズの制限があります(ローダの設定に依存、デフォルトは1MB) |
| 22 | * アプリケーションのカーネルオブジェクトの数の制限があります(ローダの設定に依存、デフォルトは以下) |
| 23 | * タスク 最大32個 |
| 24 | * セマフォ 最大16個 |
| 25 | * イベントフラグ 最大16個 |
| 26 | * ミューテックス 最大0個![TODO:] |
| 27 | |
| 28 | 動的ローディング形式を利用するために、アプリケーションのバイナリファイル(ELF形式)をビルドする必要があります。 |
| 29 | |
| 30 | 以下の手順でそのバイナリファイルを生成できます。 |
| 31 | |
| 32 | ① プラットフォームのルートディレクトリ(hrp2)に移動します |
| 33 | |
| 34 | ② アプリケーションのあるワークスペースに移動します |
| 35 | |
| 36 | * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します |
| 37 | |
| 38 | {{{ |
| 39 | $ cd workspace |
| 40 | }}} |
| 41 | ③ 「make mod=<アプリケーションのフォルダ名>」で動的ローディング用バイナリ(Module)をビルドします |
| 42 | |
| 43 | * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします |
| 44 | |
| 45 | {{{ |
| 46 | $ make mod=gyroboy |
| 47 | }}} |
| 48 | ④ ビルドが正常に終了すると、「app」という動的ローディング用バイナリが生成されます |
| 49 | |
| 50 | ダイナミックローダを利用して、以下の手順で生成されたアプリケーションのバイナリファイルをロードすることができます。 |
| 51 | |
| 52 | ① ローダをSDカードに入れていない場合、そのuImageをSDカードのルートフォルダにコピーします |
| 53 | |
| 54 | * デフォルトのローダのuImageは「sdcard/uImage」です |
| 55 | |
| 56 | ② SDカードをEV3に差し込んで、電源を入れてローダを実行します |
| 57 | |
| 58 | * ローダのGUIメニューが表示されたら起動は成功しました |
| 59 | |
| 60 | ③ ローダのメニューを使って以下の方式でアプリケーションをロードすることができます |
| 61 | |
| 62 | * SD card:SDカードに入れたアプリケーションをロードします。アプリケーションのバイナリファイルをSDカードの「/ev3rt/apps」というフォルダに入れる必要があります。 |
| 63 | * Bluetooth:Bluetoothでアプリケーションをロードします。「[http://dev.toppers.jp/#_Bluetooth%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%96%B9%E6%B3%95 Bluetoothの接続方法]」を参考してBluetoothを接続する必要があります。 |
| 64 | * Serial port 1:シリアルケーブルでアプリケーションをロードします。 |
| 65 | |
| 66 | ④ BluetoothまたはSerial port 1でロードする場合、ターミナルのZMODEM転送機能でアプリケーションのバイナリファイルを送信します |
| 67 | |
| 68 | [[Image(pic1.png)]] |
| 69 | |
| 70 | ⑤ アプリケーション実行中、戻るボタンを長押し(0.5秒程度)してアプリケーションを終了できます |
| 71 | |
| 72 | * アプリケーションを終了すると、ローダのメニューに戻ります。新しいアプリケーションをロードすることができます |
| 73 | |
| 74 | ==== スタンドアローン形式(ダイナミックローダ無し) ==== |
| 75 | スタンドアローン形式は開発したアプリケーションと本プラットフォームを一つのEV3のブートローダ(U-Boot)用ブートイメージ(uImage)としてビルドして、SDカードの指定場所に入れて実行する形式です。この実行形式には、以下の特徴があります。 |
| 76 | |
| 77 | * アプリケーションの最大サイズやカーネルオブジェクトの数の制限はありません |
| 78 | * ダイナミックローダに依存せず単独に動作できます |
| 79 | * アプリケーションを更新する度に、手間がかかります |
| 80 | * PCでアプリケーションのブートイメージ(uImage)をSDカードに書き込む操作が必要です |
| 81 | * EV3をリセットしてから実行するのでBluetoothの再接続が必要です |
| 82 | * 同じSDカードにアプリケーションを一つしか入れることができません |
| 83 | * コンパイル時間は比較的遅いです |
| 84 | * アプリケーションだけではなく、デバイスドライバ等もコンパイルする必要があるからです |
| 85 | |
| 86 | スタンドアローン形式を利用するために、アプリケーションのブートイメージ(uImage)をビルドする必要があります。以下の手順でそのブートイメージを生成できます。 |
| 87 | |
| 88 | ① プラットフォームのルートディレクトリ(hrp2)に移動します |
| 89 | |
| 90 | ② アプリケーションのあるワークスペースに移動します |
| 91 | |
| 92 | * サンプルプログラム(gyroboy)の例:下記のコマンドでデフォルトのワークスペースに移動します |
| 93 | |
| 94 | {{{ |
| 95 | $ cd workspace |
| 96 | }}} |
| 97 | ③ 「make app=<アプリケーションのフォルダ名>」でスタンドアローン形式用ブートイメージをビルドします |
| 98 | |
| 99 | * サンプルプログラム(gyroboy)の例:下記のコマンドでビルドします |
| 100 | |
| 101 | {{{ |
| 102 | $ make app=gyroboy |
| 103 | }}} |
| 104 | ④ ビルドが正常終了すると、 下記のような出力情報が表示されます。「uImage」というスタンドアローン形式用ブートイメージが生成されました |
| 105 | |
| 106 | 生成されたuImageをSDカードのルートフォルダにコピーして、そのSDカードをEV3の本体に差し込んで、EV3の電源を入れてアプリケーションを実行します。Bluetoothを接続して、アプリケーションの出力情報を見ることができます。 |
| 107 | |
| 108 | === Bluetoothの接続方法 === |
| 109 | ==== Bluetoothドングルの対応状況 ==== |
| 110 | Linuxで開発を行う場合、Linuxの事実上の標準プロトコルスタックBlueZがサポートするBluetoothドングルが対応しています。 Windowsで開発を行う場合、Bluetoothドングルのドライバ(プロトコルスタック)により、対応状況が異なります。具体的には、以下の表に参照してください。 |
| 111 | |
| 112 | || プロトコルスタック || 相性 || 備考 || |
| 113 | || Broadcom || ◎ || ABE Bluetooth Dongle(レゴ公式販売)、I-O DATA USB-BT40LE、Kinivo BTD-400 || |
| 114 | || Toshiba || ◎ || 販売しているドングルは少ないです(基本はLet’s Noteで搭載) || |
| 115 | || Windows汎用ドライバ || ○ || 接続できない時もあります || |
| 116 | || CSR || × || CSRのSSPドライバにバグあるらしいので接続は自動的に切断されます || |
| 117 | |||||| 凡例 ◎:正常動作 ○:正常動作する場合が多い ×:動作できない || |
| 118 | |
| 119 | なお、CSRのスタックを利用するドングルのほぼはWindows汎用ドライバもサポートします。デフォルトがCSRであるドングルで開発したい場合、Windows汎用ドライバを試してください。 |
| 120 | |
| 121 | ==== Bluetoothの接続手順(Windows + 汎用ドライバ編) ==== |
| 122 | * TODO: 汎用ドライバは安定になっているため,説明を追加 |
| 123 | |
| 124 | |
| 125 | |
| 126 | ==== Bluetoothの接続手順(Windows + Toshibaスタック編) ==== |
| 127 | ① EV3の電源を入れて、アプリケーションを実行します |
| 128 | |
| 129 | ② 「Bluetooth設定」を開いて、「新しい接続」をクリックします |
| 130 | |
| 131 | [[Image(pic2.png)]] |
| 132 | |
| 133 | ③ 「カスタムモード」を選択して、「次へ」をクリックします |
| 134 | |
| 135 | [[Image(pic3.png)]] |
| 136 | |
| 137 | ④ 「Mindstorms EV3」を選択して、「次へ」をクリックします |
| 138 | |
| 139 | [[Image(pic4.png)]] |
| 140 | |
| 141 | * 「Mindstorms EV3」はデフォルトのデバイス名です。「ev3.h」で変更できます。 |
| 142 | |
| 143 | ⑤ 「Serial Port Profile」を選択して、「次へ」をクリックします |
| 144 | |
| 145 | [[Image(pic5.png)]] |
| 146 | |
| 147 | ⑥ 「デフォルトのCOMポートを使用する」をチェックして、「次へ」をクリックします |
| 148 | |
| 149 | [[Image(pic6.png)]] |
| 150 | |
| 151 | ⑦ EV3のBluetoothのシリアルポート番号を確認して、「次へ」をクリックします |
| 152 | |
| 153 | [[Image(pic7.png)]] |
| 154 | |
| 155 | ⑧ 下記の画面が表示されたらEV3の新規接続設定は完成しました |
| 156 | |
| 157 | [[Image(pic8.png)]] |
| 158 | |
| 159 | ⑨ 追加した「Mindstorms EV3」のアイコンをダブルクリックして接続を行います |
| 160 | |
| 161 | [[Image(pic9.png)]] |
| 162 | |
| 163 | * 失敗の場合はもう一度ダブルクリックしてください |
| 164 | * 既にこのアイコンが存在している場合、②から⑧までの新規接続の手順は省略できます |
| 165 | |
| 166 | ⑩ 下記の画面が表示されたらPINコード「0000」を入力します |
| 167 | |
| 168 | [[Image(pic10.png)]] |
| 169 | |
| 170 | * 「0000」はデフォルトのPINコードです。「ev3.h」で変更できます。 |
| 171 | |
| 172 | ⑪ 接続は完成したら、ターミナルエミュレータを開いてEV3のBluetoothのシリアルポートに接続します |
| 173 | |
| 174 | [[Image(pic11.png)]] |
| 175 | |
| 176 | * 図はTera Termの例です |
| 177 | |
| 178 | ⑫ 以上でBluetoothの接続が完了しました。ターミナルエミュレータでEV3と通信できるようになりました |
| 179 | |
| 180 | == サンプルプログラムの一覧 == |