連載
» 2015年07月21日 07時00分 UPDATE

mruby概論(3):mrubyとマイコンボードで“IoTを手作り”してみよう (1/3)

生産性が高く習得も容易なRubyの組み込み版「mruby」用い、実際にマイコンボード「enzi」との組み合わせで、取得したセンサーデータをTCP/IPでサーバへ送るIoTデバイスの開発を行います。

[石井宏昌,MONOist]

 Rubyの特長を組み込み開発に反映させたプログラミング言語が「mruby」は、「Raspberry Pi」や「BeagleBoard」「GR-SAKURA」「Aruduino(およびArduino互換ボード)」など、さまざまなマイコンボード上で動作します。

 ここではmrubyリファレンスボードとして用意されているManycolors製のラピッドプロトタイピングボード「enzi basic board(以下、enziボード)」を使って、センサーからの値を取り込み、サーバに送るIoTやM2Mの基礎となるアプリを構築してみましょう。

 enziボードはもともとmrubyの教育・研修用に開発されたものですが、そのスペックの高さから企業向けのIoT/M2Mアプリのプロトタイピングにも適します。サイトにはhttp://enzi.cc/からアクセスしてください。

photo 「enzi」サイト
enziボード構成要素 内容
CPU Cortex-M4 168MHz(ARM 7アーキテクチャ)
RAM 内蔵SRAM 192Kバイト, 外部SRAM 1Mバイト(mruby専用領域)
ROM 1Mバイトフラッシュ
その他 USB-mini B、イーサネット、MMC miniカードスロット、GPIO(Digital x14,Analog x 6),SPI,i2C、Aruduino互換ピンアサイン
photo enziボード

 さらにenziの特徴として、Webサイトでの開発・シミュレーション機能があります。サイトにアクセスして「シミュレータ」ページを開いてみてください、デフォルトで簡単なLチカプログラムがロードされています。

photo enziのサイトで提供されているシミュレータ機能

 「execute」ボタンを押すと画面上のenziボードのLEDが点灯し、右下にD8/D9/D10での波形が表示されます。まず、このデフォルトで表示されているプログラムを見てみましょう。

p "Hello World!"
 
analogWrite(D9, 100)	
status = 0
 
loop do
  (0..25).each do |i|
    status ^= 1
    digitalWrite(D10, status)
    analogWrite(D8, i*10)
    delay(1600)
  end
end

 順を追って解説すると、

 1行目pは表示(hello worldを表示)

 3行目analogWriteはenziのライブラリで、文字通りアナログ書き込みです(enziはDigitalポートもアナログとして利用できます)

 7行目(0..25)はRubyの構文で、この例では0から25までを表します。7行目から12行目まで、0から25までを26回ループし、その値は i に代入されます

 8〜9行目は「最初0であったstatusが1に、1になったら0に」を繰り返します。それがD10に1,0,1,0と反映されています。

 10行目 D8ポートにiの10倍の値が入ります。

 11行目 1600ミリ秒のディレイ(delay)

 となります。

 これらの値を変更し再度「Execute」することで、enziボードを持っていなくてもシミュレートすることが可能です。

 enziボードのユーザーでなくても、コンパイル以外のシミュレーション機能やサンプルアプリの参照は可能です。加えて、enzi購入者はユーザー登録することでアプリケーション開発後、コンパイルしてダウンロードできます。enziボードでは「enzi.ezb」というコンパイルしたファイルをSDカードを使ってロードさせることで、アプリケーションを動作させます。

 なおenziボードはAmazonにて購入可能です。この文章を書いている2015年7月上旬の時点ではセール価格1万円(税込)となっています。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.