<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>PubNub &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/pubnub/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>JavaScriptエンジニアへのIoTのすすめ：Node.jsとArduinoでスマートデバイスのプロトタイプをしてみよう</title>
		<link>/girlie_mac/17684/</link>
		<pubDate>Thu, 26 Nov 2015 00:00:36 +0000</pubDate>
		<dc:creator><![CDATA[Tomomi Imura]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[PubNub]]></category>

		<guid isPermaLink="false">/?p=17684</guid>
		<description><![CDATA[ここ、HTML5Experts.jpでも今年になって IoTやWoT関連の話題がことかかず、みさなんも関心を持ち始めていることかと思われます。 私もフロントエンド・エンジニアではありますが、もともと関心があったことと、去...]]></description>
				<content:encoded><![CDATA[<p>ここ、HTML5Experts.jpでも今年になって IoTやWoT関連の話題がことかかず、みさなんも関心を持ち始めていることかと思われます。</p>

<p>私もフロントエンド・エンジニアではありますが、もともと関心があったことと、去年からデータ・ストリームのPaaS (platform as a service) 会社である<a href="http://pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PubNub</a>で働いていることもあって、IoTを避けずには通れなくなり、電子工作を始めるようになりました。</p>

<p>そこで、最近東京・渋谷で行われた、東京Node学園で登壇した際に話したテーマ、<a href="https://speakerdeck.com/girlie_mac/tokyo-nodefest-2015-hardware-hacking-for-javascript-developers-japanese-ri-ben-yu" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Hardware Hacking for JavaScript Developers</a> から、ArduinoとNode.jsを使ってプロトタイプする、という内容についてチュートリアル形式で書いてみたいと思います。</p>

<h3>Arduinoが変えたMakerムーブメント</h3>

<p>みなさん、<a href="https://www.arduino.cc/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino</a>の名前は聞いたことがあると思います。Arduino、もしくはGenuinoとして知られているこのオープンソースのAVRマイクロコントローラ電子工作キットは、既存のマイコンボードと違い、安価で、I/Oポートもあり、USB接続で今すぐ始められます。開発環境（IDE）とサンプルコードなども簡単にダウンロード、インストールできることから初心者でも簡単に電子工作ができるようになったという面では、今までハードウェアに縁がなかったソフトウェアエンジニアが、Makerムーブメントに積極的に参加するようになった火付け役ともいえると思います。</p>

<p>しかし、同じソフトウェアといえども、ウェブエンジニアはどうでしょう？Arduinoで使用される言語はC-ベースのSketchということで敷居が高く感じたり、興味がなかったりするのではないでしょうか？でも、もし馴染みのJavaScriptで好きなことができたら、遊んでみたくなりませんか？</p>

<h3>Johnny-Five: JSロボティクス・フレームワーク</h3>

<p>そこで紹介したいのが、JavaScript ロボティクス・フレームワークである、<a href="http://johnny-five.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Johnny-Five</a>。日本ではまださほど知られていない感じがしますが、オープンソースでディベロッパ・コミュニティの結束も固く、<a href="http://nodebots.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">インターナショナル NodeBots Day</a>などでユーザ・コミュニティも大きくなってきたこのフレームワークを使えば、JavaScriptをで簡単にプログラマブル電子工作ができるようになります。ここは説明よりも実践してみるほうが理解も深まると思いますので、さっそくチュートリアルを始めましょう！</p>

<p><img src="/wp-content/uploads/2015/11/arduino-loves-j5.png" alt="arduino nodejs johnny-five" width="640" height="236" class="aligncenter size-full wp-image-17712" srcset="/wp-content/uploads/2015/11/arduino-loves-j5.png 640w, /wp-content/uploads/2015/11/arduino-loves-j5-300x111.png 300w, /wp-content/uploads/2015/11/arduino-loves-j5-207x76.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>1. Arduino のセットアップ</h2>

<p>用意するハードウェアとインストールの必要なソフトウェア</p>

<ul>
<li><a href="https://www.arduino.cc/en/Main/ArduinoBoardUno" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino (Genuino) Uno</a></li>
<li><a href="http://arduino.cc/en/main/software" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino IDE</a></li>
<li><a href="https://nodejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Node.js</a> </li>
</ul>

<p>始めにセットアップから始めます。ArduinoボードをUSBで、コンピュータにつなぎます。Arduino IDEをダウンロード、インストールして、起動させたら、ボードとシリアルポートの設定をします。</p>

<p>メニューの<strong>ツール</strong> &gt; <strong>マイコンボード</strong>の中の<strong>Arduino Uno</strong>を選択し、 <strong>ツール</strong> &gt; <strong>シリアルポート</strong>の中の<strong>/dev/tty.usbmodem</strong>、もしくは<strong>cu.usbmodem</strong>という名前が含まれる項目を選びます。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp.png" alt="Arduino setup" width="640" height="180" class="aligncenter size-full wp-image-17690" srcset="/wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp.png 640w, /wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp-300x84.png 300w, /wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp-207x58.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Johnny-FiveはFirmataプロトコルを使ってArduinoと通信をするので、今度は<strong>StandardFirmata</strong>をインストールします。</p>

<p>メニューから<strong>ファイル</strong> &gt; <strong>スケッチの例</strong> &gt; <strong>Firmata</strong> &gt; <strong>StandardFirmata</strong>を選択すると新しいウィンドウが開きます。そこから左から２番目にあるアップロードボタンをクリックします。下のGIFアニメーションの通りです。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-firmata-jp.gif" alt="Arduino setup GIF animation" width="640" height="512" class="aligncenter size-full wp-image-17727" /></p>

<p>終わったら閉じ、このIDEはもうこれからは必要ありません。</p>

<h2>2. Hello World</h2>

<p>まずコンピュータに、Node.jsがすでにインストールされていることを、確認してください。そして適当なディレクトリ (e.g. /j5-hello/) を作ったら、そのディレクトリ内にパーケッジマネージャであるnpmを使って、Johnny-Fiveをインストールします。</p>

<p><code>$ npm install johnny-five</code></p>

<p>さっそくJohhny-Fiveを使ってはじめの一歩である、Hello Worldを書いてみましょう。新しい言語やフレームワークを学ぶ際に初めて書くプログラムは&#8221;Hello world&#8221;という2つの単語を出力する、というのが一般ですが、ここでは、ハードウェア界のHello Worldとも言える「Lチカ」（LEDを点滅させる）をしてみます。</p>

<h3>必要なハードウェア</h3>

<ul>
<li>セットアップ済みのArduino Uno</li>
<li>LED</li>
<li>ブレッドボード </li>
<li>ジャンパー・ワイヤー（両側がピン状になっているオス〜オス）</li>
<li>抵抗　（200-330Ω 程度）</li>
</ul>

<p><img src="/wp-content/uploads/2015/11/arduino-hello-world-jp.jpg" alt="Arduino LED blink" width="640" height="318" class="aligncenter size-full wp-image-17692" srcset="/wp-content/uploads/2015/11/arduino-hello-world-jp.jpg 640w, /wp-content/uploads/2015/11/arduino-hello-world-jp-300x149.jpg 300w, /wp-content/uploads/2015/11/arduino-hello-world-jp-207x103.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>まずはハードウェア側のセッティングです。
部品などどこで買ったらわからない、という方はAmazonなどでキットを買うのをお勧めします。</p>

<h3>LEDの基本</h3>

<p>LED（発光ダイオード）には、極性があり、その＋極を<strong>アノード</strong>、ー極を<strong>カソード</strong>と呼びます。普通のLEDには通常、足が二本ついていますので長い方がアノードです。これは回路を作るときに重要になってきますので必ず覚えておいてください！</p>

<p><img src="/wp-content/uploads/2015/11/led-anode-cathode-jp.png" alt="LED anode and cathode" class="aligncenter" /></p>

<h3>電気回路の作成</h3>

<p>ArduinoからLEDを光らせるための回路はこんな感じになります。ここでは便宜上、電源からつながるプラス側を赤、Groundにつながるマイナス側を黒のワイヤーで示してあります。何色を使っても構いませんが、混乱を避けるために2つの異なる色にすることをお勧めします。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-uno-led_bb.png" alt="Fritzing Arduino Uno LED" width="640" height="483" class="aligncenter size-full wp-image-17716" srcset="/wp-content/uploads/2015/11/arduino-uno-led_bb.png 640w, /wp-content/uploads/2015/11/arduino-uno-led_bb-300x226.png 300w, /wp-content/uploads/2015/11/arduino-uno-led_bb-207x156.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ブレッドボードや抵抗についての基本、そしてこの「Lチカ」の回路については<a href="https://html5experts.jp/youtoy/12029/" data-wpel-link="internal">初心者でもわかる・できる！Arduinoを使った初めての電子工作実践</a>の<strong>「部品をつなぐ」</strong>セクションで豊田陽介さんが詳しく説明されているので、それを参考にしましょう。</p>

<h3>Johnny-FiveでLチカ</h3>

<p>では、適当なファイルネーム、例えば<code>blink.js</code>を作成し下のコードをコピーペーストしてください。</p>

<p></p><pre class="crayon-plain-tag">var five = require('johnny-five');
var board = new five.Board();

board.on('ready', function() {
  var led = new five.Led(13);
  led.blink(500);
});</pre><p></p>

<p>ターミナルからこのファイルを走らせましょう。</p>

<p><code>$ sudo node blink.js</code></p>

<p>正しく作動しましたか？回路が正しく、コードにエラーがない場合は、500ms間隔でLEDが点滅します。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-blink.gif" alt="LED blink animated GIF" class="aligncenter" /></p>

<p>これで、JavaScriptとハードウェアを使う基本を学びましたので、今度は実際にスマートデバイスのプロトタイプを作ってみましょう。</p>

<h2>3. スマート照明システムをプロトタイプする</h2>

<p><a href="http://www2.meethue.com/ja-JP/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Philips HUE</a>や、<a href="http://www.lifx.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">LIFX</a>は、ムードや状況によってスマートフォンやタブレットから、明かりの色や照度をカスタマイズできるLED電球です。さっそく Arduinoを使ってこれらのように色を自在に変えられるLEDを作ってみましょう。色を変えるためのコントローラはHTML５を使ってブラウザから操作できるようにしましょう。</p>

<h3>JavaScript で Internet of Things</h3>

<p>さて、ここで重要なのは、デバイス（ハードウェア）とモバイルUI (HTML5)をインターネットでつなげて、IoT化するということです。Bluetoothなどと違い、インターネットにさえ繋がっていれば、あなたが世界のどこにいようともモバイルから自宅の照明の操作をすることができるのです。この2ウェイ・コミュニケーションを可能にするにはソケット・コネクションが必要になります。ここで、この双方向通信を簡単に行うことにできるPubNubのJavaScript APIを使って、IoTのプロトタイプをしてみましょう。</p>

<p><a href="http://pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PubNub</a> はグローバルなデータストリームネットワーク (DSN) で、 このAPIを使ってリアルタイムアプリケーション、IoTデバイスなどを接続、拡張、管理することができます。今から作成するスマートLEDは下の図のようにモバイルデバイス（このプロトタイプの場合はブラウザ）とハードウェアをインターネットでつなげることが可能です。</p>

<p><img src="/wp-content/uploads/2015/11/pubnub-arduino.png" alt="How PubNub makes an Arduino as an IoT device" width="640" height="233" class="aligncenter size-full wp-image-17720" srcset="/wp-content/uploads/2015/11/pubnub-arduino.png 640w, /wp-content/uploads/2015/11/pubnub-arduino-300x109.png 300w, /wp-content/uploads/2015/11/pubnub-arduino-207x75.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>例えば、サンフランシスコにいるモバイルユーザが東京にあるArduinoを操作する場合：</p>

<ol>
<li>ユーザがモバイルから「緑い照明にしたい」と送信（パブリッシュ）</li>
<li>メッセージがPubNubのサンスランシスコデータセンターに送信される</li>
<li>データは世界各地のデータセンターと同期</li>
<li>Arduinoが東京データセンターからデータを受信（サブスクライブ）して、LEDを緑に</li>
</ol>

<p>この全てのオペレーションがわずか¼秒かそれ以下で行われるのが、PubNubの利点です。</p>

<p>このチュートリアルではJavaScriptを使ってプロトタイプを作りますが、PubNubの組み込みとモバイルのSDKを使えば、実際にHUEのようなスマートデバイスを製品化することも可能なのです。</p>

<h3>必要なハードウェア</h3>

<ul>
<li>Arduino Uno</li>
<li><a href="http://www.amazon.co.jp/100%E5%80%8B-5%E3%83%9F%E3%83%AA%E3%83%A1%E3%83%BC%E3%83%88%E3%83%AB-4%E3%83%94%E3%83%B3-RGB-%E3%82%AB%E3%82%BD%E3%83%BC%E3%83%89/dp/B00HIUDSJK/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">RGBフルカラーLED（カソードコモン）</a></li>
<li>ブレッドボード </li>
<li>ジャンパー・ワイヤー（オス〜オス）</li>
<li>抵抗　（220Ω x 2, 330Ω x 1）</li>
</ul>

<p><img src="/wp-content/uploads/2015/11/arduino-rgbled-jp.jpg" alt="Arduino RGB LED JP" width="640" height="273" class="aligncenter size-full wp-image-17702" srcset="/wp-content/uploads/2015/11/arduino-rgbled-jp.jpg 640w, /wp-content/uploads/2015/11/arduino-rgbled-jp-300x128.jpg 300w, /wp-content/uploads/2015/11/arduino-rgbled-jp-207x88.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h3>RGBフルカラーLEDの基本</h3>

<p>RGB (Red-Green-Blue) フルカラーLEDは、赤、緑、青の3色のLEDが一本になったもので、この三原色の組み合わせで無数の色を作り出すことができます。ほとんどのこのタイプのLEDは、各色のピンが一本づつと共通のカソード（もしくはアノード）の合計4本のピンがあります。このチュートリアルでは、カソードコモンのものを使用しています。</p>

<p><img src="/wp-content/uploads/2015/11/led-rgb-cathode-jp.png" alt="RGB LED JP" width="640" height="151" class="aligncenter size-full wp-image-17703" srcset="/wp-content/uploads/2015/11/led-rgb-cathode-jp.png 640w, /wp-content/uploads/2015/11/led-rgb-cathode-jp-300x71.png 300w, /wp-content/uploads/2015/11/led-rgb-cathode-jp-207x49.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h3>電気回路の作成</h3>

<p>Hello World を成功させたからには、この下の図の回路も問題なく作れるのではないでしょうか。がんばってみてください。</p>

<p>ワイヤーを差し込むピンは、単純な「Lチカ」とは違い、PWM (Pulse Width Modulation：パルス幅変調) ピンを使っています。Arduinoボードにラベルされているピン番号の前に「〜」が付いているものがPWMピンになります。</p>

<p>これらと他のピンの違いは、簡単にいえばアナログかデジタルかの違いになります。例えばLEDの場合、一般のデジタルピンにつなぐとオフかオンの2つのステートしか表現できません。Lチカ（点滅）はこのデジタル信号をオンとオフと交互に発しています。しかしRGBフルカラーLEDで無数の色を表現するには、各色の値の組み合わせで色を作り出すので中間の値が必要になりますので、アナログであるPWMピンを使います。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-uno-rgb-led_bb.png" alt="Fritzing Arduino RGB LED" width="640" height="476" class="aligncenter size-full wp-image-17719" srcset="/wp-content/uploads/2015/11/arduino-uno-rgb-led_bb.png 640w, /wp-content/uploads/2015/11/arduino-uno-rgb-led_bb-300x223.png 300w, /wp-content/uploads/2015/11/arduino-uno-rgb-led_bb-207x154.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ここで抵抗を220Ωと330Ωにわけてあるのは、同じ抵抗だと赤が強くなるので、抵抗を増やして赤を控えめな明かるさになるように調整してあります。抵抗の計算方法やカラーコードの読み方については、ここで割愛しますが、自分でいろいろ調整してみてください。</p>

<h3>IoT リモートコントローラーUIの作成</h3>

<p>ブラウザでLEDの色をコントロールするUIを作ってみましょう。</p>

<p><img src="/wp-content/uploads/2015/11/hue-prototype-ui.png" alt="hue-prototype-ui" width="640" height="434" class="aligncenter size-full wp-image-17707" srcset="/wp-content/uploads/2015/11/hue-prototype-ui.png 640w, /wp-content/uploads/2015/11/hue-prototype-ui-300x203.png 300w, /wp-content/uploads/2015/11/hue-prototype-ui-207x140.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>HTML5の&#8220;、&#8221;R&#8221;、&#8221;G&#8221;、&#8221;B&#8221;の各色調整をするスライダーバーを描写します。各色は0から255まで(<code>min="0" max="255"</code>)の整数の値(<code>step="1"</code>)を、つまみで調節できるようなUIにしてみましょう。</p>

<p></p><pre class="crayon-plain-tag">&lt;input id="red" type="range" min="0" max="255" step="1" value="0"&gt;</pre><p></p>

<p>これで赤色を調節するスライダーができました。このチュートリアルではCSS部分は省略しますが、スクリーンショットのようなスタイルにするには、<a href="https://github.com/girliemac/arduino-led-rgb" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GitHubのソースコード</a>の<a href="https://github.com/girliemac/arduino-led-rgb/tree/gh-pages" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">gh-pages ブランチ</a>を参照してください。</p>

<p>次はJavaScriptでこの値がユーザによって変更された時に、その値をArduino側に反映させるようにします。これを実現させるためにPubNub JavaScript APIで両デバイスを接続させてみましょう。</p>

<p>PubNub JavaScript API を使うには、まず自分の<a href="https://admin.pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">APIキーを取得</a>を取得したら、CDNライブラリ（もしくはローカルファイル）を読み込みます。</p>

<p></p><pre class="crayon-plain-tag">&lt;script src="//cdn.pubnub.com/pubnub-3.7.15.min.js"&gt;&lt;/script&gt;</pre><p></p>

<p>そして自分のキーを使ってインスタンスを初期化します。</p>

<p></p><pre class="crayon-plain-tag">var pubnub = PUBNUB({
　subscribe_key : '自分の subscribe key',                          
　publish_key   : '自分の publish key'
});</pre><p></p>

<p>UIイベント発生時に自動的にLEDの色を変える仕様にしてみましょう。
スライダーDOMに<code>change</code>イベントが発生した時に、変更値をPubNubに <code>publish</code> メソッドを使って送信（パブリッシュ）します。</p>

<p></p><pre class="crayon-plain-tag">var red = document.getElementById('red');

red.addEventListener('change', function(){
  pubnub.publish({
    channel: 'smart-led', 
    message: {color: 'red', brightness: +this.value}
  });
}, false);</pre><p></p>

<p>この時の <code>channel</code> 名は何でも構いませんが、のちにこのデータを受信する際にはこれと同じチャンネル名にします。</p>

<p>では次はNode.jsを使ってハードウェア側でこの値を反映させてみましょう。</p>

<h3>Johnny-Five と PubNub で Arduino を IoTデバイスに</h3>

<p>Johnny-FiveでRGBフルカラーLEDを動かすコードは、いたって簡単。npmでjohnny-fiveをインストールしたら、次のコードを動かしてみてください。</p>

<p></p><pre class="crayon-plain-tag">var five = require('johnny-five');
var led;

five.Board().on('ready', function() {
  console.log('ready');

  // RGB LED を初期化
  led = new five.Led.RGB({
    pins: { // pin 番号
      red: 6,
      green: 5,
      blue: 3
    }
  });

  // テスト
  led.color({red: 255, blue: 0, green: 0});
  
  led.on();
});</pre><p></p>

<p>LEDが赤色に光ましたか？
何も起こらない場合はコードと配線などを確かめてください。それでも作動しない場合は、使っているRGB LED がカソードコモンではなくアノードコモンの可能性があります。その場合は、GND（図上の黒のワイヤー）を、Arduinoの5Vのピンに変えてみてください。</p>

<p>「テスト」とコメントされた行をみてください。<code>color</code> メソッドでLEDの色を指定しているのがわかると思います。この場合、赤の値が255で他が0となっているので、LEDを赤で光らせることができます。Johnny-Fiveでは、CSSのcolorプロパティと同じようにRGBの値を0～255で指定することができるのです。RGBの各値を変えながらどんな色になるか実験してみてください。</p>

<p>さて今度は、このRGBの値をブラウザUIからリモートコントロールして、動的にLEDの色を変えてみましょう。</p>

<p>さきほどのUI側からパブリッシュされたデータを受け取って、ハードウェアに反映させるには、PubNub <code>subscribe</code> メソッドで受信（サブスクライブ）しましょう。</p>

<p>まず、npm で pubnub をインストールします。</p>

<p><code>$ npm install pubnub </code></p>

<p>フロントエンドと同様に、pubnubインスタンスの初期化します。</p>

<p></p><pre class="crayon-plain-tag">var pubnub = require('pubnub').init({
  subscribe_key: '自分の subscribe key',
  publish_key:   '自分の publish key'
});</pre><p></p>

<p>UI側から送信されたデータは、同じ <code>channel</code> にアクセスすることによって自動的に送信することができます。データが送信された際には、<code>subscribe</code> メソッドの <code>callback</code> が返されます。このコールバック内で送信された色データをLEDに反映させます。</p>

<p></p><pre class="crayon-plain-tag">pubnub.subscribe({
  channel: 'smart-led',
  callback: function(m) {
    if(led) {
      r = (m.color === 'red') ? m.brightness : r;
      g = (m.color === 'green') ? m.brightness : g;
      b = (m.color === 'blue') ? m.brightness : b;

      led.color({red: r, blue: b, green: g});

      console.log( 'color change to...' );
      console.log( led.color() );
    }
  }
  error: function(err) {console.log(err);}
});</pre><p></p>

<p>送信されたメッセージ、<code>m</code> は、UIから送られたオブジェクト、例えば青の値が150の場合、<code>{color: 'blue', brightness: 150}</code>、となります。次に送信された値が、<code>{color: 'red', brightness: 150}</code> ならば、前の値の青＝150はそのままで、ここに赤＝150が加わることによって、LEDは紫に近い色になります。さらに赤緑青の3つの値が変われば、LEDはさまざまな色に変わります。</p>

<p><img src="/wp-content/uploads/2015/11/poormans-philips-hue.jpg" alt="IoT 101 Arduino with RGB LED" width="640" height="480" class="aligncenter size-full wp-image-17705" srcset="/wp-content/uploads/2015/11/poormans-philips-hue.jpg 640w, /wp-content/uploads/2015/11/poormans-philips-hue-300x225.jpg 300w, /wp-content/uploads/2015/11/poormans-philips-hue-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>全コードは、<a href="https://github.com/girliemac/arduino-led-rgb" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GitHubのソースコード</a>の<a href="https://github.com/girliemac/arduino-led-rgb" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">master ブランチ</a>内の <code>/node/index.js</code>を参照してください。</p>

<p>さて、これでIoTスマート照明のプロトタイプができあがりました！</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-hue.gif" alt="arduino-johnnyfive-hue" width="371" height="317" class="aligncenter size-full wp-image-17706" /></p>

<p>Johnny-FiveもPubNubもArduinoだけではなく、他のいろいろなマイクロコンピュータに使うことができます。いろいろなセンサーやカメラなどを組み合わせて、IoTプロトタイプに挑戦してみてください。</p>

<p>では、Happy hacking!</p>

<h2>References</h2>

<ul>
<li><a href="http://johnny-five.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Johnyy-Five</a>: The original JavaScript Robotics programming framework</li>
<li><a href="https://www.pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PubNub</a>: The global realtime Data Stream Network for IoT, mobile, and web applications</li>
</ul>
]]></content:encoded>
			</item>
	</channel>
</rss>
