Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

45
html5j エンタメ技術部 5/17(土)13:30@インターネットイニシアティブ 17中会議室 Web技術者のためのArduino入門 2回勉強会 - 実践編(資料 2/2-

description

2014/5/17(土)に開催された「html5j エンタメ技術部 第2回勉強会 〜 Web技術者のためのArduino入門 – 実践編 〜」で用いた資料や追加補足資料です。 下記の3つのうち、2つ目・3つ目に関する資料です。  1)Arduinoの回路を組んでみる、プログラムで制御する  2)JavascriptでArduinoを制御してみる  3)Websocketによるセンサー情報の送受信 ※ イベントページ ⇒ http://atnd.org/events/50467

Transcript of Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Page 1: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

html5j エンタメ技術部

5/17(土)13:30~@インターネットイニシアティブ 17階 中会議室

~ Web技術者のためのArduino入門 ~

第2回勉強会

- 実践編(資料 2/2) -

Page 2: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

本日の流れはじめに

Arduinoの回路を組んでみる、プログラムで制御する

  (休憩)

JavascriptでArduinoを制御してみる

Websocketによるセンサー情報の送受信

  (休憩)

自由課題、自由課題の内容共有

おわりに

この資料の内容

ここは別資料に

Page 3: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

本日の流れはじめに

Arduinoの回路を組んでみる、プログラムで制御する

  (休憩)

JavascriptでArduinoを制御してみる

Websocketによるセンサー情報の送受信

  (休憩)

自由課題、自由課題の内容共有

おわりに

Page 4: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Javascript連携の話Arduino側のセッティング

node.jsのライブラリのセッティング

LEDやスイッチの利用

Page 5: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Arduino側のセッティングIDEのメニュー内の「ファイル」から

> スケッチの例

 > Firmata

  > Standard Firmata

を開く

サンプルプログラムには手を加えず、Arduinoにそのままプログラムを書き込む

Page 6: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Javascript連携の話Arduino側のセッティング

node.jsのライブラリのセッティング

LEDやスイッチの利用

Page 7: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

セッティングの補足node.js のセッティング 今回は公式のインストーラを利用 ⇒ http://nodejs.org/download/ より、ご自身のOS・32-bit/64-bit など、 環境にあったものを入手

完了後の確認インストール完了後、コマンドで「node -v」と「npm -v」をそれぞれ実行した際にバージョン番号が表示されればOK

Page 8: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

注: 今回は、任意の場所に作業用  フォルダを作成し、そのフォルダ  内で作業を進めるようにして  います

Page 9: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ライブラリの導入node.js の ライブラリパッケージを導入。パッケージ管理ツール npm を利用。コマンドで npm install johnny-fiveを実行

公式の情報: rwaldron/johnny-five  https://github.com/rwaldron/johnny-five

Page 10: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Javascript連携の話Arduino側のセッティング

node.jsのライブラリのセッティング

LEDやスイッチの利用

Page 11: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Javascript での制御~ LED・スイッチの利用など ~

第1回勉強会 セッション3 のソースコードと回路図:https://github.com/iwanaga/arduino-test

※ ソースコード・回路図は下記になります。

第1回勉強会 セッション3:「JavaScript と Arduino でオリジナルデバイスを作ろう」http://www.slideshare.net/YoshihiroIwanaga/javascript-arduino

※ 下記の資料「ページ26~40」もご参照ください

Page 12: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

先ほど利用したセンサーをJavascript で扱う

~ センサーの値をログ出力 ~

Page 13: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

回路図

Arduino IDE で光センサーを扱った際と同じ

Page 14: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

センサーの値をログ出力ソースコードはこちら

https://github.com/yo-to/html5j-entech/tree/master/002

短縮URL http://goo.gl/uPhWbL⇒ 上記の中の「01_Photoresistor」

実行は、Arduinoを接続した状態にし、コマンドで node Photoresistor.jsを実行⇒ センサーの値が一定の時間間隔で表示されればOK(センサー付近を手で覆ったり、手を離したりすると値が変化)

Page 15: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

本日の流れはじめに

Arduinoの回路を組んでみる、プログラムで制御する

  (休憩)

JavascriptでArduinoを制御してみる

Websocketによるセンサー情報の送受信

  (休憩)

自由課題、自由課題の内容共有

おわりに

Page 16: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Websocket・ Socket.IO の利用

Page 17: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Websocket についてサーバクライアント間での双方向通信

高速なリアルタイム通信

HTTPを模したハンドシェイクに、独自の通信プロトコル

   など。

Page 18: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Websocket についてクライアント側での利用

様々なPC・スマホ用ブラウザで利用可能http://caniuse.com/websockets

Page 19: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Websocket についてWebサービスPusher | HTML5 WebSocket Powered Realtime Messaging Service http://pusher.com/

  ※無料プランもあります(1日あたりの   利用量などの制限あり)

Page 20: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Websocket についてサーバ側の実装こちらも様々な言語での利用可能なライブラリありhttp://ja.wikipedia.org/wiki/WebSocket

 

今回は、node.jsで利用可能な  「Socket.IO http://socket.io/」

 を利用

Page 21: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Socket.IO についていくつかのリアルタイム通信技術を、統一的なAPIで提供したものnode.js用サーバ側ライブラリとブラウザ用JavaScriptライブラリを利用する形。

「WebSocket、Comet、ポーリングなどの通信に対応」

Page 22: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

シンプルなチャットの実装例ローカルで動作する Socket.IO を利用したチャット実装例

【node.js】socket.ioで構築したローカルで動くシンプルなチャットルーム。http://www.tettori.net/post/852/

Page 23: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

前ページの例の構成

app.js

Webサーバ

Websocketサーバ

1)各ウィンドウに index.html が読み込まれる

ブラウザ(ウィンドウA)

ブラウザ(ウィンドウB)

ブラウザ(ウィンドウC)2)Websocketサーバと接続(ブラウザ側がWebsocketのクライアントになる)

Page 24: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

前ページの例の構成

app.js

Webサーバ

Websocketサーバ

ブラウザ(ウィンドウA)

ブラウザ(ウィンドウB)

ブラウザ(ウィンドウC)

1)"C_to_S_message"(イベント名) でのメッセージ送信

2)受信したメッセージを送信元を含めた全体に送信

Page 25: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

前ページの例の構成

app.js

Webサーバ

Websocketサーバ

ブラウザ(ウィンドウA)

ブラウザ(ウィンドウB)

ブラウザ(ウィンドウC)

1)"C_to_S_broadcast"(イベント名) でのメッセージ送信

2)受信したメッセージを、送信元以外へ送信

Page 26: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

Arduinoのセンサーの値をやりとりしてみる

Page 27: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ライブラリの導入サーバ用のライブラリの導入 npm install socket.ioを実行

node.js で socket.io のクライアント側の処理を実行するためのライブラリの導入 npm install socket.io-clientを実行

Page 28: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

センサーの値のやりとりソースコードはこちら

https://github.com/yo-to/html5j-entech/tree/master/002

短縮URL http://goo.gl/uPhWbL⇒ 上記の中の「02_Transmission」

Page 29: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

構成とデータの流れserver.js

Webサーバ

Websocketサーバ ブラウザ

arduino.js

Websocketクライアント

Arduino

矢印はデータの流れ(※各接続の流れは後で補足)

Page 30: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

回路図

先ほど既にセッティング済みの、光センサーを扱った際と同じ

Page 31: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

センサーの値のやりとり実行方法

サーバの実行はコマンドで node server.jsを実行また、Arduinoを接続した状態で、上記に追加で node arduino.jsも実行する上記2つが両方実行されている状態で、さらに、ブラウザのアドレスに http://localhost:8080を入力

⇒ ブラウザ上に連続して数値が表示されればOK (センサー付近を手で覆ったり、手を離したりすると値が変化)

Page 32: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

接続の流れ1server.js

Webサーバ

Websocketサーバ ブラウザ

arduino.js

Websocketクライアント

Arduino

1)server.js が実行され、サーバが待ち受け状態に。

2)arduiono.js が実行され、センサーの値取得と、サーバへの接続が行われる。センサーの値が取得されるごとに、サーバの値の送信が行われる状態に。

Page 33: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

接続の流れ2server.js

Webサーバ

Websocketサーバ ブラウザ

arduino.js

Websocketクライアント

Arduino4)Websocketサーバとの接続が行われる

3)ブラウザがlocalhost に接続し、index.html を読み込む

Page 34: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

接続の流れ2server.js

Webサーバ

Websocketサーバ ブラウザ

arduino.js

Websocketクライアント

Arduino

5)センサの値が取得されるごとにイベントが発生し、データがサーバ経由でブラウザへと送信される

Page 35: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ファイルの処理の補足arduino.js の 21行目までは、既出の Photoresistor.js をベースに、19行目のセンサーの値の送信処理を加えたもの。センサーの値を取得するごとに、取得した値を送信する。

arduino.js の 25行目以降は、下記の処理を行っている

Websocketサーバへの接続(接続先をポート番号を含めて指定)

Websocketサーバへの接続時・切断時、および、messageイベント取得時にログを出力

Page 36: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ファイルの処理の補足 server.js の 1行目から47行目まで(2行目を除く)は、簡易なWebサーバを実行するための処理。下記に記載の、カレントディレクトリ以下のファイルを読み込めるシンプルなWebサーバ。●node.jsでシンプルなwebサーバー - Qiita http://qiita.com/_shimizu/items/094c4beace9c7a36deb1

server.js の 2行目、および、51行目から63行目までは、Websocketサーバの処理に関する部分。接続・切断時のログ出力等の処理と、55行目から59行目までのmessageイベント受信時の処理がある。messageイベント受信時は、受信したデータを接続済みのクライアント宛に送信する。

Page 37: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ファイルの処理の補足 index.html の 以下はWebsocketサーバとのやりとりに関する処理部分。

7行目: Socket.IO 利用時の、クライアントライブラリの取得処理

11行目: Websocketサーバへの接続

13~25行目: Websocketサーバへの接続時・切断時、および、messageイベント取得時の処理。

index.html の 28~34行目は、Websocketサーバから受信した値を、Webページ内に表示させる処理。出力先は、42行目の div要素の部分

Page 38: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

連続して送られてくる数値のグラフ化

Page 39: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

グラフ描画ライブラリ について

今回は「Smoothie Charts http://smoothiecharts.org/」を利用ストリーミングデータをグラフ化するライブラリ

利用の流れは下記のとおり●Smoothie Charts: Ten Minute Tutorial http://smoothiecharts.org/tutorial.html

Page 40: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

センサーの値をグラフ描画ソースコードはこちら

https://github.com/yo-to/html5j-entech/tree/master/002

短縮URL http://goo.gl/uPhWbL⇒ 上記の中の「03_Graph」

Page 41: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

回路図

今回も、先ほど既にセッティング済みのと同じ

Page 42: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

センサーの値をグラフ描画実行方法

サーバの実行はコマンドで node server.jsを実行また、Arduinoを接続した状態で、上記に追加で node arduino.jsも実行する上記2つが両方実行されている状態で、さらに、ブラウザのアドレスに http://localhost:8080/index2.htmlを入力

⇒ ブラウザ上にグラフが描画されればOK (センサー付近を手で覆ったり、手を離したりするとグラフが変化)

Page 43: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ファイルの処理の補足「02_Transmission」と「03_Graph」について、 arduino.js と server.js は同一のもの。

違いは「index2.html」と「smoothie.js」「smoothie.js」はグラフ用ライブラリ

Page 44: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

ファイルの処理の補足 index2.html の 以下が、前述の index.htmlと異なる部分

8行目: グラフ用ライブラリの読み込み

12、13行目: グラフ描画領域の準備。描画するグラフの最大値と最小値を指定。さらに、グラフ出力を行う Canvas要素への紐付けを行っている※ 対象の Canvas要素は49行目

15、16行目: グラフとして描画する値を扱うオブジェクトの準備。ちなみに、これを複数用意すると、グラフ描画領域上に複数のグラフを描画することが可能。

41行目: グラフとして描画する値の指定。これが、サーバからのデータ受信を行うごとに発生するので、そのイベント発生時間とサーバから取得した値とを元にグラフの座標を指定。

Page 45: Arduino実践 資料2/2 〜【html5j エンタメ技術部】第2回勉強会 公開用

http://www.slideshare.net/yo-to/html5j-entech0002a

この資料は、下記(1つ目の資料)の続きになります