[[Galileo]]

* IntelのGalileo向けIOフレームワークmraaを使う - Galileo [#ubfd8885]

#contents

** 概要 [#fb5e5d73]
IntelのIoT Dev Kitの一部として開発されている,Galileoボード向けIOフレームワーク[[mraa:https://github.com/intel-iot-devkit/mraa]]を使ってみる.~
これまで作成してきたイメージとともに使えるように,ビルドの手順を示したうえで,パッケージも配布したい.

** パッケージマネージャを使用したインストール [#n27e5c20]
公式にパッケージが配布されている.(14/08/18更新)
#highlightjs(){{
# echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/mraa-upm.conf
# opkg update
# opkg install mraa
}}

私がビルドした非公式版も一応置いておく.~
[[BSP1.0.0, eglibcなYocto>IntelのGalileoのBSP1.0.0系イメージを使うまで - Galileo]]をお使いの方は,[[IntelのGalileoでパッケージマネージャopkgを使う - Galileo]]の通りに設定した上で,
#highlightjs(){{
$ opkg update
$ opkg install libmraa0
# opkg update
# opkg install libmraa0
}}
することでmraaのパッケージがインストールされる.

** ビルド [#o19a75ac]
mraaのNode.js向けライブラリをビルドするためには,swigの3.0.1以降が必要である.~
そこで,[[OpenEmbeddedのGitHub:https://github.com/openembedded/meta-oe/tree/master/meta-oe/recipes-devtools/swig]]からswig 3.0.2(執筆時現在)のbitbakeレシピを拝借した.~
なお,このレシピは[[tokoro10g/meta-tokoro10g-galileo:https://github.com/tokoro10g/meta-tokoro10g-galileo]]にもある.~
+ meta-tokoro10g-galileoをmeta-clantonディレクトリ内にcloneする.
+ BUILDDIR/conf/bblayers.confのBBLAYERSにmeta-tokoro10g-galileoディレクトリを追加する.
+ conflictするとややこしいので,古いバージョンのswigを予め消しておく.その後ビルド.~
#highlightjs(){{
$ bitbake -f -c cleanall swig-2.0.9 swig-native-2.0.9
$ bitbake swig swig-native
}}
+ nativeなswigが新しいバージョンになっていることを確認.~
#highlightjs(){{
$ $BUILDDIR/tmp/sysroots/x86_64-linux/usr/bin/swig -version
SWIG Version 3.0.2
Compiled with g++ [x86_64-pc-linux-gnu]
Configured options: +pcre
Please see http://www.swig.org for reporting bugs and further information
}}
+ あとはmraaをビルドするだけ.~
#highlightjs(){{
$ bitbake mraa
}}

** 使う [#t6cda2b2]
mraaを使用することで,様々な言語から共通のインタフェースでIOを叩けるようになる.~
サンプルコードもそこそこ同梱されているので確認しながら書いてみよう.

*** C [#l4fbd00c]
mraa.hをincludeすることで使用できる.
コードとしては,
#highlightjs(cpp){{
#include "mraa.h"
int main(int argc, char *argv[])
{
	mraa_init();
	mraa_gpio_context gpio;
	gpio = mraa_gpio_init(13);
	mraa_gpio_dir(gpio, MRAA_GPIO_OUT);
	mraa_gpio_write(gpio, 1);
	return 0;
}
}}
とすることで,13番ピンをHIGHにすることができる.

*** C++ [#w79098dd]
mraa.hppをincludeすることで使用できる.
コードとしては,
#highlightjs(cpp){{
#include "mraa.hpp"
int main(int argc, char *argv[])
{
	mraa::Gpio* gpio = new mraa::Gpio(13);
	gpio->dir(mraa::DIR_OUT);
	gpio->write(1);
	delete gpio;
	return 0;
}
}}
とすることで,13番ピンをHIGHにすることができる.

*** Javascript(Node.js) [#te159c37]
mraaパッケージがデフォルトでグローバルにインストールされているので,実行するJavascriptファイルのあるディレクトリで
#highlightjs(){{
$ npm link mraa
}}
としてから始める.
コードとしては,
#highlightjs(javascript){{
var m = require("mraa")
var x = new m.Gpio(13)
x.dir(m.DIR_OUT)
x.write(1)
}}
のようにして,13番ピンをHIGHにすることができる.

*** Python [#k5ddd07a]
mraaをimportするだけで使える.
コードとしては,
#highlightjs(python){{
import mraa
import time

x = mraa.Gpio(13)
x.dir(mraa.DIR_OUT)

while True:
	x.write(1)
	time.sleep(0.2)
	x.write(0)
	time.sleep(0.2)
}}
のようにして,13番ピンのHIGHとLOWを一定周期で切り替えることができる.

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS