[[PageOutline(2-3, 目次)]] = ECNLプロトタイピング・ツール = ECNLプロトタイピング・ツールは、mruby版ECNLを含むGR-PEACHの動作環境と、Blocklyを使用したRubyコードを出力するWebアプリで構成されたツールです。現状では作成したプロジェクト全体を保存できないなど、未完成な部分の多いプレビューとしてのリリースとなっています。随時、更新していく予定です。 == ダウンロード == ソースコードのダウンロードは、[browser:"EcnlProtoTool/trunk" こちら]のページの下にある「Download in other formats: Zip Archive」からどうぞ。 実行ファイルは[browser:"EcnlProtoTool/trunk/bin/prototool.bin" こちら]です。GR-PEACHのmbedドライブに書き込んでください。 == 操作イメージ == ECHONET Liteの機器の一般照明の動作状態のON/OFFで、GR-PEACHの緑LEDを点灯/消灯を行う操作方法を説明します。 [[Image(proto_tool.gif)]] 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の確認用ソフトの「[https://smarthouse-center.org/sdk/download/ SSNG]」などで、GR-PEACHのIPアドレスに対して一般照明の動作状態を0x30や0x31に設定する電文を送信すると、GR-PEACHの緑のLEDがON/OFFします。 == GR-PEACH上のmruby実行環境 == 通常は上記のWebアプリから動作を書き込んで利用しますが、GR-PEACHのmbedデバッグポートからコマンドを入力することもできます。コマンド一覧は「help」コマンドで表示できます。 下の例では、Rubyファイルを「mruby」コマンドで実行するのと、「mrbc」コマンドでバイトコードにコンパイルし、「mruby -b」でバイトコードを実行する例です。 [[Image(mruby_shell.gif)]] == ビルド == ビルド環境のOSはWindowsで、7と10でビルド出来ることを確認しました。 ビルドに必要であらかじめインストールしてある必要があるのは、以下のアプリです。 ||[https://www.microsoft.com/ja-jp/dev/default.aspx Visual Studio 2015]||Webアプリのビルド|| ||[http://kripken.github.io/emscripten-site/ Emscripten] (SDK Ver.1.37.10)||mrbc.jsのビルド|| ||[http://rubyinstaller.org/downloads/ Ruby] (2.3.3 64bit)||mrubyのビルド|| ||[https://www.renesas.com/ja-jp/products/software-tools/tools/ide/e2studio.html e2studio] (5.3.1)||GR-PEACHアプリのビルド|| ||[https://gcc-renesas.com/ja/rz/rz-download-toolchains/ arm-none-eabi-gcc] (v16.01)||GR-PEACHアプリのビルド|| ||[https://www.java.com/ja/ Java]||JavaScriptのミニファイ|| 以下はリポジトリに含まれています。 ||[http://gnuwin32.sourceforge.net/packages/bison.htm bison] (2.4.1)||mrubyのビルド|| ||[https://yui.github.io/yuicompressor/ 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にコンパイルしたものです。手順としてはこちらを先に行う必要があります。 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と[https://gcc-renesas.com/ja/ 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」に含まれます。 == 使用しているオープンソース == GR-PEACH側には、BusyBoxのviが入っています。BusyBoxはGPLv2でその他のソフトウェアとは性格の違うライセンスとなっていますので、再頒布する際は注意してください。「prototool\src\libbb」フォルダにBusyBoxのソースを含んでいます。 === Webアプリ === ||[http://bridge.net/ Bridge.NET]||Apache License 2.0|| ||[http://jquery.com jQuery]||MIT license|| ||[http://getbootstrap.com Bootstrap]||MIT license|| ||[https://developers.google.com/blockly/ Blockly]||Apache License 2.0|| ||[https://github.com/jeanlazarou/blockly2ruby blockly2ruby]||MIT license|| ||[http://mruby.org/ mruby]||MIT license|| ||[https://ace.c9.io/#nav=about Ace (Ajax.org Cloud9 Editor)]||BSD 3-clause License|| ||[http://xtermjs.org/ xterm.js]||MIT License|| ||[https://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html jay]||4-clause BSD licensed|| ||[https://github.com/smalruby/smalruby-editor Smalruby]||MIT License|| === GR-PEACH側アプリ === ||[https://www.toppers.jp/asp3-kernel.html TOPPERS/ASP3]||TOPPERS License|| ||[https://developer.mbed.org/platforms/Renesas-GR-PEACH/ mbed]||Apache License 2.0|| ||[https://www.toppers.jp/tinet.html TINET]||TOPPERS License|| ||[http://mruby.org/ mruby]||MIT license|| ||[https://github.com/iij/mruby-io mruby-io]||MIT license|| ||[https://github.com/iij/mruby-pack mruby-pack]||MIT license|| ||[https://github.com/iij/mruby-socket mruby-socket]||MIT license|| ||[https://github.com/iij/mruby-dir mruby-dir]||MIT license|| ||[https://github.com/mattn/mruby-onig-regexp mruby-onig-regexp]||MIT license|| ||[https://github.com/k-takata/Onigmo Onigmo (Oniguruma-mod)]||BSD license|| ||[http://elm-chan.org/fsw/ff/00index_j.html FAT File System Module]||BSDライク|| ||[https://github.com/wakayamarb/wrbb-v2lib-firm Wakayama.rb Ruby Board V2 library]||MIT license|| ||[https://www.cubeatsystems.com/ntshell/index.html Natual Tiny Shell]||MIT license|| ||[https://github.com/mattconte/tlsf/ TLSF]||BSD license|| ||[http://bellard.org/tcc/ Tiny C Compiler]||LGPL|| ||[https://www.busybox.net/about.html BusyBox(vi)]||GPLv2|| ||[https://github.com/joyent/http-parser http-parser]||MIT license|| ||[https://github.com/nori0428/mod_websocket mod_websocket]||lighttpd LICENCE (revised BSD license)|| ||[https://github.com/adamdunkels/uip uIP]||BSD 3-clause license|| == TCP Socket API == mrubyの拡張機能mrbgemのmruby-socketを含んでいるので、Ruby版Socket APIを使用出来ます。 下の例では、「[http://blog.codebook-10000.com/entry/20130809/1376057341 RubyでSocketプログラミング超入門編]」に書かれている記事のRubyコードを実行した様子です。GR-PEACHとBash on WindowsのRubyとのTCP通信を行う例です。 [[Image(tcp_echo.gif)]] == おまけ == Tiny C Compilerで、C言語ファイルをELFファイルにコンパイルする様子です。現状ではリンクや実行は出来ません。mrubyのJITなどに発展できないかの試行用です。 [[Image(tcc_shell.gif)]]