Mbed OS version of IoT.js implementation running on GR-PEACH

ビルド方法

ビルド環境セットアップ

Host PC要件 : Ubuntu 16.04 (64-bit)



1. 以下のコマンドを実行し、下表に示すツールをインストールします。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install [Package]
PackageVersion
build-essential12.1ubuntu2
gyp0.1+20150913git1f374df9-1ubuntu1
mercurial3.7.3-1ubuntu1
cmake3.5.1-1ubuntu3
git1:2.7.4-0ubuntu1.4
python2.72.7.12-1ubuntu016.04.3
valgrind1:3.11.0-1ubuntu4.2
python-pip8.1.1-2ubuntu0.4

2. 以下のコマンドを実行してMbed OS用ビルドツール mbed CLIをインストールします。

$ sudo -H pip install mbed-cli

3. GNU Arm Embedded Toolchainをインストールします。

  • ダウンロードしたファイルを任意のディレクトリに展開します。
    (以下、展開先を${TOOLCHAIN}と記載します)

tar xjf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
  • ツールチェインのパスを設定します。

環境変数を使用する場合

$ export GCC_ARM_ROOT=${TOOLCHAIN}/gcc-arm-none-eabi-6-2017-q2-update/bin
$ export PATH=$GCC_ARM_ROOT:$PATH

mbed CLIで指定する場合

$ mbed config -G GCC_ARM_PATH $GCC_ARM_ROOT

iotjs環境のビルド

1. 本プログラムのクローン

下記コマンドを実行し、本プログラムをクローンしてください。

$ hg clone https://HinoNaka@os.mbed.com/users/HinoNaka/code/GR-PEACH_mbed-os-iotjs/

クローンが正常に終了すると、GR-PEACH_mbed-os-iotjs という名称のディレクトリが生成されますので、下記コマンドで当該ディレクトリへ移動してください。

$ cd GR-PEACH_mbed-os-iotjs

(Optional)
GR-PEACH-mbed-os-iotjsディレクトリを指す環境変数 ROOTを設定してください。以降の記載は本環境変数が設定されているものとします。

$ export ROOT=$(PWD)

2. 作業用ディレクトリ(e.g. work)を作成し、当該ディレクトリに移動してください。

$ mkdir -p work
$ cd work

(Optional)
作業用ディレクトリを指す環境変数 WORK を設定してください。以降の記載は本環境変数 が設定されているものとします。

$ export WORK=$(PWD)

3. iotjsのソースツリーを取得します。

$ git clone https://github.com/pando-project/iotjs

クローンが正常に終了するとiotjsというディレクトリが生成されますので、当該ディレクトリに移動してください。

$cd iotjs

コミットID: acae9c8b2d40e7598b8d39b630b79113ce880a7e を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)

$ git checkout -b posix acae9c8b2d40e7598b8d39b630b79113ce880a7e

4. mbed-osセットアップ
Mbed OSソースツリーを格納するフォルダを生成し、当該フォルダへ移動します。

$ mkdir -p $(WORK)/iotjs/src/platform/mbedos5
$ cd $(WORK)/iotjs/src/platform/mbedos5

Mbed OSのソースツリーをクローンします。

$ git clone -b mbed-os-5.9 https://github.com/ARMmbed/mbed-os.git

クローンが正常に終了するとmbed-osというディレクトリが生成されますので、当該ディレクトリに移動してください。

$ cd mbed-os

コミットID: 50bd61a4a72332baa6b1bac6caccb44dc5423309 を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)

$ git checkout -b posix 50bd61a4a72332baa6b1bac6caccb44dc5423309

5. sd-driverの取得
下記コマンドでmbedos5ディレクトリへ移動します。

$ cd $(WORK)/iotjs/src/platform/mbedos5

sd-driverをクローンします。

$ git clone https://github.com/ARMmbed/sd-driver.git

クローンが正常終了するとsd-driverディレクトリが生成されますので、当該ディレクトリへ移動します。

$ cd sd-driver

コミットID: c8ae38fb291e086232566b0f1372cfb69c277e84 を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)

$ git checkout -b posix c8ae38fb291e086232566b0f1372cfb69c277e84

6. mbed-gr-libsの取得
下記コマンドでmbedos5ディレクトリへ移動します。

$ cd $(WORK)/iotjs/src/platform/mbedos5

mbed-gr-libsをクローンします。

$ git clone https://github.com/d-kato/mbed-gr-libs

クローンが正常終了するとmbed-gr-libsディレクトリが生成されますので、当該ディレクトリへ移動します。

$ cd mbed-gr-libs

コミットID: d921d611d596ecaebaab49070ef82450c583309c を取得します。
(下記例では、あわせてposixというブランチを作成し、当該ブランチへ切り替えています)

$ git checkout -b posix d921d611d596ecaebaab49070ef82450c583309c

7. AsciiFONTの取得
下記コマンドでmbedos5ディレクトリへ移動します。

$ cd $(WORK)/iotjs/src/platform/mbedos5

AsciiFONTライブラリを追加します。

$ mbed add https://os.mbed.com/teams/Renesas/code/AsciiFont/

8. iotjs環境のビルド
下記コマンドでiotjs環境のビルドディレクトリに移動し、ビルドを実行します。

$ cd $(WORK)/iotjs
$ ./tools/build.py --no-snapshot

9. GR-PEACH用コードのコピー
(Optional) 既存のiotjs環境に上書きする場合、下記コマンドを実行してください。

$ rm -rf $(WORK)/iotjs/deps/posix
$ rm -rf $(WORK)/iotjs/src/ext-modules
$ rm -rf $(WORK)/iotjs/src/platform/mbedos5/iotjs_def.h

下記コマンドでGR-PEACH用コードをコピーします。

$ cp -pr $(ROOT)/src/iotjs/* $(WORK)/iotjs/

10. lwipパッチ適用
以下コマンドでlwipパッチを適用します。

$ cd $(WORK)/iotjs/src/platform/mbedos5/mbed-os
$ git apply lwip_improve.patch

11. ESP32 TRNG対応パッチ適用
以下コマンドでESP32のTRNGを活用するためのパッチを適用します。

$ cd $(WORK)/iotjs/src/platform/mbedos5/mbed-os
$ git apply trng_support.patch

12. Mbed OS版iotjs環境のビルド
下記コマンドを実行してMbed OS版iotjs環境をビルドします。
(リリースビルドの場合)

$ cd $(WORK)/iotjs/src/platform/mbedos5
$ make clean; make DEBUG=0

(デバッグビルドの場合)

$ cd $(WORK)/iotjs/src/platform/mbedos5
$ make clean; make DEBUG=1

13. ビルドが正常に終了すると、以下の通りバイナリが生成されます。
(リリースビルドの場合)

$ ls -l ${WORK}/iotjs/src/platform/mbedos5/BUILD/RZ_A1H/GCC_ARM-RELEASE/iotjs.bin

(デバッグビルドの場合)

$ ls -l ${WORK}/iotjs/src/platform/mbedos5/BUILD/RZ_A1H/GCC_ARM-DEBUG/iotjs.bin

実行方法

1. GR-PEACHにmicro SDカードを挿入します。

2. GR-PEACHのEthernetポートから遠い側のUSBポートとHost PCをマイクロUSBケーブルで接続します。

3. Host PCでGR-PEACHが『mbed:』ドライブとして認識されたら、iotjs.binをmbedドライブにコピーします。

4. ターミナルS/Wを立上げ、『mbed Serial Port』と接続します。
/media/uploads/HinoNaka/img1.jpg
シリアルポートは下記設定としてください。

Baud rate115200
Data8 bit
Paritynone
Stop1 bit
Flow controlnone

5. 正常に書込みが終了したらGR-PEACHのRESETボタンを押下します。

6. ターミナルS/W上に下記メッセージが表示されます。
/media/uploads/HinoNaka/img2.jpg

7. Enterキーを押下してコード入力モードに移行します。
/media/uploads/HinoNaka/img3.jpg

8. 実行するJavascriptコードをターミナルソフトウェアに貼り付けてEnterキーを押下すると、実行開始します。Javascriptコード例については、test/case.txtを参照ください。

Committer:
Osamu Nakamura
Date:
Thu Jul 18 10:43:16 2019 +0900
Revision:
4:52c937978bb3
Parent:
1:c3d69f309845
Remove unnecessary documents

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Osamu Nakamura 1:c3d69f309845 1 ======================================
Osamu Nakamura 1:c3d69f309845 2 ŽÊ^‘—MƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ɂ‚¢‚Ä
Osamu Nakamura 1:c3d69f309845 3 ======================================
Osamu Nakamura 1:c3d69f309845 4
Osamu Nakamura 1:c3d69f309845 5 ŽÊ^‘—MƒTƒ“ƒvƒ‹ƒvƒƒOƒ‰ƒ€‚ɂ‚¢‚Äà–¾‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 6
Osamu Nakamura 1:c3d69f309845 7 ¡ƒtƒ@ƒCƒ‹\¬
Osamu Nakamura 1:c3d69f309845 8
Osamu Nakamura 1:c3d69f309845 9 - server.js : PC ã‚ÅŽÀs‚·‚é Node.js ƒvƒƒOƒ‰ƒ€
Osamu Nakamura 1:c3d69f309845 10 - client.js : GR-PEACH ã‚ÅŽÀs‚·‚é IoT.js ƒvƒƒOƒ‰ƒ€
Osamu Nakamura 1:c3d69f309845 11
Osamu Nakamura 1:c3d69f309845 12 ¡“®ìà–¾
Osamu Nakamura 1:c3d69f309845 13
Osamu Nakamura 1:c3d69f309845 14 PC ‚ªHTTPƒT[ƒoAGR-PEACH ‚ªHTTPƒNƒ‰ƒCƒAƒ“ƒg‚Æ‚µ‚Ä“®ì‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 15
Osamu Nakamura 1:c3d69f309845 16 GR-PEACH ‚ł́Aˆê’èŽüŠú‚ŃJƒƒ‰‚©‚çŽæ‚荞‚ñ‚¾‰æ‘œ‚ðJPEGƒGƒ“ƒR[ƒh‚µA
Osamu Nakamura 1:c3d69f309845 17 JPEGƒf[ƒ^‚ðƒT[ƒo‚Ö‘—M‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 18
Osamu Nakamura 1:c3d69f309845 19 PC ‚Å‚ÍŽóM‚µ‚½JPEGƒf[ƒ^‚ðƒtƒ@ƒCƒ‹‚É•Û‘¶‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 20 ƒtƒ@ƒCƒ‹”‚̏ãŒÀ‚ð’´‚¦‚½ê‡Aƒtƒ@ƒCƒ‹–¼‚ðƒ[ƒe[ƒg‚µAŒÃ‚¢ƒtƒ@ƒCƒ‹‚ð
Osamu Nakamura 1:c3d69f309845 21 ã‘‚«‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 22
Osamu Nakamura 1:c3d69f309845 23 ¡“®ìÝ’è
Osamu Nakamura 1:c3d69f309845 24
Osamu Nakamura 1:c3d69f309845 25 •K—v‚ɉž‚¶‚ăvƒƒOƒ‰ƒ€“à‚̃T[ƒoEƒNƒ‰ƒCƒAƒ“ƒg‚̐ݒè‚ð•ÏX‚µ‚Ä‚­‚¾‚³‚¢B
Osamu Nakamura 1:c3d69f309845 26 išj‚Ì•”•ª‚Í•K{€–Ú‚É‚È‚è‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 27
Osamu Nakamura 1:c3d69f309845 28 - server.js
Osamu Nakamura 1:c3d69f309845 29
Osamu Nakamura 1:c3d69f309845 30 ˆÈ‰º‚̐ݒè‚̕ύX‚ª‰Â”\‚Å‚·B
Osamu Nakamura 1:c3d69f309845 31
Osamu Nakamura 1:c3d69f309845 32 7: const port = 8000; // HTTPƒT[ƒo‚̃|[ƒg”ԍ†
Osamu Nakamura 1:c3d69f309845 33 +1: const maxFileNo = 100; // JPEGƒtƒ@ƒCƒ‹”‚̏ãŒÀ
Osamu Nakamura 1:c3d69f309845 34 +1: const path = './jpeg/'; // JPEGƒtƒ@ƒCƒ‹•Û‘¶ƒtƒHƒ‹ƒ_
Osamu Nakamura 1:c3d69f309845 35
Osamu Nakamura 1:c3d69f309845 36 - client.js
Osamu Nakamura 1:c3d69f309845 37
Osamu Nakamura 1:c3d69f309845 38 ‚²Žg—p‚̊‹«‚ɍ‡‚킹‚Ä‘—MæƒT[ƒo‚ðŽw’肵‚Ä‚­‚¾‚³‚¢B
Osamu Nakamura 1:c3d69f309845 39
Osamu Nakamura 1:c3d69f309845 40 15: var server = {
Osamu Nakamura 1:c3d69f309845 41 +1: host: "172.27.1.196", // HTTPƒT[ƒo‚ÌIPƒAƒhƒŒƒXišj
Osamu Nakamura 1:c3d69f309845 42 +1: port: 8000 // HTTPƒT[ƒo‚̃|[ƒg”ԍ†
Osamu Nakamura 1:c3d69f309845 43 +1: };
Osamu Nakamura 1:c3d69f309845 44
Osamu Nakamura 1:c3d69f309845 45 ‰ŠúÝ’è‚Å‚Í GR-PEACH ‚̃lƒbƒgƒ[ƒNÝ’è‚É‚Í DHCP ‚ðŽg—p‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 46 DHCP ‚ðŽg—p‚µ‚È‚¢ê‡‚͈ȉº‚̕ϐ”‚ð false ‚É‚µ‚Ä‚­‚¾‚³‚¢B
Osamu Nakamura 1:c3d69f309845 47
Osamu Nakamura 1:c3d69f309845 48 21: var dhcp = true; // DHCPŽg—pƒtƒ‰ƒO
Osamu Nakamura 1:c3d69f309845 49
Osamu Nakamura 1:c3d69f309845 50 DHCP ‚ðŽg—p‚µ‚È‚¢ê‡A‚²Žg—p‚̊‹«‚ɍ‡‚킹‚āAGR-PEACH‚̃lƒbƒgƒ[ƒNÝ’è‚ð
Osamu Nakamura 1:c3d69f309845 51 s‚Á‚Ä‚­‚¾‚³‚¢BiDHCP ‚ðŽg—p‚·‚éê‡AˆÈ‰º‚̐ݒè‚Í–³Œø‚Å‚·j
Osamu Nakamura 1:c3d69f309845 52
Osamu Nakamura 1:c3d69f309845 53 22: var ifconfig = {
Osamu Nakamura 1:c3d69f309845 54 +1: ip: "172.27.1.234", // IPƒAƒhƒŒƒX
Osamu Nakamura 1:c3d69f309845 55 +1: netmask: "255.255.255.0", // ƒTƒuƒlƒbƒgƒ}ƒXƒN
Osamu Nakamura 1:c3d69f309845 56 +1: gateway: "172.27.1.1", // ƒfƒtƒHƒ‹ƒgƒQ[ƒgƒEƒFƒC
Osamu Nakamura 1:c3d69f309845 57 +1: dns: "8.8.8.8" // DNSƒT[ƒo
Osamu Nakamura 1:c3d69f309845 58 +1: };
Osamu Nakamura 1:c3d69f309845 59
Osamu Nakamura 1:c3d69f309845 60 JPEGƒf[ƒ^‚Ì‘—MŽüŠú‚ð•ÏX‚·‚éê‡‚́AˆÈ‰º‚Ì’l‚ð•ÏX‚µ‚Ä‚­‚¾‚³‚¢B
Osamu Nakamura 1:c3d69f309845 61
Osamu Nakamura 1:c3d69f309845 62 29: var interval = 1000; // JPEGƒf[ƒ^‘—MŽüŠú(ƒ~ƒŠ•b)
Osamu Nakamura 1:c3d69f309845 63
Osamu Nakamura 1:c3d69f309845 64 ¡ŽÀs€”õ
Osamu Nakamura 1:c3d69f309845 65
Osamu Nakamura 1:c3d69f309845 66 PC ‚É Node.js ‚ÌŽÀsŠÂ‹«‚ð\’z‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 67
Osamu Nakamura 1:c3d69f309845 68 “®ìŠm”FŠÂ‹«
Osamu Nakamura 1:c3d69f309845 69 OS : Windows 8.1 Pro 64bit
Osamu Nakamura 1:c3d69f309845 70 Node.js : Windows Binary 64-bit v10.15.1
Osamu Nakamura 1:c3d69f309845 71
Osamu Nakamura 1:c3d69f309845 72 ˆÈ‰º‚ÌURL‚æ‚èANode.js ‚Ì Windows Binary (.zip) ‚ðƒ_ƒEƒ“ƒ[ƒh‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 73
Osamu Nakamura 1:c3d69f309845 74 https://nodejs.org/en/download/
Osamu Nakamura 1:c3d69f309845 75
Osamu Nakamura 1:c3d69f309845 76 ƒ_ƒEƒ“ƒ[ƒh‚µ‚½ƒtƒ@ƒCƒ‹‚ð”CˆÓ‚̏ꏊ‚ɉ𓀂µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 77 ‰ð“€‚µ‚½ƒtƒHƒ‹ƒ_“à‚É server.js ‚ð”z’u‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 78
Osamu Nakamura 1:c3d69f309845 79 ¡ŽÀs•û–@
Osamu Nakamura 1:c3d69f309845 80
Osamu Nakamura 1:c3d69f309845 81 - ƒT[ƒo‚ÌŽÀs
Osamu Nakamura 1:c3d69f309845 82
Osamu Nakamura 1:c3d69f309845 83 server.js ‚ð”z’u‚µ‚½ƒtƒHƒ‹ƒ_‚ɂāAˆÈ‰º‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 84
Osamu Nakamura 1:c3d69f309845 85 node server.js
Osamu Nakamura 1:c3d69f309845 86
Osamu Nakamura 1:c3d69f309845 87 - ƒNƒ‰ƒCƒAƒ“ƒg‚ÌŽÀs
Osamu Nakamura 1:c3d69f309845 88
Osamu Nakamura 1:c3d69f309845 89 GR-PEACH ‚ð‹N“®‚·‚é‚ƁAƒVƒŠƒAƒ‹ƒRƒ“ƒ\[ƒ‹‚Ɉȉº‚̃ƒbƒZ[ƒW‚ª•\Ž¦‚³‚ê‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 90
Osamu Nakamura 1:c3d69f309845 91 IoT.js for mbed-os...
Osamu Nakamura 1:c3d69f309845 92 mbed-os version: 5.9.3
Osamu Nakamura 1:c3d69f309845 93 build timestamp: MMM DD YYYY HH:MM:SS
Osamu Nakamura 1:c3d69f309845 94
Osamu Nakamura 1:c3d69f309845 95 input js fullpath here:
Osamu Nakamura 1:c3d69f309845 96
Osamu Nakamura 1:c3d69f309845 97 [Enter]ƒL[‚𑗐M‚µ‚āAƒR[ƒh‚Ì“ü—̓‚[ƒh‚Ɉڍs‚µ‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 98
Osamu Nakamura 1:c3d69f309845 99 input javascript code here:
Osamu Nakamura 1:c3d69f309845 100
Osamu Nakamura 1:c3d69f309845 101 client.js ‚Ì“à—e‚ð‘S‚ăRƒs[‚µ‚Ä“\‚è•t‚¯‚é‚Əˆ—‚ªŽn‚Ü‚è‚Ü‚·B
Osamu Nakamura 1:c3d69f309845 102
Osamu Nakamura 1:c3d69f309845 103 ¡“®ìŠm”FŒ‹‰Ê
Osamu Nakamura 1:c3d69f309845 104
Osamu Nakamura 1:c3d69f309845 105 JPEGƒf[ƒ^‚Ì‘—MŽüŠú‚ð1ƒ~ƒŠ•b‚ɐݒ肵A100ŽžŠÔˆÈã˜A‘±‚µ‚Ä“®ì‚·‚邱‚Æ‚ðŠm”F‚µ‚Ü‚µ‚½B
Osamu Nakamura 1:c3d69f309845 106
Osamu Nakamura 1:c3d69f309845 107 ˆÈã