目次
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を点灯/消灯を行う操作方法を説明します。
- GR-PEACHは固定のIPアドレス「192.168.137.110」となっているので、サブネットの合っているPCのブラウザから「
http://192.168.137.110/
」をURLとして開きます。(IE、Edge、Chrome、FireFoxでは、表示されますが、Operaでは表示が途中て止まってしまいます。原因は未調査です。) - 画面は、ブロック、Ruby、出力のタブがあり、ブロックのタブにはメインループやECHONET機器やノードに対応するクラスを選択する領域と、Blocklyによるプログラミングの領域があります。Blocklyの部分にはツールボックスがあり、標準のブロックの他にTOPPERS/ECNLのAPIブロックとECHONET機器のプロパティブロックがあります。また、GR-PEACH自体の制御のためにArduinoブロックがあります。ArduinoブロックはGR-CITRUSのRuby版Arduino APIをブロック化したものです。動作はLEDのdigitalWriteしか確認が出来ていない状況です。
- 上の操作例では、「新しい機器オブジェクト」の追加画面から「一般照明」を選択して追加します。
- 「クラス」の領域で選択した一般照明で表示されているBlocklyの画面で、ツールボックスからECHONET Lite Propertyの中から「動作状態」を選んで配置します。このブロックには、「動作状態」を「ON」にする電文を受信した時と、「OFF」にする電文を受信した時の処理を、ブロックで記述することが出来ます。
- 動作状態がONに設定されたときは、Arduino APIのデジタルライトで緑のLEDをHIGHになるようにし、OFFに設定されたときは、緑のLEDをLOWになるように処理を書きます。
- 「クラス」の領域で「MainLoop」を選択し、緑のLEDのピンが出力ポートになるよう、「PINモードの設定」をOUTPUTにします。
- 右上の「実行」ボタンの押下で、GR-PEACHに今定義した動作が書き込まれ実行されます。
- 実行状態でECHONET Liteの確認用ソフトの「SSNG」などで、GR-PEACHのIPアドレスに対して一般照明の動作状態を0x30や0x31に設定する電文を送信すると、GR-PEACHの緑のLEDがON/OFFします。
アップロードしたファイル
アップロードしたファイルは、SDカードの「1:/Upload/main.mrb」に保存されます。
リセット時は、このファイルがあるとロードして実行するようになっています。ロードせずに起動したい場合は、GR-PEACHのユーザーボタンを押しながら起動します。
GR-PEACH上のmruby実行環境
通常は上記のWebアプリから動作を書き込んで利用しますが、GR-PEACHのmbedデバッグポートからコマンドを入力することもできます。コマンド一覧は「help」コマンドで表示できます。
下の例では、Rubyファイルを「mruby」コマンドで実行するのと、「mrbc」コマンドでバイトコードにコンパイルし、「mruby -b」でバイトコードを実行する例です。
ビルド
ビルド環境のOSはWindowsで、7と10でビルド出来ることを確認しました。
ビルドに必要であらかじめインストールしてある必要があるのは、以下のアプリです。
Visual Studio 2015 | Webアプリのビルド |
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アプリのビルド |
Java | JavaScriptのミニファイ |
以下はリポジトリに含まれています。
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_dcre | TOPPERS/ASP3+mbed | libkernel.a | |
ntshell | Natural tiny shell、FatFS、TINET、Socketなど | ntshell.bin | asp3_dcreに依存 |
onigmo-5.15.0 | mruby用正規表現ライブラリ | libonigmo.a | |
mrbgems | mruby-onig-regexp mruby-io、mruby-pack、mruby-socket、mruby-dir mruby-ecnl mruby-arduino(Wakayama.rb Ruby Board V2 library) | - | ファイル管理のみ |
mruby-1.2.0 | mruby | libmruby.a | onigmo-5.15.0、mrbgemsに依存 ※プロジェクトのプロパティの変更が必要 |
tcc-0.9.26 | Tiny C compiler | libtcc.a | |
prototool | GR-PEACH側アプリ | prototool.bin | ntshell、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に必要なコマンドへのパスを設定します。
- e2studioの「プロジェクト・エクスプローラー」で「mruby-1.2.0」を選択します。
- 右クリックして表示されたメニューの一番下の「プロパティ」を選択します。
- 左枠の「C/C++ ビルド」の中の「環境」を選択します。
- 右枠の「設定する環境変数」の「PATH」を選択して、右端の「編集」ボタンを押します。
- 「値」の最後に「;${workspace_loc:/tools/bin}」を追加します。
- 「OK」ボタンで「変数の編集」と閉じ、「プロパティ:mruby-1.2.0」画面の「OK」ボタンで確定します。
「;${workspace_loc:/tools/bin}」は、bison.exeのあるパスを指定しています。
使用しているオープンソース
GR-PEACH側には、BusyBoxのviが入っています。BusyBoxはGPLv2でその他のソフトウェアとは性格の違うライセンスとなっていますので、再頒布する際は注意してください。「prototool\src\libbb」フォルダにBusyBoxのソースを含んでいます。
Webアプリ
Bridge.NET | Apache License 2.0 |
jQuery | MIT license |
Bootstrap | MIT license |
Blockly | Apache License 2.0 |
blockly2ruby | MIT license |
mruby | MIT license |
Ace (Ajax.org Cloud9 Editor) | BSD 3-clause License |
xterm.js | MIT License |
jay | 4-clause BSD licensed |
Smalruby | MIT License |
GR-PEACH側アプリ
TOPPERS/ASP3 | TOPPERS License |
mbed | Apache License 2.0 |
TINET | TOPPERS License |
mruby | MIT license |
mruby-io | MIT license |
mruby-pack | MIT license |
mruby-socket | MIT license |
mruby-dir | MIT license |
mruby-onig-regexp | MIT license |
Onigmo (Oniguruma-mod) | BSD license |
FAT File System Module | BSDライク |
Wakayama.rb Ruby Board V2 library | MIT license |
Natual Tiny Shell | MIT license |
TLSF | BSD license |
Tiny C Compiler | LGPL |
BusyBox(vi) | GPLv2 |
http-parser | MIT license |
mod_websocket | lighttpd LICENCE (revised BSD license) |
uIP | BSD 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)
- proto_tool.gif (2.3 MB ) - added by 6 years ago.
- mruby_shell.gif (587.8 KB ) - added by 6 years ago.
- tcp_echo.gif (1.1 MB ) - added by 6 years ago.
- tcc_shell.gif (723.4 KB ) - added by 6 years ago.