避難場所

Entries

ArduinoをJavaScriptで操作してみる 1 ~まずは、Node.js とnpm のインストから・・

Node.js にトライしてみます。
これはサーバー・サイドで動く、JavaScript インタープリターです。
コマンドラインでなにか打てば即応答するので、そうだとわかります。
 また、何万もの同時接続が生じてもブロックが発生することなく、
たった 1 台のコンピューターで処理できるプログラムが作れるとあります。
残念ながらこれをアンチョコに確かめる術を知りませんが、
いずれにしても、優れモノです。
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
13番ピンに繋いだLEDをチカチカさせる、node上で動くJavaScript動作中・・・
 クリックで原寸大
arduinoJava1_s.jpg


 ソフトは公式サイトからダウンロードして、インストールするだけです。
  ◇ http://nodejs.org/ --> こちら

   現時点の安定版は node-v5.7.0-x86.msi
   長期保守される版、node-v4.3.1-x86.msi

npmも同時にインストされます。<-- ここ、ポイント

Your environment has been set up for using Node.js 5.7.0 (ia32) and npm.
C:Documents and Settingstek>npm --version ・・そのバージョンが確認できます。
3.6.0 ・・即返答

あと、Arduinoを操作するためのNode.jsモジュール「 johnny-five」ですが、
これも公式サイトから貰ってきます。
 ◇ GitHub - marcelklehr/nodist: Natural node.js and io.js version manager for windows.--> こちら
右上の方に「Download ZIP」ボタンがあるのでクリックしてダウンロードし、
解凍します。その全部を、パスがとおっていて便利な
C:Program Filesnodejsnode_modulesディレクトリに「johnny-five」というディレクトリをつくり、そこに丸ごと放り込み準備をします。
 ※※パスをちゃんと設定すれば任意のディレクトリに置けますが、ここでは、デフォルトのままでやってみます。

いよいよそのインストですが、
コマンドプロンプトで、
>npm install johnny-five
インストは始めましたが・・・
johnny-five_inst.png
エラーを吐き出し、終わってしまいました。
ぬぬ!? 

C:Documents and Settingstek>npm install johnny-five
npm ERR! Windows_NT 5.1.2600
npm ERR! argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\
node_modules\npm\bin\npm-cli.js" "install" "johnny-five"
npm ERR! node v5.7.0
npm ERR! npm v3.6.0
npm ERR! code ECONNREFUSED
npm ERR! errno ECONNREFUSED
npm ERR! syscall connect

npm ERR! Error: connect ECONNREFUSED 103.245.222.162:443
npm ERR! at Object.exports._errnoException (util.js:856:11)
npm ERR! at exports._exceptionWithHostPort (util.js:879:20)
npm ERR! at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1057:14)
npm ERR! { [Error: connect ECONNREFUSED 103.245.222.162:443]
npm ERR! code: 'ECONNREFUSED',
npm ERR! errno: 'ECONNREFUSED',
npm ERR! syscall: 'connect',
npm ERR! address: '103.245.222.162',
npm ERR! port: 443 }
npm ERR!
npm ERR! If you are behind a proxy, please make sure that the
npm ERR! 'proxy' config is set properly. See: 'npm help config'

npm ERR! Please include the following file with any support request:
npm ERR! C:Documents and Settingsteknpm-debug.log

エラーの中身をみると「なるほど」というような内容です。
どうやらESET Smart SecurityのFirewallが外部アクセスをストップさせていたことが直接の原因と窺われます。
ということで、外部アクセスを許可しないとインストさせてくれそうにないので、
こんどはルールを作ってアクセスさせます。
思った通り、エラーなく終了しました。

johnny-five_inst2.png
johnny-five_inst3.png
johnny-five_inst4.png

C:Documents and Settingstek>npm install johnny-five
を実行するとそこのホームディレクトリに「node_modules」を作られ、53.6MBがごそっとインストされます。
他に、「.node_repl_history」ファイルもそこのホームディレクトリに作られます。
> serialport@2.0.6 install C:Documents and Settingsteknode_modulesserialport

> node-pre-gyp install --fallback-to-build

[serialport] Success: "C:Documents and Settingsteknode_modulesserialportbui
ldReleasenode-v47-win32-ia32serialport.node" is installed via remote
C:Documents and Settingstek
`-- johnny-five@0.9.25
+-- browser-serialport@2.0.3
+-- chalk@1.1.1
| +-- ansi-styles@2.2.0
| | `-- color-convert@1.0.0
| +-- escape-string-regexp@1.0.5
| +-- has-ansi@2.0.0
| | `-- ansi-regex@2.0.0
| +-- strip-ansi@3.0.1
| `-- supports-color@2.0.0
+-- color-convert@0.5.3
+-- descriptor@0.1.0
+-- ease-component@1.0.0
+-- es6-shim@0.34.4
+-- firmata@0.8.4
| `-- es6-shim@0.33.13
+-- lodash.clonedeep@4.3.0
| `-- lodash._baseclone@4.5.0
+-- lodash.debounce@4.0.3
+-- nanotimer@0.3.10
+-- serialport@2.0.6
| +-- async@0.9.0
| +-- bindings@1.2.1
| +-- debug@2.2.0
| | `-- ms@0.7.1
| +-- nan@2.0.9
| +-- node-pre-gyp@0.6.18
| | +-- mkdirp@0.5.1
| | | `-- minimist@0.0.8
| | +-- nopt@3.0.6
| | | `-- abbrev@1.0.7
| | +-- npmlog@2.0.0
| | | +-- ansi@0.3.0
| | | +-- are-we-there-yet@1.0.5
| | | | +-- delegates@0.1.0
| | | | `-- readable-stream@2.0.5
| | | | +-- core-util-is@1.0.2
| | | | +-- inherits@2.0.1
| | | | +-- isarray@0.0.1
| | | | +-- process-nextick-args@1.0.6
| | | | +-- string_decoder@0.10.31
| | | | `-- util-deprecate@1.0.2
| | | `-- gauge@1.2.2
| | | +-- has-unicode@1.0.1
| | | +-- lodash.pad@3.1.1
| | | | +-- lodash._basetostring@3.0.1
| | | | `-- lodash._createpadding@3.6.1
| | | | `-- lodash.repeat@3.0.1
| | | +-- lodash.padleft@3.1.1
| | | | +-- lodash._basetostring@3.0.1
| | | | `-- lodash._createpadding@3.6.1
| | | | `-- lodash.repeat@3.0.1
| | | `-- lodash.padright@3.1.1
| | | +-- lodash._basetostring@3.0.1
| | | `-- lodash._createpadding@3.6.1
| | | `-- lodash.repeat@3.0.1
| | +-- rc@1.1.5
| | | +-- deep-extend@0.4.0
| | | +-- ini@1.3.4
| | | +-- minimist@1.2.0
| | | `-- strip-json-comments@1.0.4
| | +-- request@2.67.0
| | | +-- aws-sign2@0.6.0
| | | +-- bl@1.0.0
| | | | `-- readable-stream@2.0.5
| | | | +-- core-util-is@1.0.2
| | | | +-- inherits@2.0.1
| | | | +-- isarray@0.0.1
| | | | +-- process-nextick-args@1.0.6
| | | | +-- string_decoder@0.10.31
| | | | `-- util-deprecate@1.0.2
| | | +-- caseless@0.11.0
| | | +-- combined-stream@1.0.5
| | | | `-- delayed-stream@1.0.0
| | | +-- extend@3.0.0
| | | +-- forever-agent@0.6.1
| | | +-- form-data@1.0.0-rc3
| | | | `-- async@1.5.0
| | | +-- har-validator@2.0.3
| | | | +-- chalk@1.1.1
| | | | | +-- ansi-styles@2.1.0
| | | | | +-- escape-string-regexp@1.0.3
| | | | | +-- has-ansi@2.0.0
| | | | | | `-- ansi-regex@2.0.0
| | | | | +-- strip-ansi@3.0.0
| | | | | | `-- ansi-regex@2.0.0
| | | | | `-- supports-color@2.0.0
| | | | +-- commander@2.9.0
| | | | | `-- graceful-readlink@1.0.1
| | | | +-- is-my-json-valid@2.12.3
| | | | | +-- generate-function@2.0.0
| | | | | +-- generate-object-property@1.2.0
| | | | | | `-- is-property@1.0.2
| | | | | +-- jsonpointer@2.0.0
| | | | | `-- xtend@4.0.1
| | | | `-- pinkie-promise@2.0.0
| | | | `-- pinkie@2.0.1
| | | +-- hawk@3.1.2
| | | | +-- boom@2.10.1
| | | | +-- cryptiles@2.0.5
| | | | +-- hoek@2.16.3
| | | | `-- sntp@1.0.9
| | | +-- http-signature@1.1.0
| | | | +-- assert-plus@0.1.5
| | | | +-- jsprim@1.2.2
| | | | | +-- extsprintf@1.0.2
| | | | | +-- json-schema@0.2.2
| | | | | `-- verror@1.3.6
| | | | `-- sshpk@1.7.1
| | | | +-- asn1@0.2.3
| | | | +-- assert-plus@0.2.0
| | | | +-- dashdash@1.10.1
| | | | | `-- assert-plus@0.1.5
| | | | +-- ecc-jsbn@0.1.1
| | | | +-- jodid25519@1.0.2
| | | | +-- jsbn@0.1.0
| | | | `-- tweetnacl@0.13.2
| | | +-- is-typedarray@1.0.0
| | | +-- isstream@0.1.2
| | | +-- json-stringify-safe@5.0.1
| | | +-- mime-types@2.1.8
| | | | `-- mime-db@1.20.0
| | | +-- node-uuid@1.4.7
| | | +-- oauth-sign@0.8.0
| | | +-- qs@5.2.0
| | | +-- stringstream@0.0.5
| | | +-- tough-cookie@2.2.1
| | | `-- tunnel-agent@0.4.2
| | +-- rimraf@2.4.4
| | | `-- glob@5.0.15
| | | +-- inflight@1.0.4
| | | | `-- wrappy@1.0.1
| | | +-- inherits@2.0.1
| | | +-- minimatch@3.0.0
| | | | `-- brace-expansion@1.1.2
| | | | +-- balanced-match@0.3.0
| | | | `-- concat-map@0.0.1
| | | +-- once@1.3.3
| | | | `-- wrappy@1.0.1
| | | `-- path-is-absolute@1.0.0
| | +-- semver@5.1.0
| | +-- tar@2.2.1
| | | +-- block-stream@0.0.8
| | | +-- fstream@1.0.8
| | | | `-- graceful-fs@4.1.2
| | | `-- inherits@2.0.1
| | `-- tar-pack@3.1.2
| | +-- debug@0.7.4
| | +-- fstream@1.0.8
| | | +-- graceful-fs@4.1.2
| | | `-- inherits@2.0.1
| | +-- fstream-ignore@1.0.3
| | | +-- inherits@2.0.1
| | | `-- minimatch@3.0.0
| | | `-- brace-expansion@1.1.2
| | | +-- balanced-match@0.3.0
| | | `-- concat-map@0.0.1
| | +-- once@1.1.1
| | +-- readable-stream@2.0.5
| | | +-- core-util-is@1.0.2
| | | +-- inherits@2.0.1
| | | +-- isarray@0.0.1
| | | +-- process-nextick-args@1.0.6
| | | +-- string_decoder@0.10.31
| | | `-- util-deprecate@1.0.2
| | `-- uid-number@0.0.3
| +-- node-pre-gyp-github@1.1.1
| | +-- commander@2.9.0
| | | `-- graceful-readlink@1.0.1
| | +-- github@0.2.4
| | +-- mime@1.3.4
| | `-- request@2.67.0
| | +-- aws-sign2@0.6.0
| | +-- bl@1.0.0
| | | `-- readable-stream@2.0.5
| | | +-- core-util-is@1.0.2
| | | +-- inherits@2.0.1
| | | +-- isarray@0.0.1
| | | +-- process-nextick-args@1.0.6
| | | +-- string_decoder@0.10.31
| | | `-- util-deprecate@1.0.2
| | +-- caseless@0.11.0
| | +-- combined-stream@1.0.5
| | | `-- delayed-stream@1.0.0
| | +-- extend@3.0.0
| | +-- forever-agent@0.6.1
| | +-- form-data@1.0.0-rc3
| | | `-- async@1.5.0
| | +-- har-validator@2.0.3
| | | +-- chalk@1.1.1
| | | | +-- ansi-styles@2.1.0
| | | | +-- escape-string-regexp@1.0.4
| | | | +-- has-ansi@2.0.0
| | | | | `-- ansi-regex@2.0.0
| | | | +-- strip-ansi@3.0.0
| | | | | `-- ansi-regex@2.0.0
| | | | `-- supports-color@2.0.0
| | | +-- is-my-json-valid@2.12.3
| | | | +-- generate-function@2.0.0
| | | | +-- generate-object-property@1.2.0
| | | | | `-- is-property@1.0.2
| | | | +-- jsonpointer@2.0.0
| | | | `-- xtend@4.0.1
| | | `-- pinkie-promise@2.0.0
| | | `-- pinkie@2.0.1
| | +-- hawk@3.1.2
| | | +-- boom@2.10.1
| | | +-- cryptiles@2.0.5
| | | +-- hoek@2.16.3
| | | `-- sntp@1.0.9
| | +-- http-signature@1.1.0
| | | +-- assert-plus@0.1.5
| | | +-- jsprim@1.2.2
| | | | +-- extsprintf@1.0.2
| | | | +-- json-schema@0.2.2
| | | | `-- verror@1.3.6
| | | `-- sshpk@1.7.1
| | | +-- asn1@0.2.3
| | | +-- assert-plus@0.2.0
| | | +-- dashdash@1.10.1
| | | | `-- assert-plus@0.1.5
| | | +-- ecc-jsbn@0.1.1
| | | +-- jodid25519@1.0.2
| | | +-- jsbn@0.1.0
| | | `-- tweetnacl@0.13.2
| | +-- is-typedarray@1.0.0
| | +-- isstream@0.1.2
| | +-- json-stringify-safe@5.0.1
| | +-- mime-types@2.1.8
| | | `-- mime-db@1.20.0
| | +-- node-uuid@1.4.7
| | +-- oauth-sign@0.8.0
| | +-- qs@5.2.0
| | +-- stringstream@0.0.5
| | +-- tough-cookie@2.2.1
| | `-- tunnel-agent@0.4.2
| +-- optimist@0.6.1
| | +-- minimist@0.0.10
| | `-- wordwrap@0.0.3
| `-- sf@0.1.7
`-- temporal@0.5.0

npm WARN enoent ENOENT: no such file or directory, open 'C:Documents and Settin
gstekpackage.json'
npm WARN tek No description
npm WARN tek No repository field.
npm WARN tek No README data
npm WARN tek No license field.


C:Documents and Settingstek>
パスが通ってないことを承知で、
あらかじめ作っておいた「LEDちかちかプログラムarduino.js」を任意の場所で起動させると、
案の定「ファイルが所定のディレクトリにない」と怒られました。
C:Documents and Settingstek>node arduino.js
module.js:341
throw err;
^

Error: Cannot find module 'C:Documents and Settingstekarduino.js'
at Function.Module._resolveFilename (module.js:339:15)
at Function.Module._load (module.js:290:25)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:141:18)
at node.js:933:3

そこで、ファイルの置き場所をパスが通っている「C:Documents and Settingstek」へ移動させて実行させると
LEDがチカチカ、ちゃんと動きました。
node_arduino_js_OK.gif
C:Documents and Settingstek>node arduino.js
1456240145404 Device(s) COM5,COM1
1456240145423 Connected COM5
1456240148711 Repl Initialized
>>

ちなみに、arduino.js の中身です。
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
// デジタル13番ピンに100ミリ秒間隔で点滅
(new five.Led(13)).strobe();

});

話が前後して恐縮ですが、
LEDちかちかプログラムが動くには、
あらかじめArduinoがFirmata通信できる「StandardFirmata」を書き込んでおく必要があります。
Arduino IDEをつかって、StandardFirmataを書き込みます。

 メニューバー「ファイル」→「スケッチの例」→「Frimata」→「StandardFirmata」を選択し、
「検証」→「マイコンボードに書き込む」

StandardFirmataを書き込む
 クリックで原寸大
StandardFirmata_s.gif

このFirmata通信プロトコルを通して、パソコン上で動くプログラムでArduinoをダイレクトに制御できます。
ということで、JavaScriptだけでなく、PythonやRubyでも同様にArduinoを動かせそうです。
 ※また、WebブラウザーにはもともとFirmataプロトコルを扱うAPIがないので「Node.js」を使う。
関連記事
この記事にトラックバックする(FC2ブログユーザー)
http://c3plamo.blog.fc2.com/tb.php/1781-c83013cc

トラックバック

コメント

コメントの投稿

コメントの投稿
:  (任意)タイトルがあるとわかりやすいです。
:  お名前 ニックネームなどなんでもOKです。
: (任意)メールアドレス(表示されませんのでご安心ください。)
: (任意)ホームページやブログをお持ちでしたらURLリンクを張れます。
: 
 
 以下の欄にコメントをお書きください。
パスワード:  <-- (任意)ここで設定しておけばあとでコメントの内容を編集できます。 
秘密のコメント: 管理者にだけ表示を許可する (任意)チェックを入れると内容を表示させず、管理人宛のメールとして使えます。  
コメント送信ボタン ⇒

【ときどきのメッセージ】
国民を指差して、「こんなヤツに負けられるか」と絶叫
クリックで原寸大
abeKonaHitotatini_ss.jpg


そもそも国民に主権があることがおかしい。全文はこちら クリックで原寸大
nisidaShoji_ss.jpg


 安倍さんが最も欲しがっているモノは「国家緊急権」。
その欲しくて堪らなかったモノがもう手に届くところまで来ています。
それを手に入れるには、自民党の憲法草案を通すほかないわけですが、
手段を選ばず、あらゆることを仕掛けて来ることが想定されます。
その国家緊急権は、第九章 緊急事態にやろうと思えば「何でもできる」を織り込んでいます。 --> こちら

つぎの動画ですが、安倍さんのこれまでの言動がヒトラーのそれと見事に符合していることを描いています。
ということだと、これから何が起きるかも想像がつくというものです。
クリック ↓ でYoutubeを開く
hodoStation160318_ss.jpg


 大新聞・テレビが批判をやめた、戦前と同じ。
安倍首相「安保法制は中国が相手、必ずやる!」と戦争を想定--> こちら
たかが個人的な野望なのに、実現するためにはどんなに反対されようが構わず進め、そして国民を戦争へ引き摺り込む・・
 断じて許しません。
戦争法案施行に合わせて日中緊張が仕掛けられ着々と前準備が整えられる。戦争させられるのも時間の問題である。
「ふたたび戦争の歴史になる・・」と2007年安倍一次政権から繰り返し警告してきた。
2005年に決定されたシナリオがいよいよ最終章を迎える、まさに危機的状況となってきた。
殆どの国民が知らないでいるシナリオが、しかも着々と積み上げられてきていることに気付き、そして大声上げて阻止しないと取り返しのつかないことになる。
阿鼻叫喚となる前に・・・

というのは、
アーミテージ・レポート第3弾アーミテージレポート(ブログ) のシナリオ通りに進んでいることでわかるように、アメリカ戦争屋勢力が、ニッポンの外務省と安倍政権(強力な軍事力を持つことで有利になれるという妄想・野望)を利用できるところまで最大限利用しようとしているからだ。
自分から決して先には手をださず、
ニッポンを使って事を起こそうとしている連中の 謀略 はいまだ消えていない。執念深くしかも確実に実行しようとしている。
どんなに時間がかかろうが、システマチックに動いてやり遂げる連中を甘くみたら後悔することになる。
アメリカが仕掛けてきたこれまでの謀略・戦争の数々が教えてくれている。

ふたたび戦争の歴史になる・・
クリックで原寸大
WarHistory3_s.gif


LIBERAL_PARTY_m.gif
自由党(国民の生活が第一)

kokuminSeikatu_s_s.jpgkokuminSeikatu_s.jpg


Appendix

リンク

「お気に入りの音楽」 もくじ

myFavoriteMusic_s.gifmyFavoriteMusic_m.gif

※※ 納得ゆく演奏を取り上げています。高音質なスピーカーや抜けのいい開放型ヘッドフォンでどうぞ ※※

【愛聴盤】ショパン ノックターン 江崎昌子エザキマサコ
MasakoEzakiNocturnes_ss.jpg

録音は最悪で申し訳ありませんが・・・
ショパン ノクターン第20番 嬰ハ短調 「遺作」~ギオルギ・ラッザビゼ
GiorgiLatsabidzeNocturneNo20_ss.jpg

ベートーヴェン・ヴァイオリン協奏曲ニ長調op.61 ~クライディ・サハチ
BeethovenViolinConcerto61_ss.jpg

アルネセン マニフィカト ~Arnesen MAGNIFICAT
ArnesensMAGNIFICAT_ss.jpg

チャイコフスキー第6番"悲愴"チョン・ミョンフン
Tchaikovsky6SeoulPhil_ss.jpg

マリ・サミュエルセン ヴィバルディ四季~夏
MariSiljeSamuelsen_s.jpg

八神純子 DAWN
DAWN_s.jpg

ブラームス交響曲第一番 スタニスラフ・フランクフルト放送交響楽団
Brahms1hr-Sinfonieorchester_ss.jpg

ベートーヴェン「月光」ネルソン・フレイレ
NelsonFreireMoonlightSonata_s.jpg

ポールポッツ Paul Potts・La Prima Volta
PaulPottsLaPrimaVolta_s.jpg

ユジャ・ワン グルック・メロディー(ズガンバーティ編)
MirusiaSolveigSong.jpg

ミルシア La Vergine degli Angeli
LaVergineDegliAngeli_s.jpg

ミルシアMirusia ソルヴェイグの歌
MirusiaSolveigSong.jpg

Ave Maria ミルシアMirusia
AVE_MARIA_MirusiaLouwerse_s.jpg

ラブ・シュープリーム - 八神純子
loveSupreme2_s.jpg

ミルシアMirusia ショパン別れの曲
Mirusia_In_mir_klingt_ein_Lied.jpg

スーザン・エレンズ Don't Cry For Me Argentina
SuzanErensDontCryForMeArgentina_ss.jpg


本家HP

nonologo_s_s.gifnonologo_s.gif


「約束」 ~名張毒ぶどう酒事件 死刑囚の生涯

yakusoku_s.jpgyakusoku_s.jpg


このブログをリンクに追加する

【著作権などについて】
インターネットは世界最大の図書館であるという考え方でページなどを公開しております。著作権までは放棄しておりませんが、当ブログも他のサイトも、ネットで公開している以上「どこのページへのリンク」も自由ですし連絡も要りません。「引用」も「コピー&ペースト」もご自由にどうぞ。もちろん図表なども制限ありません。いずれも、引用元を明記くだされば幸いです。 管理人
【管理人へのメール】
  メールは --> こちら からお願いします。

【お詫び】システム不良で不達。修正しました。

QRコード

QR