ev3dev-lang には C++ や Python、Lua などの EV3 デバイスへのバインディングライブラリが含まれています。 以下では、C++ から利用できる、ev3dev バインディングの導入と使い方について説明します。
以下の作業は、クロス開発環境にて行います。既に、上述の方法でクロス開発環境が導入済みであるとして進めます。
まず、github から ev3dev-lang をクローニングします。クローニング先は、クロス開発環境内の適当な場所 (ここでは /home/openrtm/work の下) にします。
$ cd ev3-ev3dev-work/home/ $ mkdir -p openrtm/work $ cd openrtm/work $ git clone https://github.com/ddemidov/ev3dev-lang-cpp Cloning into 'ev3dev-lang-cpp'... remote: Counting objects: 1733, done. remote: Total 1733 (delta 0), reused 0 (delta 0), pack-reused 1733 Receiving objects: 100% (1733/1733), 510.41 KiB | 310.00 KiB/s, done. Resolving deltas: 100% (1150/1150), done. Checking connectivity... done. $ ls ev3dev-lang-cpp $ cd ev3dev-lang-cpp $ git checkout c0829011bf668bb77e55049a7f2f396b0b452f41
次に、コンパイルを行います。まず、作業ディレクトリー work に入り、brickstrap のクロス開発モードに入ります。
$ cd ~/work $ brickstrap -b ev3-ev3dev-jessie -d ev3-ev3dev-work shell
先ほど github からクローニングしたディレクトリに移動し、make します。
# cd /home/openrtm/work/ev3dev-lang-cpp/ # mkdir build # cd build # cmake .. -DEV3DEV_PLATFORM=EV3 # make
コンパイルが終了すると build の下にスタティックリンクライブラリ (libev3dev.a)、demos の下にはいくつかのサンプルアプリケーションが生成されます。
サンプルプログラムの内容は以下の通りです。 標準セットの構成で使用できる産プロプログラムは、button-test、ev3dev-lang-demo、ev3dev-lang-test で drive-test、remote_control-test には IRセンサーと IRビーコンが必要になります。
button-test | EV3 インテリジェントブロック(本体)のボタン(十字、中央、キャンセル)の ON/OFF を表示するサンプル。 |
drive-test | モード1: IRセンサーを距離センサーとして利用し、障害物がなければ直進、障害物があればターンする自動動作を繰り返す。モード2: IRビーコンを用いた赤外線による遠隔操作モード。(標準セットにはIRセンサー、IRビーコンが付属していません。) |
ev3dev-lang-demo | メニュー形式で、センサー、モーター、LED、ボタン、サウンド、バッテリー、LCD等のデバイスの様々な機能にアクセスできるでもプログラム。 |
ev3dev-lang-test | libev3dev のテスト用プログラム。センサー、モーター、LEDなどの機能を一通りアクセスし、libev3dev の機能をテストするプログラム。 |
remote_control-test | IRセンサーと IRビーコンを用いたリモートコントロールのでもプログラム。 |
実際に EV3 で動作させるために、サンプルプログラムを EV3 にコピーします。EV3 で ev3dev が起動してネットワークにつながっていることを確認してください。クロス開発環境側から以下のようにしてコピーします。
# cd demos ← ev3dev-lang-cpp/demos に移動 # scp * ev3dev.local:/tmp/ ← ファイルを ev3.local (EV3) の /tmp/ にコピー
そのままターミナルから ev3dev.local にログインしてサンプルプログラムを実行します。
# ssh ev3dev.local login: root password: r00tme # cd /tmp # ./ev3dev-lang-demo *** main menu *** (s)ensors (m)otors (l)eds (b)uttons s(o)und b(a)ttery l(c)d (q)uit Choice:
自作のプログラムをビルドする際は ev3dev.h のインクルードと libev3dev.a とのリンクする必要があります。 以下は CMakeLists.txt の一例です。
cmake_minimum_required(VERSION 2.8) set(ev3dev_dir /home/ev3dev-lang-cpp) set(ev3dev_lib ${ev3dev_dir}/build/libev3dev.a) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") project( testEV3 ) add_executable(testEV3 main.cpp) include_directories(${ev3dev_dir}) target_link_libraries(testEV3 ${ev3dev_lib} pthread)