TinyOS+MICAzを使う 基本編

センサノードを使った遊び(実験)について忘れないようにメモします.
基本編では用語・使い方の説明と,NesCでちょっとしたプログラムをします.

TinyOSとは

http://www.tinyos.net/

TinyOSとは 小型機器を制御する小型なOS. SmartDustのプロトタイプに利用されてもいる。現在moteを動かすために存在しているとも言える…
http://www.ht.sfc.keio.ac.jp/~nandu/pukiwiki/pukiwiki.php?%5B%5BTinyOS%5D%5D

無線センサネットワーク用のOS です。UC Berkeley で開発され現在はオープンソースプロジェクトとして世界中のソフトウェアエンジニアによって改良・機能拡張が行われています。TinyOS は限られた資源下で高効率な処理を行えるように設計されており、メモリ(ワーキングメモリ、プログラム格納用フラッシュメモリ)、CPUパワー、消費電力などを非常に小さく抑えることができます。
http://www.xbow.jp/moteworks.pdf

<用語>

SmartDust
SmartDustとは空気中にすげー小さいセンサノードをばら撒いて,いろいろしましょうという机上の空論.Smartdust - Wikipedia
mote
UC Berkeley のNESTプロジェクトが開発したセンサネットワーク構築用のセンサノードである。moteは”センサモジュール”と”データ通信モジュール”でできていると考えて良い。 http://www.ht.sfc.keio.ac.jp/~nandu/pukiwiki/pukiwiki.php?%5B%5Bmote%5D%5D

MICAzとは

http://www.xbow.jp/motemica.html

MPR2600モジュールを使用しそのままお使いいただけるよう国内技術適合を取得したMICA-Mote です。従来機種MPR2400Jの信頼性UP版です。
http://www.xbow.jp/zigbee-smartdust.html

MPR2400
Zigbeeを採用した無線端末 ノード
mica mote でセンサーネットワークを構築する


要するにこの写真のハード(ノード)の名前です.

環境

CygwinとTinyOSとJAVAが既にインストールされて設定も完了している環境(実験室).
RS-232Cポートに接続したシリアルケーブル(COM1)にMICAzを接続できるようになっている.つまりmib510などの機器がCOM1に付いている.

MIB510とは
PCと無線ノードとのインタフェースになる。これだけでは無線機能をもっていないので、MICA-moteを1つ乗せて使うことになる。シリアルでコントロールする。

<参考>
TinyOSのインストールに役立ちそうなページ(これで正しく環境設定できるかどうかは知らない)
http://www.cse.wustl.edu/~liang/tinyos-install/windows/index.html(英語)
http://www.mcl.iis.u-tokyo.ac.jp/%7Esekine/install.html
http://www.ht.sfc.keio.ac.jp/~nandu/pukiwiki/pukiwiki.php?%5B%5BTinyOS%5D%5D
ペイジをページに
CVSクライアント 環境設定 - Windows on Cygwin -

MICAzを動かしてみる

NesCでMICAzを動かす簡単なプログラムを書き,コンパイルして,MICAzにインストールして動かしてみる.

NesCとは
NESTプロジェクトの一つで、TinyOS用に開発されたC-likeな言語。
cd /opt/tinyos-1.x/apps/

上記のフォルダに適当なフォルダを作ります.その下に以下のファイルを作ります.
<MikeFileの中身>

COMPONENT=MyFirstApp
include ../Makerules

<MyFirstApp.ncの中身>

configuration MyFirstApp{


}
implementation{
	components Main,TimerC,LedsC,MyFirstAppM;
	
	Main.StdControl -> TimerC;
	Main.StdControl -> MyFirstAppM;
	MyFirstAppM.Leds -> LedsC;
	MyFirstAppM.Timer -> TimerC.Timer[unique("Timer")];

}

<MyFirstAppM.ncの中身>

module MyFirstAppM{
	provides{
		interface StdControl;
	}
	uses{
		interface Timer;
		interface Leds;
	}
}
implementation{
	uint8_t counter;

	command result_t StdControl.init(){
		counter = 0;
		call Leds.init();
		return SUCCESS;
	}
	command result_t StdControl.start(){
		return call Timer.start(TIMER_REPEAT,1000);
	}
	command result_t StdControl.stop(){
		return call Timer.stop();
	}

	event result_t Timer.fired(){
		call Leds.redOff();
		call Leds.greenOff();
		call Leds.yellowOff();
		
		switch(++counter){
			case 1:
				call Leds.redOn();
				break;
			case 2:
				call Leds.greenOn();
				break;
			case 3:
				call Leds.yellowOn();
				break;
		}
		counter %= 3;
		return SUCCESS;
	}
}

(このNesCで書かれたプログラムはMOTEに付いているLSD(赤,緑,黄)を順番に点灯させるだけのプログラムです.)
cygwinで/opt/tinyos-1.x/contrib/xbow/apps/適当なフォルダ名/に移動して

make micaz

とタイプしてコンパイルします.(buildというフォルダができます.)
ポイント:これからもmakeコマンドは良く使います.エラーが出たときはmake cleanとタイプして,bulidフォルダを消去すると成功する場合があります.


コンパイルできたら,RS-232Cポートにシリアルケーブルでmib510を接続し,その上にMICAzを付けて

make micaz reinstall,0 mib510,COM1

とタイプして,MICAzにコンパイルしたプログラムをインストールします.
ここで,MICAzのLSD(赤,緑,黄)が順番に点灯すれば成功です.



関連記事
TinyOS+MICAzを使う 基本編 - WebLab.ota
TinyOS+MICAzを使う Surge_Reliable編 - WebLab.ota
TinyOS + MICAz を使う MoteView編 - WebLab.ota
TinyOS + MICAz を使う TinyDB編 - WebLab.ota