wiki:EcnlProtoTool

Version 12 (modified by coas-nagasima, 7 years ago) ( diff )

--

ECNLプロトタイピング・ツール

ECNLプロトタイピング・ツールは、mruby版ECNLを含むGR-PEACHの動作環境と、Blocklyを使用したRubyコードを出力するWebアプリで構成されたツールです。現状では作成したプロジェクト全体を保存できないなど、未完成な部分の多いプレビューとしてのリリースとなっています。随時、更新していく予定です。

実行にはmicroSDカードが必要で、Ethernetも使用するためmicroSDカードソケットとEthernetソケットが実装されているFULL版のGR-PEACHを使用します。

ダウンロード

ソースコードのダウンロードは、こちらのページの下にある「Download in other formats: Zip Archive」からどうぞ。

実行ファイルはこちらです。GR-PEACHのmbedドライブに書き込んでください。

操作イメージ

ECHONET Liteの機器の一般照明の動作状態のON/OFFで、GR-PEACHの緑LEDを点灯/消灯を行う操作方法を説明します。

  1. GR-PEACHは固定のIPアドレス「192.168.137.110」となっているので、サブネットの合っているPCのブラウザから「http://192.168.137.110/」をURLとして開きます。(IE、Edge、Chrome、FireFoxでは、表示されますが、Operaでは表示が途中て止まってしまいます。原因は未調査です。)
  2. 画面は、ブロック、Ruby、出力のタブがあり、ブロックのタブにはメインループやECHONET機器やノードに対応するクラスを選択する領域と、Blocklyによるプログラミングの領域があります。Blocklyの部分にはツールボックスがあり、標準のブロックの他にTOPPERS/ECNLのAPIブロックとECHONET機器のプロパティブロックがあります。また、GR-PEACH自体の制御のためにArduinoブロックがあります。ArduinoブロックはGR-CITRUSのRuby版Arduino APIをブロック化したものです。動作はLEDのdigitalWriteしか確認が出来ていない状況です。
  3. 上の操作例では、「新しい機器オブジェクト」の追加画面から「一般照明」を選択して追加します。
  4. 「クラス」の領域で選択した一般照明で表示されているBlocklyの画面で、ツールボックスからECHONET Lite Propertyの中から「動作状態」を選んで配置します。このブロックには、「動作状態」を「ON」にする電文を受信した時と、「OFF」にする電文を受信した時の処理を、ブロックで記述することが出来ます。
  5. 動作状態がONに設定されたときは、Arduino APIのデジタルライトで緑のLEDをHIGHになるようにし、OFFに設定されたときは、緑のLEDをLOWになるように処理を書きます。
  6. 「クラス」の領域で「MainLoop」を選択し、緑のLEDのピンが出力ポートになるよう、「PINモードの設定」をOUTPUTにします。
  7. 右上の「実行」ボタンの押下で、GR-PEACHに今定義した動作が書き込まれ実行されます。
  8. 実行状態でECHONET Liteの確認用ソフトの「SSNG」などで、GR-PEACHのIPアドレスに対して一般照明の動作状態を0x30や0x31に設定する電文を送信すると、GR-PEACHの緑のLEDがON/OFFします。

GR-PEACH上のmruby実行環境

通常は上記のWebアプリから動作を書き込んで利用しますが、GR-PEACHのmbedデバッグポートからコマンドを入力することもできます。コマンド一覧は「help」コマンドで表示できます。

下の例では、Rubyファイルを「mruby」コマンドで実行するのと、「mrbc」コマンドでバイトコードにコンパイルし、「mruby -b」でバイトコードを実行する例です。

ビルド

ビルド環境のOSはWindowsで、7と10でビルド出来ることを確認しました。

ビルドに必要であらかじめインストールしてある必要があるのは、以下のアプリです。

Visual Studio 2015Webアプリのビルド
Emscripten (SDK Ver.1.37.10)mrbc.jsのビルド
Ruby (2.3.3 64bit)mrubyのビルド
e2studio (5.3.1)GR-PEACHアプリのビルド
arm-none-eabi-gcc (v16.01)GR-PEACHアプリのビルド
JavaJavaScriptのミニファイ

以下はリポジトリに含まれています。

bison (2.4.1)mrubyのビルド
yuicompressor (2.4.8)JavaScriptのミニファイ

Webアプリのビルド

WebアプリのビルドにはVisual Studio 2015を使用します。

「webapp\webmrbc\webmrbc.sln」を開いてビルドします。C#で書かれたコードはBridge.NETによりJavaScriptにコンパイルされ、「webapp\webmrbc\js」フォルダに「webmrbc.js」が出力されます。Bridge.NETはNuGetパッケージで、Visual Studio 2015のビルド時に自動的にダウンロード、インストールされて、ビルドに使用されます。Webアプリはこのプロジェクトで、デバッグすることが出来ます。

ビルドが成功するとビルド後のビルドイベントのコマンド実行により、「httpd-fs」フォルダにGR-PEACHに書き込むWebコンテンツがコピーされ、「tools\makefsdata.exe」で「httpd-fs.bin」にFatFSのディスクイメージとして、まとめられます。

Webアプリには、Rubyコードをブラウザ上でmrubyのバイトコードにコンパイルするために「mrbc.js」というファイルが含まれています。これはmrubyのコマンドmrbcをEmscriptenでJavaScriptにコンパイルしたものです。mrbc.jsはコンパイルしたものがリポジトリに登録してあるため、Webアプリのビルドでは省略できますが、mrubyを更新する場合は、こちらを先に行う必要があります。

mrubyのビルド環境にEmscriptenのtoolchain定義を追加してビルドします。「mruby-1.2.0\tasks\toolchains\emscripten.rake」がEmscriptenのtoolchainの定義です。

リポジトリにある「mruby-1.2.0\build_config.rb」は、GR-PEACH向けのビルドのみが有効になっていますが、コメントアウトされた最後のブロックを有効にすることでmrbc.jsをコンパイルできます。=beginから=endまでのコメントアウトされたブロックがmrbc.js用のビルドになります。

このコメントアウトを戻して、通常のmrubyのビルドと同様にmakeを実行すると「mruby-1.2.0\build\emscripten\bin」に「mrbc.js」が出力されます。他のJavaScriptは「tools\yuicompressor-2.4.8.jar」でミニファイしていますが、mrbc.jsはうまくミニファイ出来ないので、https://jscompress.com/のサイトを利用してミニファイしています。ビルドしたmrbc.jsとmrbc.min.jsは、「webapp\webmrbc」フォルダにコピーしておきます。

GR-PEACH側アプリのビルド

Renesasの総合開発環境のe2studioとGNU Tools(旧KPIT)のコンパイラ・ツール・チェーン「GNUARM-NONE Toolchain v16.01」を使用します。

e2studioのメニュー「ファイル」→「インポート」で、EcnlProtoToolを展開したフォルダを指定します。以下のプロジェクトが表示されるので、すべて取り込みます。

asp3_dcreTOPPERS/ASP3+mbedlibkernel.a
ntshellNatural tiny shell、FatFS、TINET、Socketなどntshell.binasp3_dcreに依存
onigmo-5.15.0mruby用正規表現ライブラリlibonigmo.a
mrbgemsmruby-onig-regexp
mruby-io、mruby-pack、mruby-socket、mruby-dir
mruby-ecnl
mruby-arduino(Wakayama.rb Ruby Board V2 library)
-ファイル管理のみ
mruby-1.2.0mrubylibmruby.aonigmo-5.15.0、mrbgemsに依存
プロジェクトのプロパティの変更が必要
tcc-0.9.26Tiny C compilerlibtcc.a
prototoolGR-PEACH側アプリprototool.binntshell、mruby-1.2.0、tcc-0.9.26に依存
toolsビルドに必要なコマンド-ファイル管理のみ

e2studioですべてのプロジェクトをビルドします。最終的には「prototool\Debug\prototool.bin」が出力され、これをGR-PEACHに書き込みます。 デバッグは、ntshellとprototoolで出来ますが、それぞれに登録されたソースコードのみがシンボルデバッグできます。 「ntshell\webserver\httpd_fs.bin」は、Webアプリのコンテンツを含んだROMディスクのイメージで、Webアプリのビルドで出力されるファイルです。GR-PEACH側アプリのビルドで必要なファイルの一つで、最終成果物「prototool.bin」に含まれます。

mrubyをビルドするために、以下の操作を行い環境変数PATHに必要なコマンドへのパスを設定します。

  1. e2studioの「プロジェクト・エクスプローラー」で「mruby-1.2.0」を選択します。
  2. 右クリックして表示されたメニューの一番下の「プロパティ」を選択します。
  3. 左枠の「C/C++ ビルド」の中の「環境」を選択します。
  4. 右枠の「設定する環境変数」の「PATH」を選択して、右端の「編集」ボタンを押します。
  5. 「値」の先頭に「C:\Mingw\bin;」を追加します。また、最後に「;${workspace_loc:/tools/bin}」を追加します。
  6. 「OK」ボタンで「変数の編集」と閉じ、「プロパティ:mruby-1.2.0」画面の「OK」ボタンで確定します。

「C:\Mingw\bin;」はmrubyのホストコマンドをビルドするのに必要で、MinGWなどのgcc.exeがあるパスを指定してください。
「;${workspace_loc:/tools/bin}」は、bison.exeのあるパスを指定しています。

使用しているオープンソース

GR-PEACH側には、BusyBoxのviが入っています。BusyBoxはGPLv2でその他のソフトウェアとは性格の違うライセンスとなっていますので、再頒布する際は注意してください。「prototool\src\libbb」フォルダにBusyBoxのソースを含んでいます。

Webアプリ

Bridge.NETApache License 2.0
jQueryMIT license
BootstrapMIT license
BlocklyApache License 2.0
blockly2rubyMIT license
mrubyMIT license
Ace (Ajax.org Cloud9 Editor)BSD 3-clause License
xterm.jsMIT License
jay4-clause BSD licensed
SmalrubyMIT License

GR-PEACH側アプリ

TOPPERS/ASP3TOPPERS License
mbedApache License 2.0
TINETTOPPERS License
mrubyMIT license
mruby-ioMIT license
mruby-packMIT license
mruby-socketMIT license
mruby-dirMIT license
mruby-onig-regexpMIT license
Onigmo (Oniguruma-mod)BSD license
FAT File System ModuleBSDライク
Wakayama.rb Ruby Board V2 libraryMIT license
Natual Tiny ShellMIT license
TLSFBSD license
Tiny C CompilerLGPL
BusyBox(vi)GPLv2
http-parserMIT license
mod_websocketlighttpd LICENCE (revised BSD license)
uIPBSD 3-clause license

TCP Socket API

mrubyの拡張機能mrbgemのmruby-socketを含んでいるので、Ruby版Socket APIを使用出来ます。

下の例では、「RubyでSocketプログラミング超入門編」に書かれている記事のRubyコードを実行した様子です。GR-PEACHのmrubyで実行したものとBash on WindowsのRubyで実行したものとでTCP通信を行う例です。

おまけ

Tiny C Compilerで、C言語ファイルをELFファイルにコンパイルする様子です。現状ではリンクや実行は出来ません。

Attachments (4)

Note: See TracWiki for help on using the wiki.