-
Notifications
You must be signed in to change notification settings - Fork 2
0. mraa intro
libmraaはIntelが中心となって開発を行なっているオープンソースのGNU/Linux向けライブリです。
ライブラリはC/C++で書かれていますが、C/C++以外にも、バインディングが提供されているJavaScript/Python/(Java)などで書かれたアプリケーションから利用することで、開発ボードなどハードウェアのIO操作を行うことができます。
libmraaから扱えるデジタル・アナログ入出力や、I2C/SPI通信などの機能をIntel Edison上で実際に動かし、それらを使って簡単なアプリケーションを作ってみます。
なお、以降のサンプルプログラム等は基本的にIntel Edison + Intel Arduino board上での動作を前提としますが、現状サポートされているハードウェアはIntel製である EdisonやGalileo以外にもRaspberry PiやBeagleBone Blackなどがあり、IOピンのマッピングは内部的に行われるので、異なるプラットフォームで共通のソースコードが利用できます。
本セクションではlibmraaを使ったごく基本的なGPIOの操作を行うプログラムをPythonとJavaScript(Node.js)それぞれで実装し、実際にEdison内で動かしてみます。
- Intel Edison + Arduino board
- ホストコンピューター(Intel Edisonへsshやscreen等でアクセスする)
- ブレッドボード
- ジャンパーワイヤー 10本前後 (サンプルの図で同時使用している最大本数は13本)
- 可変抵抗器(http://akizukidenshi.com/catalog/g/gP-03277/ http://akizukidenshi.com/catalog/g/gP-00246/ など。厳密な値の指定はないがテストでは10KΩ程度を使用。ブレッドボードに刺せるものが望ましい) 1個
- タクトスイッチ 3個(http://akizukidenshi.com/catalog/g/gP-03647/ http://www.switch-science.com/catalog/38/ など)
- ACアダプタ(7〜15V)、もしくは電源供給用のUSB micro Bケーブル
- 通信用USB micro B ケーブル(screenなどを使ってシリアル通信でEdisonにつなぐ場合のみ必要)
Intel Edisonは最新版のファームウェアにアップデートしておきます。
本家githubのREADMEに_opkg_の追加作業が書いてありますが、最新版のファームウェアで単にlibmraaを使うだけであればこの作業は不要です。
多くのLinuxディストリビューションではパッケージ管理システムを利用してOS内で利用されるライブラリの依存関係などを管理し、アプリケーションの導入や開発を行いやすくしています。
opkgはEdisonのデフォルトOSイメージのベースとなっているYocto Projectによって開発・提供されている軽量なパッケージ管理システムです。
Edison上でアプリケーションを利用したり、開発を行ったりする上で必要なライブラリ群をopkgコマンドを利用してインストールし、管理することができます。
何もしない状態だとv0.5.2のlibmraaがインストールされているようです(2015年11月現在、edison-iotdk-image-280915.zipにアップデートしただけの状態)。
wifiなどの設定をし、Edisonがインターネットに接続された状態にします。sshやscreenなどでEdisonにログインし、下記のコマンドを実行します。
curl https://raw.githubusercontent.com/inafact/make-it-with-mraa/master/0_mraa_intro/0_Blink-IO.py | python
または
curl https://raw.githubusercontent.com/intel-iot-devkit/mraa/master/examples/javascript/Blink-IO.js | node
Arduinoボード上にあるLEDが点滅したでしょうか?
最初のコマンドはPythonから、2番目のコマンドはNode.jsからlibmraaを利用したいわゆる「Lチカ」プログラムです。 両者ともオンライン上にアップロードしてあるソースコードをダウンロードしてきて、Edison内で実行する、というものです。
libmrraの開発はそこそこのスピードで行われているようなので、より新しいものを使うためには前述の通り、opkgの追加記述を行いましょう。
echo "src mraa-upm http://iotdk.intel.com/repos/2.0/intelgalactic" > /etc/opkg/mraa-upm.conf
opkg update
opkg install libmraa0
その他、詳細についてはgithubの項目の通りですが、上記の追記でopkgによって管理されるようになる内容は
の「各バージョン番号/intelgalactic/」を確認してみるとわかります。
各言語のAPIドキュメントはgithubのソースコードからコンパイルすることもできますが、オンラインのものも下記にまとめられています。
https://github.com/intel-iot-devkit/mraa#api-documentation
また、ArduinoのIDEなどからEdisonを利用していた場合に注意しておきたいのはlibmraaのIOピンのマッピングで、Edisonのものはこちらにあるので確認しておくと良いでしょう。
以降はgithubのレポジトリにあるソースコードの順を追っていきます。
最後の項目を除いて、各項ともにPythonとJavaScript(Node.js)のプログラムがありますが、基本的に同一の回路を同じように動かすものです。
*ちなみに内容のベースはlibmraa本家のexampleです。
ブレッドボード上に用意する回路はPDF及びFritzingのドキュメントを同梱していますので、そちらを参考にしてください。
ソースコードは
https://github.com/inafact/make-it-with-mraa.git
からEdison上にgitでcloneしてくるか、
gitの導入についてはこちらの記事も参考に
https://github.com/inafact/make-it-with-mraa/releases
から最新のものをダウンロードして、Edison上に展開します。
git clone https://github.com/inafact/make-it-with-mraa.git
wget -qO- https://github.com/inafact/make-it-with-mraa/archive/0.0.1.tar.gz | tar xvz
展開もしくはcloneしてきたら、このセクションのディレクトリに移動しておきます。
cd make-it-with-mraa/0_mraa_intro
1秒ごとにタクトスイッチのON/OFFを読み取り、値をコンソールに表示します。
python 1_GPIO_DigitalRead.py
node 1_GPIO_DigitalRead.js
1秒ごとに可変抵抗器の値を読みとって値をコンソールに表示します。
python 2_AioA0.py
node 2_AioA0.js
二つのタクトスイッチのHi/Loの変化を読みとって割り込みイベントを発生させ、それによってインクリメント・デクリメント(基準の数に+1したり-1したりする)された数値をコンソールに表示します。 先ほどまでの例と異なり、スイッチ側がトリガを発生させるので、変化した時のみコンソールに値が出力されるようになります。
python 3_Isr.py
node 3_Isr.js
前項まではコンソールからプログラムを実行し、数値等出力もコンソール内で行っていました。 実際にもっと複雑なアプリケーションを作る際にはもう少しグラフィカルなインターフェースであったり、リアルタイムに入力をコントロールする必要があるかと思います。
最後の項ではNode.js + Websocket(Socket.io) + HTML5/JavaScriptを組み合わせて、前項までの回路をWebブラウザ上のインターフェースからコントロールしたり、モニタリングできるようにしてみます。
アプリケーションのディレクトリに移動します。
cd 4_WebGuiTest
Node.jsのモジュールをインストールします。
Node.jsのモジュールのインストールなどについてはこちらの記事も参考に
npm install --prod
回路を組んだ状態でWebサーバーを起動します。
npm run server
Edisonと同じネットワーク内にいるコンピューターやスマートフォンからEdisonの8888番ポートにアクセスします。
各入力は次の動作に対応しています。