42
mruby IoT framework ‘Plato’mruby IoT framework ‘Plato’mrubyのポーティング研修テキスト mrubyのポーティング研修テキスト 特定非営利活動法⼈軽量Rubyフォーラム 1 特定非営利活動法⼈軽量Rubyフォーラム

mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mruby IoT framework ‘Plato’とmruby IoT framework ‘Plato’とmrubyのポーティング研修テキストmrubyのポーティング研修テキスト

特定非営利活動法⼈軽量Rubyフォーラム

1

特定非営利活動法⼈軽量Rubyフォーラム

Page 2: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

本研修について

• mruby概要

• mruby IoTフレームワーク “Plato”

• mrubyポーティングmrubyポーティング

• mrubyポーティング環境へのPlatoの適用• mrubyポーティング環境へのPlatoの適用

2

Page 3: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mruby概要mruby概要

“Ruby”を省リソース化した“mruby”の概要・特徴

“Ruby”を省リソース化した“mruby”の概要・特徴

3

Page 4: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyとは

• 高い生産性で人気の言語Rubyの軽量版「mruby」「mruby」

– RAMサイズ200KB程度で動作可能

– 組込み機器にも搭載可能– 組込み機器にも搭載可能

• 経済産業省「地域イノベーション創出研究開発• 経済産業省「地域イノベーション創出研究開発事業」の研究成果として2012年4月に「mruby」を公開事業」の研究成果として2012年4月に「mruby」を公開

• 商⽤利⽤しやすいMITライセンスのOSS

http://github.com/mruby/mrubyMITライセンスのOSS

4

http://github.com/mruby/mruby

にてソース公開

Page 5: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

Rubyの高い生産性

ソケット通信の実装例

require 'socket'#include < stdio.h > require 'socket'begin

sock = TCPSocket.open("192.168.1.1", 30000)10.times {

sock.write("Hello!!")}

#include < stdio.h >#include <sys/socket.h>#include <arpa/inet.h>#include <string.h>

int main(void){

int sock;

C言語(35行)

Ruby}sock.close

rescue => ep e

end

int sock;int i;struct sockaddr_in svaddr;const char msg[] = "Hello!!";

if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TC P)) < 0) {puts("socket() failed.");return 1;

Ruby

(10行)

return 1;}memset(&svaddr, 0, sizeof(svaddr));svaddr.sin_family = AF_INET;svaddr.sin_addr.s_addr = inet_addr("192.168.1.1");svaddr.sin_port = htons(30000);if (connect(sock, (struct sockaddr*)&svaddr,

sizeof ( svaddr )) < 0) {

• 短いコード

• 簡潔な記述

• ポインタ操作なし

• メンテナンス性が高いsizeof ( svaddr )) < 0) {puts("connect() failed.");exit(2);

}

for (i=0; i<10; i++) {if (send(sock, msg, strlen(msg), 0) !=

strlen ( msg)) {

• メンテナンス性が高い

• コードが長くなりがちstrlen ( msg)) {puts("send() failed.");exit(3);

}}close(sock);return 0;

}

• コードが長くなりがち

• 処理が複雑になりがち

• 危険なポインタ操作

• メンテナンス性が低い

5

}

Page 6: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyの特徴

ISO, JIS規格のRubyに準ずる言語仕様• ISO, JIS規格のRubyに準ずる言語仕様– 本家Rubyと同様に使える– 本家Rubyと同様に使える

• コンパクトな処理系「mruby VM」• コンパクトな処理系「mruby VM」– mrubyコンパイラが出⼒するバイトコードを実⾏実⾏

– VMさえ動作すればどんな環境でも動作可能Windows, Mac, Linux, ITRON, Android, Windows, Mac, Linux, ITRON, Android, iOS ...

• C/C++言語との高い親和性–組込みシステムの資産が再利⽤可能–組込みシステムの資産が再利⽤可能– アプリケーションにmrubyを組込み可能 6

Page 7: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

補足: RubyとmrubyRuby mruby

インタプリタ言語 インタプリタ言語/コンパイラ言語

C言語モジュールの呼び出しが可能 C言語モジュールの呼び出し、C言語からC言語モジュールの呼び出しが可能 C言語モジュールの呼び出し、C言語からの呼び出しが可能

実行時にRubyGemsで機能拡張が可能 ビルド時にmrbgemsで機能拡張が可能実行時にRubyGemsで機能拡張が可能 ビルド時にmrbgemsで機能拡張が可能※mrbgemsとRubyGemsとは互換性なし

Integer同士の演算 → Integer

Float同士の演算 → Float

演算結果が整数値→Integer

演算結果が浮動小数値→FloatFloat同士の演算 → Float 演算結果が浮動小数値→Float

非常に大きな整数値はBignumで扱われる

非常に大きな整数値はFloatで扱われる

正規表現を標準装備 正規表現はオプション正規表現を標準装備 正規表現はオプション※複数から選択可能

ASCII, Shift_JIS, UTF-8など様々な文字 文字コードはASCII, UTF-8のみ利用可能ASCII, Shift_JIS, UTF-8

コードが利用可能ASCII, UTF-8

※UTF-8はオプション

バイナリ配布(ソースコードも入手可) ソースコード配布※容易にカスタマイズ可能※容易にカスタマイズ可能

7

Page 8: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyを支えるコミュニティ

• オープンソースコミュニティ– 3,700人超のフォロワー オープンソース– 3,700人超のフォロワー– 200人以上のコントリビュータ– 7,700件を超える改良・修正

オープンソースとして成⻑

・Creative・Powerful

– 7,700件を超える改良・修正

https://github.com/mruby/mruby (mruby公開サイト)

• NPO軽量Rubyフォーラム– ワーキンググループによる活動– ワーキンググループによる活動– セミナー・講演会等での広報活動福岡県からの支援

会員企業による商業ベースでの利⽤

推進・実用化– 福岡県からの支援 ・ビジネス利⽤ノウハウ

推進・実用化・ビジネス利⽤ノウハウ

http://forum.mruby.org (軽量Rubyフォーラムサイト)

会員募集中 !!8

会員募集中 !!

Page 9: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

IoT/M2M時代の新言語 - mruby

� ものとインターネット、ものとものが繋がる

→ 全てのものがネットワークに繋がっていく→ 全てのものがネットワークに繋がっていく

� 組込み分野もフロンティア領域を重点分野として新しい市場が形成されて

いく

→ これに対応した組込み開発が必須になっていく→ これに対応した組込み開発が必須になっていく

9

経済産業省

組込み開発の今後 資料より

Page 10: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

PlatoPlato- mruby IoT framework -

mruby IoTフレームワーク “Plato”の概要mruby IoTフレームワーク “Plato”の概要

10

Page 11: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mruby IoT framework “Plato”

Plato (仮) - mruby IoT framework

• NEDO助成事業「組込みシステムの⾼効率開発を可能とする開発• NEDO助成事業「組込みシステムの⾼効率開発を可能とする開発フレームワークの研究開発」にて開発中(〜2017/2)(九州工業大学、有明工業高等専門学校、SCSK九州)(九州工業大学、有明工業高等専門学校、SCSK九州)

• mrubyによるIoT製品開発の効率化• マイコンボードとシームレスに繋がる統合開発環境の提供• マイコンボードとシームレスに繋がる統合開発環境の提供• 組込み向けセキュリティ機能の提供

White-Tiger

11

White-Tiger

センサボード Plato IDE

Page 12: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

“Plato”で出来ること

mrubyによるIoT製品開発の効率化

• 組込み向けデバイスクラスライブラリの提供• 組込み向けデバイスクラスライブラリの提供

• BLE、WiFi、ZigBeeなど様々な通信方式にも対応BLE、WiFi、ZigBeeなど様々な通信方式にも対応

• 典型的なアプリケーションの雛形を自動生成(Railsのように)(Railsのように)

• シミュレータによるPC上でのシミュレーション

12

Page 13: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

“Plato”で出来ること

mrubyボード(enzi) + センサボード(White-Tiger)

• 汎用IO• 汎用IO• デジタル/アナログIO、UART、I2C、SPI

• センサ• センサ• 温度、湿度、照度

• 通信デバイス• BLE• Wi-Fi• Wi-Fi• ZigBee• Ethernet

• ファイルシステム

• RTC

13

• RTC

Page 14: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

“Plato”で出来ること

Plato IDE

• Visual Studio Codeベースの開発環境• Visual Studio Codeベースの開発環境(マルチ環境に対応)

• アプリ構成、使用ライブラリをGUIで指定• アプリ構成、使用ライブラリをGUIで指定

• アプリケーションのコンパイル• アプリケーションのコンパイル

• アプリケーションのシミュレーション実⾏

• マイコンへのプログラム書き込み

14

Page 15: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

“Plato”で出来ること

セキュリティ機能 “Plato Guard”

IoT時代に必要となるセキュリティ機能をオプションで提供IoT時代に必要となるセキュリティ機能をオプションで提供

• 認証機能による不正アプリケーション実⾏の防⽌

(外部からの攻撃、乗っ取りから守る)認証機能による不正アプリケーション実⾏の防⽌

(外部からの攻撃、乗っ取りから守る)

• 暗号化による実⾏モジュール秘匿化• 暗号化による実⾏モジュール秘匿化

(アプリケーション資産の漏洩を防ぐ)

15

Page 16: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

“Plato”が目指すところ

○rduinoよりも簡単に組込み開発を

• mruby(Ruby)でプログラミングできる• mruby(Ruby)でプログラミングできる

• 多くのマイコンボードに対応(バイトコード互換)多くのマイコンボードに対応(バイトコード互換)

• 必要なデバイスに応じてVMをカスタマイズできる• 必要なデバイスに応じてVMをカスタマイズできる

• mruby/cにも対応予定(⼩サイズ、省電⼒)(⼩サイズ、省電⼒)

16

Page 17: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティングmrubyポーティング

マイコンボードへのmruby適用マイコンボードへのmruby適用

17

Page 18: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング

mrubyポーティングのために必要なこと

• mrubyビルド環境の構築• mrubyビルド環境の構築

• mrubyのクロスビルドmrubyのクロスビルド

• ターゲットアプリへのmruby組込み

18

Page 19: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyビルド環境の構築

mrubyビルド環境の構築

以下の環境を準備する。以下の環境を準備する。

• 開発OS• Microsoft Windows

開発OS• Microsoft Windows• Mac� これら以外のOSも利⽤可能であるが、本書ではこれら2つに� これら以外のOSも利⽤可能であるが、本書ではこれら2つに

限定して紹介する。

• 本家Ruby• 本家Ruby• Cコンパイラ• GNU Bison• git• git

19

Page 20: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyビルド環境の構築

本家Rubyの導入

Windowsの場合• 下記サイトよりRubyInstallerをダウンロードし、最新版のRuby

環境インストールする。(Ruby 2.0以降を推奨)環境インストールする。(Ruby 2.0以降を推奨)https://rubyinstaller.org/

Macの場合• Mac OSにプリインストールされているRubyが利⽤可能。• Mac OSにプリインストールされているRubyが利⽤可能。

20

Page 21: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyビルド環境の構築

Cコンパイラの導入

Windowsの場合• Cコンパイラを含むC言語開発環境をインストールする。利⽤可能なC⾔語開発環境の⼀例利⽤可能なC⾔語開発環境の⼀例• Microsoft Visual Studio• gcc (MinGW)• gcc (Cygwin)• gcc (Cygwin)

Macの場合Macの場合• X Code および Command Line Toolsをインストールする。

21

Page 22: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyビルド環境の構築

GNU Bisonの導入

Windowsの場合• 下記サイトよりBisonのインストーラをダウンロードしセット

アップする。アップする。http://gnuwin32.sourceforge.net/packages/bison.htm

Macの場合Macの場合• 以下のコマンドを実⾏してBisonをインストールする。

brew install bisonbrew install bison

22

Page 23: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyビルド環境の構築

gitの導入

Windowsの場合• 下記サイトよりgit for Windowsのインストーラをダウンロード

しセットアップする。しセットアップする。https://git-for-windows.github.io/

Macの場合Macの場合• 以下のコマンドを実⾏してgitをインストールする。

brew install gitbrew install git

23

Page 24: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyビルド環境の構築

mrubyのビルド

1. mrubyソースコードの入手とビルド1. mrubyソースコードの入手とビルド以下のコマンドを実⾏し、mrubyソースコードを入手し、ビルドする。ドする。

cd <任意のディレクトリ>git clone https://github.com/mruby/mrubygit clone https://github.com/mruby/mrubycd mrubymake

2. 以下のコマンドを実⾏し、mrubyのバージョン情報が表示されれば正しくビルドされている。

cd bin./mruby --version (Windowsの場合は ./ は不要)

24

Page 25: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

mrubyクロスビルドで必要な作業

• ターゲットボード用ツールチェインの入手• ターゲットボード用ツールチェインの入手

• ビルドスクリプトの記述ビルドスクリプトの記述

25

Page 26: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

ターゲットボード用ツールチェインの入手

ターゲットボード向けのソフトウェア開発に必要なツールチェインターゲットボード向けのソフトウェア開発に必要なツールチェイン(コンパイラ・リンカなどのセット)をセットアップする。

例えば、ARMプロセッサ⽤であれば以下のツールチェインが利⽤可例えば、ARMプロセッサ⽤であれば以下のツールチェインが利⽤可能。

GNU ARM Embedded Toolchainhttps://launchpad.net/gcc-arm-embedded

26

Page 27: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

ビルドスクリプトの記述

mrubyのビルド構成はビルドスクリプト(build_config.rb)に記述さmrubyのビルド構成はビルドスクリプト(build_config.rb)に記述されている。ターゲットボード向けにクロスビルドするには、build_config.rbにクロスビルド用の記述を追加する必要がある。build_config.rbにクロスビルド用の記述を追加する必要がある。

build_config.rbの概要ホスト(開発環境)用のビルド構成

MRuby::Build.new do |conf|

end

MRuby::Build.new('host-debug') do |conf|

ホスト(開発環境)用のビルド構成build/host

デバッガ、unitテスト、ベンチマーク用のend

MRuby::Build.new(’test') do |conf|

end

デバッガ、unitテスト、ベンチマーク用のビルド構成

build/host-debug

build/testMRuby::Build.new(’bench') do |conf|

end

MRuby:: CrossBuild.new ( ' hoge ') do | conf |

build/test

build/bench

追加するターゲット用のクロスビルド構成

27

MRuby:: CrossBuild.new ( ' hoge ') do | conf |

end

追加するターゲット用のクロスビルド構成build/ターゲット名

Page 28: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

ビルドスクリプトの記述

build_config.rbに追加するクロスビルド⽤の記述例を以下に⽰す。build_config.rbに追加するクロスビルド⽤の記述例を以下に⽰す。MRuby::CrossBuild.new('hoge') do |conf|

toolchain :gcc

conf.linker.flags << “ - m32“

リンカオプションconf.linker.flags << “ - m32“

conf.cc do |cc|cc.command = 'arm-none-eabi-gcc'cc.flags = []cc.flags << ' - mcpu=cortex - m4‘ コンパイラオプションcc.flags << ' - mcpu=cortex - m4‘cc.flags << '-std=gnu99‘cc.flgas << ‘-mfpu=fpv4-sp-d16 –mfloat-abi=soft‘# 省略

end

conf.bins = []

コンパイラオプション

conf.bins = []

conf.gem :core => 'mruby-print'conf.gem :git => ‘https://github.com/mattn/mruby-json .git'# 省略

end

使用するmrbgems(ライブラリ)

使用するツールチェインの定義は、tasks/toolchain内に定義することで再利⽤が可能となる。

28

とで再利⽤が可能となる。

詳細は mrubyのドキュメントを参照のこと。

Page 29: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

クロスビルド実⾏

build_config.rbへのクロスビルド定義の追加が終わったら、mrubybuild_config.rbへのクロスビルド定義の追加が終わったら、mrubyをリビルドすることでmrubyのクロスビルドが実施される。

cd mrubycd mrubymake clean all

ターゲット名を ‘hoge’ とした場合は、クロスビルドによって、以下のmrubyスタティックライブラリが生成される。

mruby/build/hoge/lib/libmruby.a

29

Page 30: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

ターゲットアプリへのmruby組込み

クロスビルドで作成した libmruby.a をターゲットアプリケーショクロスビルドで作成した libmruby.a をターゲットアプリケーションにスタティックリンクすることで、ターゲットアプリケーションにmrubyを組み込むことができる。にmrubyを組み込むことができる。

ターゲットアプリケーションからmrubyを呼び出すためにはmrubyのC APIを使用する。mrubyのC APIを使用する。

ターゲットアプリケーションからのmrubyの呼び出し例を以下に⽰す。す。

30

Page 31: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

ターゲットアプリへのmruby組込み

ターゲットアプリ(main.c)とC言語側から呼び出すmrubyアプリターゲットアプリ(main.c)とC言語側から呼び出すmrubyアプリ(app.rb)の例を以下に⽰す。

main.cmain.c#include ”mruby.h”#include “mruby/irep.h”#include < stdio.h >#include < stdio.h >

void main(void){

extern uint8_t appbin[];mrb_state *mrb = mrb_open();mrb_value v;

mruby VMの初期化

mrubyアプリケーションの実行mrb_value v;

v = mrb_load_irep(mrb, appbin);puts(mrb_string_value_cstr(mrb, v));

mrb_close(mrb);}

mruby VMの終了

mrubyアプリケーションの実行

app.rb

}mruby VMの終了

31

“Hello, mruby!“

Page 32: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyのクロスビルド

ターゲットアプリへのmruby組込み

以下のコマンドでmrubyアプリケーションをコンパイルする。以下のコマンドでmrubyアプリケーションをコンパイルする。

mrbc –Bappbin –o app.c app.rbmrbc –Bappbin –o app.c app.rb

main.c、上記コンパイル結果(app.c)をコンパイルし、前述のlibmruby.a と共にリンクすることで、mrubyを追加したターゲッlibmruby.a と共にリンクすることで、mrubyを追加したターゲットアプリケーションが完成する。

ターゲットボード上で実⾏し、ターミナルソフトなどでターゲットボード上で実⾏し、ターミナルソフトなどで

Hello, mruby!

の表示を確認することで、mrubyの動作を確認できる。

32

Page 33: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング環境へのmrubyポーティング環境へのPlato適用Plato適用

マイコンボード向けPlatoカスタマイズマイコンボード向けPlatoカスタマイズ

33

Page 34: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング環境へのPlato適用

Platoのボード対応に必要なこと

mruby IoT framework – Plato を新たなターゲットボードに対応mruby IoT framework – Plato を新たなターゲットボードに対応させるためには以下が必要となる。

• Plato IDEへのターゲットボード登録• Plato IDEへのターゲットボード登録

• デバイスI/F層ライブラリの実装• デバイスI/F層ライブラリの実装

34

Page 35: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング環境へのPlato適用

Plato IDEへのターゲットボード登録

Plato IDEにターゲットボードを追加するには、以下の情報が必要とPlato IDEにターゲットボードを追加するには、以下の情報が必要となる。

• ターゲットボード名• ターゲットボードID

ターゲットボード名• ターゲットボードID

ターゲットボードIDはライブラリの識別⼦としても使⽤されるため、ターゲットボードIDはライブラリの識別⼦としても使⽤されるため、一意な名称を指定する必要がある。

35

Page 36: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング環境へのPlato適用

デバイスI/F層ライブラリの実装

Platoが提供するライブラリ群はmrubyライブラリ(mrbgems)形式Platoが提供するライブラリ群はmrubyライブラリ(mrbgems)形式で実装されている。Plato提供ライブラリ群のうち、デバイスI/F層のライブラリは動作環境毎に提供される。Plato提供ライブラリ群のうち、デバイスI/F層のライブラリは動作環境毎に提供される。ターゲットボードを追加する場合には、ターゲットボードのデバイスI/F層ライブラリを実装・提供する必要がある。スI/F層ライブラリを実装・提供する必要がある。

提供するライブラリは以下の命名規則に従う必要がある。

mruby-plato-XXXXX-<デバイスID>

Platoアプリケーションでライブラリ “mruby-plato-XXXXX” を使Platoアプリケーションでライブラリ “mruby-plato-XXXXX” を使用する場合に、デバイスIDを名称に付加したターゲットボード用のライブラリ “mruby-plato-XXXXX-<デバイスID>” が自動的に追加登録される。

36

登録される。

Page 37: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング環境へのPlato適用

デバイスI/F層ライブラリの実装

参考までにenziボード用に提供されているデバイスI/F層ライブラリ参考までにenziボード用に提供されているデバイスI/F層ライブラリの一覧を示す。

ライブラリライブラリライブラリライブラリ 内容内容内容内容ライブラリライブラリライブラリライブラリ 内容内容内容内容

mruby-plato-analogio-enzi アナログI/Oライブラリ

mruby-plato-digitalio-enzi デジタルI/Oライブラリmruby-plato-digitalio-enzi デジタルI/Oライブラリ

mruby-plato-gpio-enzi GPIOライブラリ

mruby-plato-i2c-enzi I2Cライブラリ

mruby-plato-machine-enzi マシンライブラリ (delay等) ※必須

mruby-plato-serial-enzi シリアル(UART) I/Fライブラリ

mruby-plato-spi-enzi SPIライブラリ

これらのうちマシンライブラリは必須であるが、それ以外は必要に応じて実装すれば良い。

mruby-plato-spi-enzi SPIライブラリ

37

応じて実装すれば良い。

Page 38: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mrubyポーティング環境へのPlato適用

デバイスI/F層ライブラリのPlatoへの登録

作成したデバイスI/F層ライブラリをPlatoに登録するには、ライブ作成したデバイスI/F層ライブラリをPlatoに登録するには、ライブラリリストファイルを作成する必要がある。ライブラリリストファイルは以下に示すようなJSON形式で記述し、ライブラリリストファイルは以下に示すようなJSON形式で記述し、ファイル名を mgem-<デバイスID>.lst とする必要がある。

ライブラリリストファイルの例 (mgem-hoge.lst)ライブラリリストファイルの例 (mgem-hoge.lst)

{ mrbgems: [

{ “name”: “mruby-plato-machine-hoge”,

“descriptrion”: “PlatoHoge::Machine class”,“descriptrion”: “PlatoHoge::Machine class”,

“author”: “mruby developers”,

“license: “MIT”,

“repository”: “https://github.com/hoge/mruby-plato-machine-hoge”,“repository”: “https://github.com/hoge/mruby-plato-machine-hoge”,

”dependencies”: [

{“name”: “mruby-plato-machine”}

]

38

]

]}

Page 39: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

mruby & Platomruby & Plato

まとめまとめ

39

Page 40: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

Platoに出来ること

• mrubyアプリケーションが簡単に作れる

• アプリケーションの形式、使用するライブラリ• アプリケーションの形式、使用するライブラリ等を詳細に設定可能

• ビルド・プログラム転送可能なIDE• ビルド・プログラム転送可能なIDE

• IoTサービスとの連携

• シミュレーション実⾏• シミュレーション実⾏

40

Page 41: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

まとめ

組込みで使える新言語「mruby」

• Rubyらしさはそのままに軽量化• Rubyらしさはそのままに軽量化

• 色々なところに組み込める

• C/C++と戦わなくても組込みアプリが作れる• C/C++と戦わなくても組込みアプリが作れる

mruby IoTフレームワーク Plato

• 簡単に素早くアプリ作成• 簡単に素早くアプリ作成

• アイデアさえあればアプリ開発可能

• IoT/M2Mのプロトタイピングが可能• IoT/M2Mのプロトタイピングが可能

41

Page 42: mrubyIoTframework ‘Plato’と mrubyのポーティング研修テキスト · ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト(build_config.rb

http://plato.clickhttp://plato.click

おつかれさまでした

42