<?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>WoT &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/wot/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>Webブラウザからハードウェアにアクセス！WebUSB APIを使ってログイン認証を実装してみよう</title>
		<link>/tokutoku393/24790/</link>
		<pubDate>Wed, 20 Dec 2017 01:00:12 +0000</pubDate>
		<dc:creator><![CDATA[ちゃんとく]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WebUSB API]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=24790</guid>
		<description><![CDATA[近年「IoT」がバズワードとなっていますが、「WoT（Web of Things）」というワードを聞いたことがあるでしょうか？ 「WoT」はごくごく簡単にいうと、既に普及しているHTMLやJavaScriptなどのWeb...]]></description>
				<content:encoded><![CDATA[<p>近年「IoT」がバズワードとなっていますが、「WoT（Web of Things）」というワードを聞いたことがあるでしょうか？</p>

<p>「WoT」はごくごく簡単にいうと、<strong>既に普及しているHTMLやJavaScriptなどのWeb技術を使ってIoTの開発を標準化しよう</strong>、という考え方です。WebBluetooth APIやWebNFC APIなど、みなさんが慣れ親しんでいるWeb技術を使ってハードウェアを制御する方法も増えてきています。</p>

<p>今回は、WebページからPCに繋がれたUSBデバイスを制御することができる「WebUSB API」の概要とサンプルを紹介します。</p>

<p>HTMLと簡単なJavaScriptで試せる内容になっていますので、Webデザイナーやディレクターなどエンジニアではない方もぜひチャレンジしてみてください！</p>

<h2>WebUSB APIとは</h2>

<p>WebUSB APIは<strong>PCに接続された全てのUSBデバイスにウェブから直接アクセスすることができる技術</strong>です。USBデバイスの認識、読み出し、書き込みなどを行うことができます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/e60c1a3a-95f1-a163-598e-e9214908c49e.png" alt="スクリーンショット 2017-12-13 18.23.13.png" title="スクリーンショット 2017-12-13 18.23.13.png" /></p>

<p>Googleの2人のエンジニアによって開発され、2017年9月にはChromeブラウザ（Google Chrome 61）で正式に採用されました。</p>

<p>WebUSB APIを利用するとただちにユーザのUSBデバイス全てにアクセスできる、というわけではなく、ユーザがWebページとUSBデバイスの相互通信を明示的に許可することで開始されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/c98a6e79-dff6-b100-7413-01fc77b20901.png" alt="スクリーンショット 2017-12-13 16.19.16.png" title="スクリーンショット 2017-12-13 16.19.16.png" /></p>

<p>WebUSB APIのポリシーやセキュリティについては、Googleの開発者向けページで詳細に紹介されています。</p>

<p>⇒ <a href="https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Access USB Device on the Web</a>（Google Developers）</p>

<h3>WebUSB APIの活用シーン</h3>

<p>WebUSB APIを活用することで、これまで事前にドライバやソフトウェアのインストールが必要だったUSBデバイスのセットアップが、サイトにアクセスして許可するだけで自動で行えるなどの連携が考えられそうです。</p>

<p>またデバイスの開発者サイドのメリットとしても、OSごとに異なっていたドライバ開発がJavaScript SDKを使ってクロスプラットフォームに構築できるそう。</p>

<p><a href="https://github.com/webusb/arduino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">webusb/arduino</a>などの例を利用してArduinoなどのマイコンボードをWebから制御することも可能になりました。</p>

<p>詳細な仕様は開発者のドラフトを確認してみてください。</p>

<p>⇒ <a href="https://wicg.github.io/webusb/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebUSB API</a></p>

<h3>本格利用はこれから</h3>

<p>ただし、実際にWebUSB APIを導入するにはまだまだ課題がありそうです。</p>

<p>USBアクセスを求めるWebページを公開するために資格や証明が必要ということはなく、利用ユーザは「本当に信頼できるWebページか」ということを知る方法が今のところありません。</p>

<p>また開発者サイドも、USBデバイスの情報が新しくなったり変更されたりするたびにWebページを改修する必要がある可能性もあります。</p>

<p>利用には気をつけるべきポイントが多く、WebUSBはまだ開発中の段階と捉えたほうがよさそうです。安全面、実装面ともに改良され、より使いやすい機能となっていくことに期待ですね。</p>

<h2>WebUSB APIを使ってログイン認証を実装してみよう</h2>

<p>今回は「登録済みのUSBデバイスならログインする」というWebページを作ってみます。</p>

<p><a href="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="https://i.gyazo.com/efdd078ea499c97f4b846c271cba0866.gif" alt="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" /></a></p>

<h3>用意するもの</h3>

<ul>
<li>Chromeブラウザ</li>
<li>任意のUSBデバイス（筆者はiPhone7）</li>
</ul>

<h3>手順1：Chromeのバージョンを確認する</h3>

<p>はじめに、ChromeブラウザがWebUSB APIに対応したバージョンになっているか確認します。</p>

<p>Chromeのツールバーから［Google Chromeについて］を選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/8ea91b14-86f0-ecc1-2e25-3700fa093e79.png" alt="スクリーンショット 2017-11-22 20.21.35.png" title="スクリーンショット 2017-11-22 20.21.35.png" /></p>

<p>Chromeの情報ページが開くのでバージョンが62以上であることを確認します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/809c864a-c55d-0f09-d82f-2eb59a13291f.png" alt="スクリーンショット 2017-11-22 20.23.10.png" title="スクリーンショット 2017-11-22 20.23.10.png" /></p>

<p>基本的には自動でアップデートされているはずですが、万が一されていない場合は下記を参考にアップデートしましょう。</p>

<p>⇒ <a href="https://support.google.com/chrome/answer/95414?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Chromeを更新する</a>（Google Chrome ヘルプ）</p>

<h3>手順2：ログインページを作る</h3>

<p>WebUSB APIを設置するWebページを作ります。今回はコード共有サービス「<a href="http://codepen.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CodePen</a>」からログインフォームのソースコードを利用しました。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/d01701d7-a934-74ea-3349-9ec138efa074.png" alt="スクリーンショット 2017-11-26 18.11.58.png" title="スクリーンショット 2017-11-26 18.11.58.png" /></p>

<p><a href="https://codepen.io/Lewitje/pen/BNNJjo?q=login%20&amp;order=popularity&amp;depth=everything&amp;show_forks=false" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Calm breeze login screen</a>（CodePen）</p>

<p>［Export］からソースコードを取得しローカルに配置します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/11162f82-8510-3be3-17e6-0452e538ae1c.png" alt="スクリーンショット 2017-12-12 19.42.00.png" title="スクリーンショット 2017-12-12 19.42.00.png" /></p>

<p>今回は<strong>「Username」「Password」は不要</strong>なので、<code>index.html</code>のフォーム部分から消去しておきます。</p>

<p></p><pre class="crayon-plain-tag">&lt;form class="form"&gt;
	&lt;input type="text" placeholder="Username"&gt; // この行を消去
	&lt;input type="password" placeholder="Password"&gt; // この行を消去
	&lt;button type="submit" id="login-button"&gt;Login&lt;/button&gt;
&lt;/form&gt;</pre><p></p>

<h3>ログインのイベントを作成する</h3>

<p>LoginボタンをクリックしたらWebUSB APIのイベントが発火するよう、Submitボタンを変更します。</p>

<p><code>auth()</code>というfunctionを呼ぶようにし、記述用のJSファイルの呼び出しも追加しておきます。</p>

<p></p><pre class="crayon-plain-tag">&lt;form class="form"&gt;
		&lt;button type="button" onclick="auth()" id="login-button"&gt;Login&lt;/button&gt;
	&lt;/form&gt;
	&lt;script src="js/webusb.js"&gt;&lt;/script&gt;
&lt;/body&gt;</pre><p></p>

<p>ログイン成功時のイベント（デフォルトのJQuery）は名前つき関数にしておきます。</p>

<p></p><pre class="crayon-plain-tag">function login() {
  $('form').fadeOut(500);
  $('.wrapper').addClass('form-success');
}</pre><p></p>

<h3>USBデバイスにアクセスして識別情報を取得する</h3>

<p>認証に使用するデバイスを識別するために、［Vendor ID］, ［Product ID］, [Serial Number]を調べてみます。</p>

<p>Macの方は［システム情報］-&gt;［USB］で確認できます。</p>

<p>Windowsの方はMicroSoftの<a href="https://github.com/Microsoft/Windows-driver-samples/tree/master/usb/usbview" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">usbview</a>などを利用しましょう。
<img src="/wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e-300x144.png" alt="" width="300" height="144" class="alignnone size-medium wp-image-24956" srcset="/wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e-300x144.png 300w, /wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e.png 640w, /wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e-207x99.png 207w" sizes="(max-width: 300px) 100vw, 300px" />
※このシリアル番号は、iPhone自体のシリアル番号とは別です。</p>

<p><code>/js</code>フォルダの配下に<code>webusb.js</code>ファイルを作成し、<code>auth</code>functionを作成します。コード内には取得したVendor ID（製造元 ID）、Product ID（製品 ID）、Serial Number（シリアル番号）を追加します。</p>

<p></p><pre class="crayon-plain-tag">'use strict';

const auth = () =&gt; {
  const vendorId = XXXX; // ここにVendor ID
  const productId = XXXX; // ここにProduct ID
  const serialNumber = 'XXXXXXXX'; // ここにSerial Number
  navigator.usb.requestDevice({ 'filters': [
      { 'vendorId': vendorId, 'productId': productId }
    ]
  }).then(device =&gt; {
    if (device.serialNumber === serialNumber) {
      console.log('success!');
      login();
      return device.open;
    } else {
      console.log('false!');
      alert('認証に失敗しました');
    }
  }).catch(error =&gt; {
    console.log(error);
  });
}</pre><p></p>

<p>今回は簡易的にJSファイルに直接認証情報を書いています。</p>

<h3>ログイン機能を試してみよう</h3>

<p>登録したUSBデバイス（今回はiPhone）で試してみます。<br />
<a href="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="https://i.gyazo.com/efdd078ea499c97f4b846c271cba0866.gif" alt="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" /></a>
認証が成功しました。</p>

<p>登録していないiPhoneでも試してみます。<br />
<a href="https://gyazo.com/c7af13bc72c09579ff6604ede333a825" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="https://i.gyazo.com/c7af13bc72c09579ff6604ede333a825.gif" alt="https://gyazo.com/c7af13bc72c09579ff6604ede333a825" /></a>
認証に失敗しました。</p>

<p>これでUSBデバイスを識別することができました！</p>

<h2>まとめ</h2>

<p>今回はUSB接続したスマートフォンを利用しましたが、マウス、キーボード、フラッシュメモリなどUSBデバイスならどんなものでも利用可能です。</p>

<p>またWeb USB以外にも、WebBluetooth APIやWebNFC APIなどWeb技術を使ってハードウェアにアクセスする方法は増えています。ぜひこれからの開発に利用してみてください！</p>
]]></content:encoded>
			</item>
		<item>
		<title>Web技術でここまでできるのか！IoT/WoTの可能性を探る、「第59回 HTML5とか勉強会」レポート</title>
		<link>/shumpei-shiraishi/16760/</link>
		<pubDate>Thu, 27 Aug 2015 04:42:15 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[CHIRIMEN]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WebRTC]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=16760</guid>
		<description><![CDATA[連載： イベントレポート (39)こんにちは、編集長の白石です。 昨日（2015年8月27日）、「IoT / WoT」をテーマにした「第59回 HTML5とか勉強会」に参加してきました。 この記事では、イベントの模様や参...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (39)</div><p>こんにちは、編集長の白石です。</p>

<p>昨日（2015年8月27日）、「IoT / WoT」をテーマにした「第59回 HTML5とか勉強会」に参加してきました。
この記事では、イベントの模様や参加した感想をレポートしたいと思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3111.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3111-640x480.jpg" alt="IMG_3111" width="640" height="480" class="aligncenter size-large wp-image-16761" srcset="/wp-content/uploads/2015/08/IMG_3111.jpg 640w, /wp-content/uploads/2015/08/IMG_3111-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3111-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>ちなみに、「IoT」（Internet of Things）はバズワードなのでご存じの方も多いと思いますが、「WoT」というのは「Web of Things」の略です。「IoTのWeb版」と言えばわかりやすいでしょう。個人的には「WoT」という言葉にはどうも「IoTブームに乗ってやれ」という（何者かの）意図があるような気がしていて、ちょっと懐疑的でした。リソース食いだし、デバイスの機能を自由に使うこともできないWeb技術は、IoTとは相性悪いんじゃないか…と。</p>

<p>しかし、今回のイベントに参加して、そうした疑いは晴れました。「Web×デバイス」の勢い、まがい物ではなさそうです。そしてその勢いをさらに推し進める一員になりたいな…と思ったのも正直な気持ちです。それくらい、最先端では楽しいことが起きている。</p>

<p>では、前置きが長くなりましたが、イベントの内容を簡潔にご紹介していきたいと思います。
イベント自体の内容が盛りだくさんでしたので、今回のレポートでは前半の2セッションのみのご紹介となりますがご容赦ください。</p>

<p>また、講演資料はアップされたのを確認次第、追記していきます（現在のところ、2つ目のセッションに関する資料しか見当たりませんでした）。</p>

<h2>「myThings開発者のMaker Faire Tokyo体験記」</h2>

<p>1つ目のセッションは、ヤフー株式会社の河合将臣氏と畑元氏による 「myThings開発者のMaker Faire Tokyo体験記」でした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/DSC08527.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/DSC08527-640x480.jpg" alt="DSC08527" width="640" height="480" class="aligncenter size-large wp-image-16780" srcset="/wp-content/uploads/2015/08/DSC08527.jpg 640w, /wp-content/uploads/2015/08/DSC08527-300x225.jpg 300w, /wp-content/uploads/2015/08/DSC08527-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>「<a href="http://mythings.yahoo.co.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">myThings</a>」とは、2015年7月にヤフージャパンがリリースしたプロダクトです。
複数のWebサービスやデバイスを自由自在に繋いで、いろんなことをオートメーションさせられるサービス／モバイルアプリです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3116.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3116-640x480.jpg" alt="IMG_3116" width="640" height="480" class="aligncenter size-large wp-image-16763" srcset="/wp-content/uploads/2015/08/IMG_3116.jpg 640w, /wp-content/uploads/2015/08/IMG_3116-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3116-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>と、この説明を聞くと「それって<a href="https://ifttt.com/recipes" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">IFTTT</a>と何が違うの？」と思ってしまうのが自然な流れ（？）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3121.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3121-640x480.jpg" alt="IMG_3121" width="640" height="480" class="aligncenter size-large wp-image-16765" srcset="/wp-content/uploads/2015/08/IMG_3121.jpg 640w, /wp-content/uploads/2015/08/IMG_3121-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3121-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>このセッションでは、その疑問にもしっかり答えていました。いわく、</p>

<ul>
<li>日本語対応</li>
<li>Yahoo! Japanのサービスが使える。特に、通常API経由では利用できないサービスやデータを使えるのは強み</li>
<li>国内で展開されているサービスも利用できる。代表的なのははてなブックマーク。</li>
</ul>

<p>だそうです。</p>

<p>また、<a href="http://www.idcf.jp/cloud/iot/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">IDCF Cloud</a>というプラットフォームも用意されており、自作のガジェットとmyThingsをつなぐことも可能。MQTTやWebSocket、REST APIに対応しているそうで、Web技術者でも簡単に扱えそうなのが魅力。</p>

<p>セッションの後半では、Maker Faireにヤフーさんが出展された時の（もちろんmyThingsとIDCF Cloudを使った）デモアプリを、内部設計や作業工程も含めて情報共有していただきました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3124.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3124-640x480.jpg" alt="IMG_3124" width="640" height="480" class="aligncenter size-large wp-image-16766" srcset="/wp-content/uploads/2015/08/IMG_3124.jpg 640w, /wp-content/uploads/2015/08/IMG_3124-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3124-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Web技術者がハードウェアの設計・製造まで行ったということで、その過程で気づいたことを以下のようにわかりやすくまとめています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3139.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3139.jpg" alt="IMG_3139" width="640" height="640" class="aligncenter size-full wp-image-16767" srcset="/wp-content/uploads/2015/08/IMG_3139.jpg 640w, /wp-content/uploads/2015/08/IMG_3139-150x150.jpg 150w, /wp-content/uploads/2015/08/IMG_3139-300x300.jpg 300w, /wp-content/uploads/2015/08/IMG_3139-207x207.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>「WebController for V-Sido CONNECT：WebRTCとWebGLで作る人型ロボット遠隔操縦システム」</h2>

<p>２つ目のセッションは、株式会社アトモスデザインの児玉 哲彦さんによる「WebController for V-Sido CONNECT：WebRTCとWebGLで作る人型ロボット遠隔操縦システム」でした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/DSC08580.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/DSC08580-640x480.jpg" alt="DSC08580" width="640" height="480" class="aligncenter size-large wp-image-16781" srcset="/wp-content/uploads/2015/08/DSC08580.jpg 640w, /wp-content/uploads/2015/08/DSC08580-300x225.jpg 300w, /wp-content/uploads/2015/08/DSC08580-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a class="embedly-card" href="http://www.slideshare.net/ecru0606/html5150826" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT：WebRTCとWebGLで作る人型ロボット遠隔操縦システム」</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p>

<p>このセッションのウリは、とにかく「ホンモノのロボットをWebブラウザで動かせる！」という点。Google Chrome上で動作するWebアプリから、ロボットの手を動かしたり足を動かしたり、果ては怒らせたり。</p>

<p>「JavaScriptでロボットを動かす」なんて、数年前では考えられなかった事態に感動です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3151.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3151-640x480.jpg" alt="IMG_3151" width="640" height="480" class="aligncenter size-large wp-image-16770" srcset="/wp-content/uploads/2015/08/IMG_3151.jpg 640w, /wp-content/uploads/2015/08/IMG_3151-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3151-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3150.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3150-640x480.jpg" alt="IMG_3150" width="640" height="480" class="aligncenter size-large wp-image-16769" srcset="/wp-content/uploads/2015/08/IMG_3150.jpg 640w, /wp-content/uploads/2015/08/IMG_3150-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3150-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>そもそも<a href="http://www.v-sido.com/ja/product/connect/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">V-Sido CONNECT</a>というのは、人型ロボットを作るためのOS（そんなのがあったのか…）である「<a href="http://www.v-sido.com/ja/product/os/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">V-Sido OS</a>」用のマイコンで、公式HPによると「シリアルサーボモーターをつなぐだけでロボットを作ることが可能です。」「V-Sidoの一部機能がマイコンに搭載されているので初心者でも簡単にロボットを動かすことができます」とのこと。</p>

<p>今回の児玉さんの発表は、この「V-Sido CONNECT」をWebブラウザ上から制御できるというプロダクトの紹介というわけです。
このWeb Controllerはどう動作しているかというと、Webアプリとスマホアプリを連動させ、スマホからBluetoothでロボットの制御信号を送っているとのこと。先ほどのmyThingsといい、スマホがIoTデバイスのハブになるという流れなのは間違いなさそうです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3160.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3160-640x480.jpg" alt="IMG_3160" width="640" height="480" class="aligncenter size-large wp-image-16771" srcset="/wp-content/uploads/2015/08/IMG_3160.jpg 640w, /wp-content/uploads/2015/08/IMG_3160-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3160-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>また、Webアプリとスマホアプリの通信はWebRTC（及び、NTTコミュニケーションズの<a href="http://nttcom.github.io/skyway/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Skyway</a>）を使用しているそう。WebRTCを使う決め手となったのは、映像や音声を扱うことができるから（ロボットのカメラから映像を受信したりできる）。</p>

<p>以下の比較表は中々興味深いです（写真ボケててすいません）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3161.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3161-640x480.jpg" alt="IMG_3161" width="640" height="480" class="aligncenter size-large wp-image-16772" srcset="/wp-content/uploads/2015/08/IMG_3161.jpg 640w, /wp-content/uploads/2015/08/IMG_3161-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3161-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>WebRTCのおかげで、なんと<strong>ドイツから日本のロボットを動かす</strong>といったような接続性を確保できたとのこと。地球狭い。</p>

<p>そして、Webエンジニアであれば気になるコーディング方法ですが、以下の表に示すように、非常に簡潔なAPIです。たったこれだけでロボットに複雑な制御を行わせることができるというのは、Web技術者にとってはありがたい限りです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3164.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3164-640x480.jpg" alt="IMG_3164" width="640" height="480" class="aligncenter size-large wp-image-16773" srcset="/wp-content/uploads/2015/08/IMG_3164.jpg 640w, /wp-content/uploads/2015/08/IMG_3164-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3164-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>2000年代の「ユビキタスコンピューティング」に足りなかったものは今は揃っており、WoT時代の幕開けを感じさせてくれるセッションでした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3174.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3174-640x480.jpg" alt="IMG_3174" width="640" height="480" class="aligncenter size-large wp-image-16774" srcset="/wp-content/uploads/2015/08/IMG_3174.jpg 640w, /wp-content/uploads/2015/08/IMG_3174-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3174-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>まとめ</h2>

<p>今回紹介しなかった後半の内容（MozillaのFirefox OSベースのマイコン「CHIRIMEN」や、NTTコミュニケーションズ小松さんによるRaspberry PiとWebRTCを連動させた話）も非常に興味深かったので、気になる方は<a href="https://twitter.com/search?f=tweets&amp;vertical=default&amp;q=%23html5j&amp;src=typd" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Twitter</a>でイベントの様子を確認してみてください。</p>

<p>イベント全体の模様をを動画でご覧になりたい方はこちらからどうぞ。</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/rXiJNgN6l3Y" frameborder="0" allowfullscreen></iframe>

<p>このIoTブームの中、「Web技術者にできることを広げようとしている人たちが多く存在する」「Web技術者にできることはたくさんある」ということを実感させてくれる、非常にバリエーション豊かな内容でした。</p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>EspruinoではじめるWeb開発者のWoT</title>
		<link>/rockymanobi/13648/</link>
		<pubDate>Mon, 16 Mar 2015 00:00:06 +0000</pubDate>
		<dc:creator><![CDATA[興梠敬典]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JS Board]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=13648</guid>
		<description><![CDATA[連載： IoTxWeb (8)IoT/WoTという言葉があちこちから聞かれるようになって久しいですが、最近は言葉だけではなくなってきた気がします。新しいマイコンボードや、XXセンサーのデータをクラウドに溜めて○○する商品...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (8)</div><p>IoT/WoTという言葉があちこちから聞かれるようになって久しいですが、最近は言葉だけではなくなってきた気がします。新しいマイコンボードや、XXセンサーのデータをクラウドに溜めて○○する商品などが続々と発売され、IoT/WoTのバックエンド専用のサービスまで登場してきています。</p>

<p>これから出てくるサービスやツールは、画面の中からの情報だけでなく、画面の外からの情報を使うことができそうです。逆に画面の外に影響を及ぼすようなことも可能になるかもしれません。解決できる課題の幅がグンと広がってきそうな予感がします。</p>

<p>加えて、先日の<a href="https://html5experts.jp/bathtimefish/13109/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">村岡さんの記事</a>でも紹介されていたように、JavaScript等のWeb技術で開発できるマイコンボードも続々と登場し、IoT/WoTはWeb開発者にとっても身近なものになりつつあります。</p>

<p>今回はその中でもシンプルで扱いやすい、<strong>Espruino Board</strong>を使い、JavaScriptでIoT/WoTに挑戦したいと思います。</p>

<p>ボードを購入するところから、温度センサの値を読み取る方法、Wifiに接続する方法について、ステップバイステップで解説していきます。「IoT/WoT、やってみたいけど敷居が高くてできない！」というWeb開発者の皆様に、一歩を踏み出すお手伝いができれば幸いです。</p>

<h2>Espruino Boardとは</h2>

<p>冒頭で紹介したとおり、<a href="http://www.espruino.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Board</a>は、JavaScriptを利用してハードウェア制御ができるマイコンボードです。ざっくり言ってしまえば、<a href="http://www.arduino.cc/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino</a>のJavaScript版のようなもので、まずはこの理解でいきましょう。</p>

<p>「とりあえずJSでハード制御してみる」を実現するには最も簡単で、かつ財布にも優しい選択肢とも言えるマイコンボードです。筆者もこれでIoT/WoTの第一歩を踏み出しました。</p>

<p><img src="http://www.espruino.com/img/ESPRUINOBOARD.jpg" width="200" alt="Espruino" class="alignnone" /></p>

<p>他の多くのマイコンボードと違い、<a href="https://github.com/espruino/Espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">自前でJavaScriptの実行環境を実装</a>しているところも熱いポイントです。</p>

<p>また、Espruinoの今後の展開として注目されている、Espruino Picoについても触れておきます。Espruino Picoは、今回紹介するEspruino Boardよりもさらに小さい基盤(USBメモリサイズ)で、Espruino Board同様にJavaScriptでの制御が可能です。2015年春にプレオーダー分が出荷予定となっています。</p>

<p><img src="http://www.espruino.com/images/pico.jpg" width="600" height="267" alt="Espruino Pico" class="alignnone" /></p>

<h3>どうしてJavaScript?</h3>

<p>ただWeb開発者が知っている言語だから、というわけではなく、筆者はマイコン上でセンサー等のハードウェアを制御する言語として、JavaScriptは適した言語だと考えています。主な理由としては、イベントドリブンな記述がしやすいことと、setTimeoutやsetIntervalを使って、ループ処理を非同期に逃がすことができることが、挙げられます。</p>

<p>実際にマイコンボードを使ったサービスを運用してみると、マイコンボードにはやらなければならないことが意外とたくさんあることに気づきます。センサーの値を読みとってPOSTするだけでなく、センサー自体の死活監視のためのリクエストを投げるといった、運用のための処理や、Too Muchなリクエストの発生を避けるためにデータを間引いたりする処理がどうしても必要になります。</p>

<p>一例として、多くの言語がサポートする、無限ループを回しつつ、sleepで時間調整をする方法で、以下のような処理を実装することを考えてみましょう。</p>

<ul>
<li>5秒に１回センサーの値を読み込む</li>
<li>1分に１回はマイコン自体の死活監視用にPingリクエストを投げる</li>
</ul>

<p>普通に実装すると、5秒のスリープ処理の入った無限ループを作り、その中でセンサー値の読み取りを毎回実行します。Pingリクエストについてはカウンタ等を用意してIF分を切って実行有無を判定する、という実装になりそうです。やることが増えてくると、困りそうですね。</p>

<p>一方、JavaScriptでは2つのsetIntervalにそれぞれの処理を実装してしまえば事足ります。マイコンボードのようなpoorな環境でこれができるのは、Espruinoを始めとするJavaScriptで開発できるマイコンボードの強みであると筆者は考えています。</p>

<p>メインのテーマではないのでこの辺りで…</p>

<h2>Espruinoを使い始める</h2>

<p>では早速、Espruinoを使ってみましょう。
ボードを購入するところから、JavaScriptでLEDを光らせるところまでを、以下の流れで解説していきます。</p>

<ul>
<li>必要物品を調達する</li>
<li>Web IDEをインストールする</li>
<li>ファームウェアをアップデートする</li>
<li>JavaScriptコードを実行する</li>
</ul>

<h3>必要物品を調達する</h3>

<p>IoT/WoTの&#8221;T&#8221;はThings、つまりモノです。何をするにもまずは物理的にモノを購入する必要があります。お金もかかる上に届くまでに時間もかかります。新しいツールをタダでダウンロードして、すぐに試せる環境に慣れ親しんだソフトウェア開発者にとっては、最初のハードルかもしれません。</p>

<p>でも大丈夫です。すぐに慣れて、いろいろ買いあさるようになると思います。</p>

<h5>最低限必要になるのはコチラです。</h5>

<ul>
<li>Espruinoボード</li>
<li>マイクロUSBケーブル(Aタイプ オス/ マイクロBタイプ オス)</li>
</ul>

<h5>そしてWeb開発者であれば必ずWifiに繋ぎたくなるはずなので、以下も用意しておきます。</h5>

<ul>
<li>CC3000 Wifi モジュール</li>
</ul>

<p>Espruinoボードは国内販売されていないので、<a href="http://www.espruino.com/Order#distributors" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">公式サイト</a>にある販売サイトへのリンク一覧の中から何れかを選んで購入します。</p>

<p>オススメはEspruinoとCC3000の両方を取り扱っているAdfruitです。ここで一緒に買うことで、送料を節約することができます。</p>

<ul>
<li><a href="https://www.adafruit.com/products/1887" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino</a></li>
<li><a href="https://www.adafruit.com/products/1469" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CC3000 Wifi Module</a></li>
</ul>

<p>ちなみに筆者は<a href="http://www.seeedstudio.com/depot/Espruino-board-p-1715.html?cPath=6_12" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">seed studio</a>より購入しました(当時、AdfruitはEspruinoを取り扱っていませんでした）。送料に積む金額によって配送期間が変わるようです。無料だと2週間程度、30ドル払ったら4日で届きました。</p>

<p>補足 : 公式で推奨されているモジュールとは異なりますが、CC3000については国内販売されている<a href="http://strawberry-linux.com/catalog/items?code=18253" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">コチラのモデル</a>でも動作することを確認しています。筆者の手元での確認なので保証することはできませんが、国内で調達できるので、コチラを利用するのもアリです。</p>

<h3>Web IDEのインストール</h3>

<p>Espruinoの上で自分の書いたJavaScriptコードを実行するには、本家から提供されているWeb IDEを使用します。Espruinoとの接続や、ファームウェアのアップデート等もサポートしているので、まずはコレを導入します。Chrome Extensionとして提供されているので、<a href="https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Chrome Webストア</a>からインストールしましょう。</p>

<h4>EspruinoとPCを接続</h4>

<p>EspruinoのマイクロUSB端子とPCのUSB端子を繋ぎ、WebIDEを立ち上げます。立ち上がったら、画面左上の接続ボタンをクリックします。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/f8c8e693-21a1-3f93-50c8-63df11dbd26c.png" alt="image" /></p>

<p>ダイアログが表示されるので、接続するシリアルポートを選択します。OSやマシンによって選択すべき項目が異なるため、下記を参考に選択します。</p>

<ul>
<li>Windowsの場合 :  COM# のうち、数字が一番大きいもの</li>
<li>Mac OSXの場合 :  /dev/tty.usbmodem1234 (1234はマシン依存)</li>
<li>Linuxの場合 :  ttyACM0/ttyUSB0</li>
</ul>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/0e6e19e3-9a03-d1d9-6912-6bd93343d233.png" alt="image" /></p>

<p>Web IDEの左側のコンソールにConnectedと表示され、Espruinoのアスキーアートが表示されれば成功です。</p>

<h4>ファームウェアのアップデート</h4>

<p>JavaScriptのコードを書く前に、まずはEspruinoのファームウェアをアップデートしておきます。出荷時期によってこの作業の要否は分かれますが、自前でJavaScriptの実行環境を実装している関係上、ファームウェアが古いと思わぬエラーが発生したりもするので、アップデートしておくことをおすすめします。</p>

<ul>
<li>WebIDEの右上の歯車アイコンをクリックして、設定画面を開きます。</li>
<li>設定メニューのFLUSHERを選択し、Flush Firmwareボタンをクリックします。ダイアログが表示されます。</li>
</ul>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/5942abcc-0474-8f93-d16a-4a659c61f6e3.png" alt="image" /></p>

<ul>
<li>ダイアログの指示通り、EspruinoのBTN1(USBコネクタから遠い方のボタン)を押しながら、RSTボタン(USBコネクタ寄りのボタン）を押します。</li>
<li>ボード上の青色のLEDがゆっくり点滅するはずです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/51384/334aeaa8-6020-71e4-8749-d387b27aa552.png" alt="image" /></li>
<li>ダイアログのNEXTをクリックし、デバイスを選択します。</li>
<li>ファームウェアの更新が始まり、ボード上のLEDが激しく点滅を繰り返します。</li>
<li>完了後、ダイアログのNEXTボタンをクリックした後、ボードのRSTボタンを押します。</li>
<li>再びWebIDE左上の接続ボタンをクリックして、Espruinoと接続します。</li>
</ul>

<p>以上でファームウェアのアップデートは終了です。</p>

<h3>JavaScriptコードを実行する</h3>

<p>いよいよEspruino上でJavaScriptコードを実行します。
Espruinoボード上のLEDを光らせてみましょう。
WebIDEの左側のコンソールに、下記コードを打ち込んでEnterを押してみます。</p>

<p></p><pre class="crayon-plain-tag">LED1.write(true);</pre><p></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/e5838ac4-837a-c373-b024-7d75660b9b17.png" alt="image" /></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/2b94ae62-0248-9787-99e8-b8b9694710a3.png" alt="image" /></p>

<p>Espruinoボード上の赤いLEDが点灯しました。
続いて下記を入力してEnterを押します。</p>

<p></p><pre class="crayon-plain-tag">LED1.write(false);</pre><p></p>

<p>予想通り、LEDを消灯することができます。簡単ですね。</p>

<p>こんな風に対話的にプログラムを実行することができるのは、Espruinoの一つの特徴と言えると思います。Webインスペクタのコンソールのような感覚でコードを動かして試すことができるので、デバックや開発途中のお試し実行に重宝しています。</p>

<p>さて、ここでプログラムについても少し解説をしておきます。</p>

<p></p><pre class="crayon-plain-tag">LED1.write(true);</pre><p></p>

<p>Espruinoに備え付けられているLEDやGPIOのピンは、ビルトインのグローバルオブジェクトとして、あらかじめ登録されています。上記のコードで言うとLED1がそれにあたります。このオブジェクトに対して、書き込み(&#8216;write&#8217;)や読み込み(`read&#8217;)の命令を投げることで、LEDやピンの入出力をコントロールすることができる、という仕組みです。</p>

<h2>Espruinoで温度を計る</h2>

<p>前項までで、Espruinoの上でJavaScriptを実行する準備が整いました。ここからはセンサ等と組み合わせてEspruinoを使う方法について解説します。まずは温度センサ「DS18B20」を使い、Espruinoで温度を計ってみましょう。</p>

<p>なお、この段階からはハンダ付け等の電子工作的な作業が必要になります。筆者が以前に書いた記事になりますが、以下を参考に、Espruinoをセンサー等のモジュールに繋げる準備を行います。（ピンヘッダを取り付ける、と聞いてピンとくる方は読み飛ばしてもらって問題ありません）</p>

<ul>
<li><a href="http://rocky-manobi.com/blog/?p=224" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruinoにセンサーとかをつなげるために必要な準備</a></li>
</ul>

<p>また、ブレッドボードやワイヤー等、電子工作の基礎的な事柄については、以下の記事にて非常に丁寧にまとめられています。</p>

<ul>
<li><a href="https://html5experts.jp/youtoy/12029/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">初心者でもわかる・できる！Arduinoを使った初めての電子工作実践</a></li>
</ul>

<h3>調達</h3>

<ul>
<li>温度センサ「DS18B20」: おなじみ<a href="http://akizukidenshi.com/catalog/g/gI-05276/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">秋月電子</a>さんより通販、店頭にて購入することができます</li>
<li>4.7kΩ抵抗 : 通販であればこちらも<a href="http://akizukidenshi.com/catalog/g/gR-25472/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">秋月電子</a>さんより購入することができます。ただし、100本単位の購入になってしまうので、そこが気になるという方は<a href="http://www.sengoku.co.jp/shop_01.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">千石電商秋葉原本店B1F</a>等のバラ売りをしているお店で購入しましょう。</li>
</ul>

<h3>結線</h3>

<p>温度センサ「DS18B20」には3つの端子がついています。それぞれの役割は、平らな面をこちらに向けて左から、GND、DATA、Vddとなります。GNDはグランドと結線するための端子、Vddは電源をとる端子です。温度のデータはDATA端子から読み取ることができます。</p>

<p>次のように結線してみましょう。</p>

<ol>
<li>温度センサのDATAとVddを4.7kΩの抵抗で繋ぐ。</li>
<li>下記表の通り、Espruinoと温度センサを繋ぐ。</li>
</ol>

<table>
<thead>
<tr>
  <th>Espruinoのピン</th>
  <th>温度センサの端子</th>
</tr>
</thead>
<tbody>
<tr>
  <td>GND</td>
  <td>GND</td>
</tr>
<tr>
  <td>A1</td>
  <td>DATA</td>
</tr>
<tr>
  <td>3.3v</td>
  <td>Vdd</td>
</tr>
</tbody>
</table>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/04801128-2618-ab2f-bfdf-3039e4b56850.png" alt="image" /></p>

<p>【写真だとこんな感じです】</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/3366c7cf-f02f-9f81-34aa-6ae13171ec75.png" alt="image" /></p>

<h3>プログラム</h3>

<p>結線ができたら、次はプログラムです。先ほどはWeb IDEの左側のコンソールを使いましたが、今回は複数行のプログラムを実行する必要があるので、Web IDE右側のエディタを利用します。</p>

<p>以下のプログラムをWeb IEDの右側のエディタに記述してみましょう。温度センサから読み取った値を、1秒毎にコンソールに出力するプログラムです。</p>

<p></p><pre class="crayon-plain-tag">// センサーモジュールをセットアップ
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
// 1秒ごとに温度を表示
setInterval(function() {
  // getTemp メソッドで温度を取得
  console.log(sensor.getTemp());
}, 1000);</pre><p></p>

<p>記述したプログラムを実行するには、書き込みボタンをクリックします。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/7f65ff42-3a83-f2bd-aee3-3ee159c4837c.png" alt="image" /></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/33ef5c82-e498-ad31-1eea-e608c8ba0178.png" alt="image" /></p>

<p>温度センサの値がコンソールに出力されました。センサー部分を指で摘んだり、コタツの中にセンサを入れたりすることで、温度の変化を確認することができます。</p>

<p>ここでプログラムについて解説します。</p>

<p>ポイントは3行目の<code>require("DS18B20")</code>と7行目の<code>sensor.getTemp()</code>です。
7行目の<code>sensor.getTemp()</code>の命令一つで温度センサの値[℃]が取得できていることに注目してください。
本来、温度センサを始めとする電子部品から読み取れるのは、電圧の値です。ここから意味のある値、つまり温度を取得するには、センサの仕様を元に、電圧値に対して何らかの計算をしてやらなければなりません。
上記プログラムでは、最初にrequireしたDS18B20モジュールがこの辺りの計算を全て隠蔽してくれているので、末端のプログラムでは<code>getTemp()</code>の命令一つで温度値を取り出すことができるようになっています。下図のようなイメージです。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/c789ed26-209f-aea8-5d9a-51a5145495b1.png" alt="image" /></p>

<p>Espruinoでは各種ハードウェアに対応するモジュールが多数提供されており、電圧値等の生データを意識せずに、センサーの値を取得することができるようになっています(<a href="http://www.espruino.com/Modules" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">モジュール一覧</a>)。</p>

<p>そしてこれらのモジュールはオープンソースとして<a href="https://github.com/espruino/EspruinoDocs" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">EspruinoDocs</a>というリポジトリで管理されています。ここにプルリクエストを送ることで、誰でもモジュールを開発/公開することができます。筆者も最近、IoT向けプロトコルといわれている<a href="http://www.espruino.com/MQTT" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">MQTTのクライアントモジュール</a>に機能追加を行い、取り込んでもらいました。自分で自分の好きなプロダクトに手を加えられるのは、オープンソースの醍醐味ですね。</p>

<h3>Web IDEについてもう少し</h3>

<p>とりあえず温度センサの値を取得することに成功したので、ここでWeb IDEの使い方について、もう少し触れておきます。</p>

<h4>コンソールとエディタの併用</h4>

<p>例えば先ほどの温度センサのプログラム実行中に、コンソールにて下記プログラムを実行してみます。</p>

<p></p><pre class="crayon-plain-tag">clearInterval();</pre><p></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/2efee643-ed4e-776e-aacb-77d154e9f6d2.png" alt="image" /></p>

<p>1秒毎に行われていた温度センサの値のコンソール出力が止まります。
続いて、温度を取得する命令を実行してみましょう。</p>

<p></p><pre class="crayon-plain-tag">sensor.getTemp();</pre><p></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/243dc0ad-34d9-9715-e5a6-b9917471880d.png" alt="image" /></p>

<p>温度が表示されました。</p>

<p>エディタで書き込んだコードに対して、自分の好きなタイミングで任意のコードを実行することができます。まさに、Webインスペクタのコンソール的な使い方ですね。</p>

<h4>resetメソッド</h4>

<p>画面左側のコンソールにて<code>reset();</code>を実行することにより、書き込んだプログラムの内容をリセットすることができます。コンソールにていろいろやりすぎてわけが分からなくなってしまったときや、単純にEspruino上で実行中のプログラムの動作を止めたい場合に使用します。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/ed971ec7-ff43-fa8b-eaab-f2cfc527bb3d.png" alt="image" /></p>

<h2>Wifiに接続する</h2>

<p>いよいよEspruinoをインターネットに繋げます。
冒頭の「Espruinoを使い始める&gt;必要物品を調達する」で紹介した、<a href="https://www.adafruit.com/products/1469" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CC3000 Wifi Module</a>を用意しましょう。こちらにもピンヘッダを付ける必要があります。</p>

<h3>結線</h3>

<p>ピンが多いですが、慌てずに落ち着いて結線しましょう。少なくとも、GNDとVBatだけは絶対に逆にしてはいけません（多分壊れます）。</p>

<table>
<thead>
<tr>
  <th>Espruinoのピン</th>
  <th>CC3000のピン</th>
</tr>
</thead>
<tbody>
<tr>
  <td>GND</td>
  <td>GND</td>
</tr>
<tr>
  <td>VBat</td>
  <td>VIN</td>
</tr>
<tr>
  <td>B3</td>
  <td>IRQ</td>
</tr>
<tr>
  <td>B4</td>
  <td>VBEN(CS)</td>
</tr>
<tr>
  <td>B5</td>
  <td>CS</td>
</tr>
<tr>
  <td>B6</td>
  <td>MOSI(DIN)</td>
</tr>
<tr>
  <td>B7</td>
  <td>MISO(DOUT)</td>
</tr>
<tr>
  <td>B8</td>
  <td>CLK(SCK)</td>
</tr>
</tbody>
</table>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/10f6cb5e-a48c-96ca-4b13-18250e5963c3.png" alt="image" /></p>

<h3>プログラム</h3>

<p>下記プログラムをWeb IDEのエディタに貼付け、<code>wifiConfig</code>の<code>ssid</code>と<code>key</code>を、接続可能なWifiのSSIDとパスワードに編集します。</p>

<p></p><pre class="crayon-plain-tag">// wifi接続情報 ssidとパスワード
var wifiConfig = {
  ssid: "",
  key: ""
};

// コネクション確立時のコールバック
function onWifiConnect(s) {
  if (s=="dhcp") {
    // GETリクエストを投げる : 公式の Hello World! と返してくれるURL
    require("http").get("http://www.pur3.co.uk/hello.txt", function(res) {
      var data = "";
      res.on('data', function(chunk) {
        // 細切れのデータを変数に足し込む
        data += chunk;
      });
      res.on('close', function(){
        // レスポンスが全部返ってきたら溜め込んだデータをコンソールに出力
        console.log(data);
      });
    });
  }
}

// CC3000Wifiモジュールに繋ぐ
var wlan = require("CC3000").connect();
// wifiネットワークに繋いで、GetRequestを実行
wlan.connect( wifiConfig.ssid, wifiConfig.key, onWifiConnect);</pre><p></p>

<p>書き込みボタンを押して、プログラムを実行します。Wifiに接続しに行くので、少し実行に時間がかかります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e.png" alt="スクリーンショット 2015-03-10 3.33.54" width="598" height="480" class="alignnone size-full wp-image-13659" srcset="/wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e.png 598w, /wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e-300x241.png 300w, /wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e-207x166.png 207w" sizes="(max-width: 598px) 100vw, 598px" /></a></p>

<p>コンソールに&#8221;Hello World!&#8221;と表示されました。この文字列は、Espruino本家がGetリクエスト用に用意しているURLから取得したものです。</p>

<p>しばらくWifiに接続していると、多少熱くなりますが大丈夫です。ただ、配線を悪い感じで間違った場合は、触った瞬間に尋常ではない熱さを感じることができます。すぐに電源を抜きましょう。当然ですが誤配線は故障やケガの原因になりますので、慎重に、落ち着いて結線することが大事です。</p>

<p>では、プログラムについて解説します。</p>

<p>26行目と28行目にて、Wifi接続処理を行っています。connectメソッドが2つ出てきているのが少しややこしいですが、26行目の<code>require("CC3000").connect()</code>のconnectメソッドはCC3000Wifiモジュールとの接続を意味し、28行目の<code>wlan.connect()</code>のconnectメソッドはWifiネットワークへの接続を意味しています。</p>

<p>後者28行目のWifiネットワークへのconnectメソッドは、SSIDとパスワード、そして接続完了後に実行されるコールバックを引数に取ります。今回のプログラムでは、<code>onWifiConnect</code>が呼び出され、このコールバックの中でGETリクエストが実行されます。</p>

<p>10行目でGetリクエストを実行しています。インターフェイスは、node.jsのhttpモジュールのgetメソッドと同様です。http://www.pur3.co.uk/hello.txtに対してGetリクエストを実行し、レスポンスをコンソールに表示しています。</p>

<p>今回のサンプルはGETリクエストでしたが、もちろんPOSTリクエストを投げたり、EspruinoをWebサーバとして動かすことも可能です。</p>

<p><strong>参考</strong></p>

<ul>
<li><a href="http://qiita.com/rockymanobi/items/d50fcaf26cb59afb586b" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">POSTリクエストを投げる</a></li>
<li><a href="http://qiita.com/rockymanobi/items/e85a57408fa07da6b29c" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WEBサーバとして動かす</a></li>
</ul>

<h1>まとめ</h1>

<p>駆け足でしたが、Espruinoを購入し、温度センサで温度を測り、Wifiに繋ぐところまでたどり着きました。
センサーとインターネットに繋がれば、とりあえずセンサー情報をクラウドに上げて、それをブラウザで面白おかしく表示するようなサービスは作れます。これを機に、とりあえず何でもよいから作ってみるのはいかがでしょうか。</p>

<p>筆者も<strong>会社のトイレの空き状況をブラウザで見れるサービス</strong>を作ったり、<strong><a href="http://rocky-manobi.com/blog/?p=232" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">すだちの木に水を上げるとマスコットが喜ぶ玩具</a></strong>等々をEspruinoで作って運用しています。実際に作って運用してみると、本当にいろいろなことに気づきます。この手のサービスやシステムを設計するにあたっての勘所や注意すべきこと、開発当初は思いもよらなかったサービスの&#8221;効果&#8221;等、とにかくいろいろなことに気づかされます。もちろんハードウェアの専門家になることが目的ではないのですが、とても勉強になりますよ。</p>

<p>ちなみに、Espruinoは日本語ドキュメントが少ないことがネックです。なんとかできないものかと、去年ひっそりと<a href="http://qiita.com/advent-calendar/2014/espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Advent Calendar 2014</a>なるものを作りました。（ところどころ挫折していますが）これらを参考に、一緒に面白いものを作っていけたらと思います。</p>

<p>最後に、Web開発者がIoT/WoTに挑戦してみる理由について、筆者の思うところを少しだけ。</p>

<p>これからはIoTだ！WoTだ！大きなビジネスチャンスだ！乗り遅れるな！……と、そういった現実的なものもよいとは思いますが、筆者個人としては、Web開発者がIoT/WoTに挑戦してみる理由は、「その方が面白いものが作れそうだから」で十分なのではと思っています（記事の冒頭ではえらそうなこと言っていますが）。</p>

<p>これまでのWebサービスは、人間にインプットしてもらった情報を収集して、それを便利で面白い形にしてアウトプットするものが多かったように思えます。紙でやっていたことをシステムに落としたようなものです。でも、たくさんのインプットがなければ面白くも便利にもならないし、面白くも便利でもなければ誰も情報をインプットをしてくれません。様々なサービス、システムがこんな鶏と卵のような悩みと戦ってきたのだと思います。</p>

<p>でも、インプットをするのが人だけでなく、モノが自ら語ってくれたら、少なくとも有益なインプットを作り出すことはできますよね。情報さえそろえば後はそれをどう見せるか、それは我々Web開発者の土俵です。面白いものが作りやすくなるのではないかと思っています。</p>

<p>で、面白いことをやっていたら、結果儲かっていた。となったら、ラッキーだなと。
エンジニアが勉強する理由なんてそんなものでよいのでは、と最近考えています。
(あ、でもこの辺の市場が拡大することは間違いないと思いますよw。実際、この手のサービスのお仕事のお話をいただく機会が増えてきています^^）</p>

<p>というわけでIoT/WoT。言葉自体は流行っていますが、取り組んでいる人はまだまだそう多くはありません。
これを機に、まずはEspruinoで、面白いモノを作っていきましょう。</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
		<item>
		<title>WoTはここからはじめる！？JavaScriptで開発できる3つのJS Boardデバイス</title>
		<link>/bathtimefish/13109/</link>
		<pubDate>Mon, 02 Mar 2015 00:00:16 +0000</pubDate>
		<dc:creator><![CDATA[村岡 正和]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JS Board]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=13109</guid>
		<description><![CDATA[連載： IoTxWeb (6)JavaScriptではじめる組み込み系プログラミング さまざまなデバイスがWebを介してつながるWeb of Things（WoT）。WoTの普及によってさまざまな分野からWeb上に新しい...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (6)</div><h2>JavaScriptではじめる組み込み系プログラミング</h2>

<p>さまざまなデバイスがWebを介してつながるWeb of Things（WoT）。WoTの普及によってさまざまな分野からWeb上に新しいサービスがローンチされ、Webを利用するユーザーに新しい体験が提供されるタイミングが、すぐそこまできている感じがします。</p>

<p>一方で、WoTの普及はWebクリエイターにとっても、新しいビジネスチャンスかもしれません。ひと昔前まで、Web技術は、PCのWebブラウザ上でしか使われないものでした。しかし現在では、Firefox OSのようにモバイル・ネイティブで動作するようになりました。さらに最近では、マイコンなどの組み込み機器でも、直接JavaScriptなどのWeb技術が動作するものが出てきました。</p>

<p>ここ最近、海外でリリースされているデバイスの中には、JavaScriptなどのWeb技術を強くキャッチアップしている製品が増えてきています。今回はそれらJS Boardの中から、筆者がよく使っているのものを3つ紹介したいと思います。</p>

<h2>Espruino</h2>

<p><a href="https://tessel.io/espruino.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">espruino.com</a></p>

<p>2013年に<a href="https://www.kickstarter.com/projects/gfw/espruino-javascript-for-things" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Kickstarterで資金調達が開始</a>され、目標額を大きく超える調達額を獲得し開発されたデバイスです。リファレンスボードであるEspruino Boardは、72MhzのCortex-M3でJavaScriptプログラムがコンパイルされ、動作する小さなマイコンです。</p>

<p><img src="http://www.espruino.com/img/ESPRUINOBOARD.jpg" alt="Espruino Board" width="280" height="440"></p>

<p>JavaScriptコードは、専用の<a href="https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino IDE</a>で編集し、EspruinoをPCとUSB接続すれば、IDEからEspruinoへ直接プログラムが転送できるようになっています。ArduinoのようにIDEが用意されているので、気軽に開発できるのがよいですね。</p>

<p>例えば、Espruinoに人感センサーをつないで人の動きを検知するサンプルコードは、このようになります。</p>

<p></p><pre class="crayon-plain-tag">setWatch(function() {
        LED2.write(1);
        setTimeout(function() {
        LED2.write(0);
    }, 3000);
}, A1, {repeat:true, edge:"rising"});</pre><p></p>

<p>EspruinoのJavaScriptには、ハードウェアを制御するための専用APIが、搭載されています。上記のコードでは <a href="http://www.espruino.com/Reference#l__global_setWatch" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">setWatch</a> というsetIntervalに似た関数で、センサーの状態を取得するループ処理を行っています。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150222_153543-640x480.jpg" alt="Espruinoで人感センサーが動作しているようす" width="640" height="480" class="alignnone size-large wp-image-13116" srcset="/wp-content/uploads/2015/02/IMG_20150222_153543.jpg 640w, /wp-content/uploads/2015/02/IMG_20150222_153543-300x225.jpg 300w, /wp-content/uploads/2015/02/IMG_20150222_153543-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>筆者はこのプログラムをもうちょっと作りこんで、ウチの猫のトイレに設置しています。猫ちゃんがトイレに入ったり出たりするのを検知して、クラウドにデータを送信し、スマートフォンにプッシュ通知するような仕組みをつくりました。猫のトイレがすぐに掃除できるようになったので、猫ちゃんのストレスが減りました（減ったにちがいないｗ）。この事例は<a href="http://special.nikkeibp.co.jp/ts/article/ad0h/172223/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日経テクノロジーオンライン</a>で取り上げていただきました。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20140612_183305-480x640.jpg" alt="Espruino猫トイレセンサーを猫トイレに設置している" width="359" height="500" class="alignnone size-large wp-image-13117" /></p>

<p>Espruinoに関する日本語の情報はあまり多くないですが、いまのところ<a href="http://qiita.com/advent-calendar/2014/espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Advent Calendar 2014</a>がよくまとまっていると思います。個人的にはJS Boardの中で一番気に入っているデバイスなので日本でももっとユーザーが増えてほしいところですね。</p>

<p>これからEspruinoを買おうと思っている方には、上記のEspruino Boardもいいんですが、現在開発中の<a href="https://www.kickstarter.com/projects/gfw/espruino-pico-javascript-on-a-usb-stick" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Pico</a>もオススメです。Espruino PicoはEspruino Boardよりもさらに小さいUSBメモリサイズの基盤です。とても小さな基盤なのでいろいろなケースに活用できるのではないでしょうか。Espruino Picoのプレオーダー分は、2015年春ごろに発送される予定のようです。</p>

<h2>Tessel</h2>

<p><a href="https://tessel.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">tessle.io</a></p>

<p><a href="https://www.dragoninnovation.com/projects/22-tessel" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">DragonInnovationで資金調達された</a>プロジェクトで、Espruinoよりも少し大きなマイコンです。Wifiチップを搭載しているので、単独でWebにアクセスする機能を持っています。</p>

<p><img src="https://s3.amazonaws.com/technicalmachine-assets/technical-io/tessel-red-usb.jpg" alt="Tessel main board" width="280" height="440"></p>

<p>Tesselの特長は、多くの専用モジュールが販売されていることです。加速度センサ、GPS、BLE、サーボコントローラー、NFCなど多くのモジュールが別売りで販売されていて、Tesselのポートに差し込むだけで利用できます。Espruinoに市販のセンサーを接続する場合は電子回路の知識が必要ですが、Tesselの場合は専用ポートに差し込むだけなので回路の知識は不要です。</p>

<p>TesselのJavaScript APIはnode.js互換な仕様になっています。例えば、加速度センサーモジュールを接続してデータを取得するサンプルコードは以下です。</p>

<p></p><pre class="crayon-plain-tag">var tessel = require('tessel');
var accel = require('accel-mma84').use(tessel.port['A']);

accel.on('ready', function () {
    accel.on('data', function (xyz) {
        console.log('x:', xyz[0].toFixed(2), 'y:', xyz[1].toFixed(2), 'z:', xyz[2].toFixed(2));
    });
});

accel.on('error', function(err){ console.log('Error:', err); });</pre><p></p>

<p>JavaScriptらしいイベントドリブンな記述で、加速度センサーのデータがリアルタイムに受信できます。このコードでrequireしているtessel, accel-mma84といったnode.jsのモジュールライブラリはnpmでインストールできます。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150222_133033-640x480.jpg" alt="Tesselで加速度センサーのデータを取得している。デバイスを傾けると、値が変化する" width="640" height="480" class="alignnone size-large wp-image-13118" srcset="/wp-content/uploads/2015/02/IMG_20150222_133033.jpg 640w, /wp-content/uploads/2015/02/IMG_20150222_133033-300x225.jpg 300w, /wp-content/uploads/2015/02/IMG_20150222_133033-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Tesselは基本的に、4つのモジュール専用ポートに専用モジュールを接続して利用するスタイルですが、専用モジュール以外が利用できないかというと、そうではありません。Tesselには汎用的なGPIOポートも搭載されているので、<a href="http://akizukidenshi.com/catalog/top.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">秋月電子</a>あたりで買ってきたセンサーをつなげることもできます。下図はTesselのGPIOポートでLEDを点滅させてみたところです。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150222_132105-640x4801.jpg" alt="TesselのGPIOポートにLEDを接続してLEDを点滅させている" width="640" height="423" class="size-full wp-image-13146" srcset="/wp-content/uploads/2015/02/IMG_20150222_132105-640x4801.jpg 640w, /wp-content/uploads/2015/02/IMG_20150222_132105-640x4801-300x198.jpg 300w, /wp-content/uploads/2015/02/IMG_20150222_132105-640x4801-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />　▲TesselのGPIOポートにLEDを接続してLEDを点滅させている</p>

<p></p><pre class="crayon-plain-tag">/*
* TesselのGPIOでLチカ
* LEDのアノードをTesselの TX/G1
* LEDのカソードをTesselの GND
* に接続する
*/
 
var tessel = require('tessel');
var gpio = tessel.port['GPIO'];
 
gpio.digital[0].write(0); // TX/G1
 
flag = true;

setInterval(function() {
  if(flag == true) {
    flag = false;
  } else {
    flag = true;
  }
  console.log(flag);
  if(flag) gpio.digital[0].write(1);
  if(!flag) gpio.digital[0].write(0);
}, 1000);</pre><p></p>

<p>Tesselは今回紹介するデバイスで唯一国内販売されているデバイスです。<a href="https://www.switch-science.com/catalog/list/563/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スイッチサイエンス</a>で購入できます。国内で買える、電子回路の知識が不要、node.js互換など、ハードウェアのない方でも入門しやすいデバイス、といえるのではないでしょうか。</p>

<h2>Spark</h2>

<p><a href="https://www.spark.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">spark.io</a></p>

<p>Sparkはマイコンというよりは、サーバーサイドを含めたオープンなIoTプラットフォームとして開発されています。<a href="http://makezine.jp/blog/2014/07/spark-lands-4-9-million-in-funding-launches-new-cloud-based-operating-system.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">昨年、Lion Wells Capital、O’Reilly AlphaTech Venturesなどから出資を受けて話題</a>となりました。</p>

<p>Sparkから発売されている小型マイコンボード Spark Coreは、72 Mhz Cortex M3とCC3000 Wifi moduleを組み合わせた「マイコン付きWifiモジュール」と呼べるようなもので、Arduino互換な言語でプログラムを記述します。</p>

<p><img src="https://store.spark.io/assets/core-a6fcc2b47e235d529ab58fe0a1124588.png" alt="Spark Core" width="280" height="440"></p>

<p>EspruinoやTesselと違って、JavaScript使わへんやんけと思われるかもしれませんが、Spark Coreから取得したデータはすべてWeb APIで取得できるようになっており、Web APIをラップしたJavaScript SDKがnode.js、Webブラウザで利用できるよう提供されています。</p>

<p>Spark Coreへプログラムを転送する場合は、Espruino、Tesselと違って、PCとUSB接続をする必要がありません。クラウド上のIDE <a href="https://www.spark.io/build" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Spark Build</a>で編集したコードをFlashすると、ネットワークに接続されているSpark Coreにリモート転送され、実行される仕組みになっています。</p>

<p>下のコード例では、Spark Coreと人感センサーをつないでセンサーの値を detected 変数にバインドしています。（一部抜粋）</p>

<p></p><pre class="crayon-plain-tag">Spark.variable("detected", &amp;detected, INT);
...
detected = motionDetect();</pre><p></p>

<p>上記のようにバインドされた値は以下のようにアクセスすることで、クラウドからセンサーの値を同期的に取得することができます。</p>

<p></p><pre class="crayon-plain-tag">curl -G https://api.spark.io/v1/devices/[Device ID]/detected \
  -d access_token=[Access Token]</pre><p></p>

<p>これをSparkのJavaScript SDKを利用して記述すると以下のようになります。</p>

<p></p><pre class="crayon-plain-tag">var spark = require('spark');
var ret = spark.login({"accessToken": "[Device Token]"});
device.getVariable('detected', function(err, data) {
  if (err) {
    console.log('An error occurred while getting attrs:', err);
  } else {
    console.log('Core attr retrieved successfully:', data);
  }
});</pre><p></p>

<p>SparkはSDKの他にサーバー、デバイス間の通信プロトコルが、node.jsモジュールで実装されています。それを利用するモックアップサーバーもnode.jsコードで公開されているので、結構JS成分が多いです。SparkのプロトコルはCoAP+SSLで設計されていて、このあたりはWoTというよりはIoTなんですが、かなり興味深い実装です。</p>

<p>筆者がSpark Coreを使ってみた感覚では、長時間にわたる動作についてはTessel、Espruinoに比べて安定していると感じました。Tessel、Espruinoは実験や製品の試作レベルでカジュアルに利用できるデバイスですが、Sparkは、それらよりも一歩製品レベルに踏み込んでいるような印象があります。</p>

<p>現在販売されているデバイス Spark Core は39ドルで販売されていますが、次世代のSparkデバイスである PhotonとそのコアモジュールP0が2015年5月に発売予定となっており、現在プレオーダーが受け付けられています。価格はPhotonが19ドル、P0が10個で100ドル（1個あたり10ドル）となっており、IoT製品の量産に利用できるような価格帯となっています。</p>

<h2>まとめ</h2>

<p>個人的な話ですが、最近<a href="http://morning.moae.jp/lineup/362" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ハルロック</a>の影響で電子工作にはまってます。仕事が終わってからハンダ付けをしたり、ブレッドボードで配線したりしてる今日この頃なんですが、マイコンのプログラミングはC++とかJavaとかでやるのはなんか負けた気がするので、JavaScriptでプログラミングできるものにこだわっています。</p>

<p>そういったWeb技術、特にJavaScriptを中心的に利用している組み込み機器を個人的に”JS Board”と呼んでいて、<a href="https://atnd.org/events/57672" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">勉強会</a>を開催したりしています。先日のHTML5 Conference 2015でも出展させていただきました。今後も勉強会などをやって、情報共有などをしていこうと思っています。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150125_155111-640x4801.jpg" alt="" width="640" height="441" class="alignnone size-full wp-image-13150" srcset="/wp-content/uploads/2015/02/IMG_20150125_155111-640x4801.jpg 640w, /wp-content/uploads/2015/02/IMG_20150125_155111-640x4801-300x207.jpg 300w, /wp-content/uploads/2015/02/IMG_20150125_155111-640x4801-207x143.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />　▲HTML5 Conference 2015にJS Board勉強会が出展。さまざまなJS Boardデバイスが展示されている。</p>

<p>これからまだまだJavaScriptを活用するデバイスが続々と登場してきそうです。
JS Boardに興味を持った方々、ぜひ一緒に勉強していきましょう！</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
		<item>
		<title>【IoT時代のWebとモノづくり】WebクリエイターもMakeしようぜ！ぶっちゃけ対談60分</title>
		<link>/miyuki-baba/13039/</link>
		<pubDate>Wed, 25 Feb 2015 01:00:47 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=13039</guid>
		<description><![CDATA[連載： IoTxWeb (5)ArduinoやRaspberry piをはじめとした低価格のマイコンが登場し、ハードウェアの知識がなくても、手軽に電子工作が楽しめるようになってきました。HTML5 Experts.jp読...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (5)</div><p>ArduinoやRaspberry piをはじめとした低価格のマイコンが登場し、ハードウェアの知識がなくても、手軽に電子工作が楽しめるようになってきました。HTML5 Experts.jp読者の皆さんも、こうしたIoTやWoTに関心を持ち始めた方も多いのではないでしょうか。</p>

<p>WebクリエイターがMakeするにあたって、Webで培った技術は役に立つのか・立たないのか、これから活躍の場はあるのか。白石俊平編集長を聞き手に、すでにモノづくりの世界に足を踏み入れ始めたエキスパート<a href="https://html5experts.jp/bathtimefish/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">村岡正和さん</a>、<a href="https://html5experts.jp/dsuket/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">高岡大介さん</a>、もうバリバリのハードウェアの人として活躍している<a href="http://y-okajima.com/post/62798714861" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">岡島康憲さん</a>にぶっちゃけトークを展開してもらいました。</p>

<p><img src="/wp-content/uploads/2015/02/iot-1.jpg" alt="" width="640" height="373" class="alignnone size-full wp-image-13061" srcset="/wp-content/uploads/2015/02/iot-1.jpg 640w, /wp-content/uploads/2015/02/iot-1-300x174.jpg 300w, /wp-content/uploads/2015/02/iot-1-207x120.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">　▲左から、白石俊平編集長、岡島康憲さん、高岡大介さん、村岡正和さん</span></p>

<h2>IoTやハードウェアの世界に踏み込んだきっかけは？</h2>

<p><br>
<strong>白石：</strong>まずは、皆さんのIoTに対する取り組みを、教えてください。
<br><br>
<strong>村岡：</strong>僕はJavaScriptが得意なバリバリのWeb系エンジニアなんですが、最近IoTやWoTがIT業界で重要視されてきたので、ハードウェアの勉強を始めたところです。
<br><br>
でも、いまさら組込みの世界でJavaとかC++を始めてもかなわないし、そもそも自分はWebのエンジニアなんで、そっちに行ったら負けかなとも思ってるんです。僕のIoTへのこだわりは、ハードのアプリケーションやデバイスが動くWeb技術を取り入れていきたいってことなんですよね。</p>

<p><img src="/wp-content/uploads/2015/02/muraoka_1.jpg" alt="" width="550" height="371" class="alignnone size-full wp-image-13053" srcset="/wp-content/uploads/2015/02/muraoka_1.jpg 550w, /wp-content/uploads/2015/02/muraoka_1-300x202.jpg 300w, /wp-content/uploads/2015/02/muraoka_1-207x139.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲村岡 正和さん（※今回はリモートで参戦）<br>神戸でシステム開発を行っているフリーランスのエンジニア。コミュニティ活動では、html5jのスタッフやマークアップ部部長、HTML5-WEST.jpの代表として関西でHTML5を中心としたWeb技術の普及に努めている。<a href="https://atnd.org/events/57672" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JS board勉強会</a>や、「<a href="http://w-ug.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日本ウェアラブルデバイスユーザー会</a>」を運営している。</span>
<br><br>
JavaScriptで組込み機器を動かすというソリューションに注目していて、その技術を追っかけるために、「<a href="https://atnd.org/events/57672" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JS board勉強会</a>」を立ち上げました。自分の家にも、JavaScriptを使った組込みボードで、猫の監視センサーを作ったりしています。</p>

<p><img src="/wp-content/uploads/2015/02/muraoka_2.jpg" alt="" width="550" height="399" class="alignnone size-full wp-image-13057" srcset="/wp-content/uploads/2015/02/muraoka_2.jpg 550w, /wp-content/uploads/2015/02/muraoka_2-300x217.jpg 300w, /wp-content/uploads/2015/02/muraoka_2-207x150.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲猫の監視センサー　※詳しくは<a href="http://www.slideshare.net/bathtimefish/espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらの資料</a>参照</span>
<br><br>
<a href="http://www.espruino.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino</a>というマイコンボードをネコのトイレに設置して、猫が出たり入ったりすると検知して、僕のスマホに送ってくれるんですよ。焦電センサーを使って、マイコンとWifiのモジュールとつないでいるんです。僕が外出していても猫がトイレに行ったことがわかるし、家にいると、すぐトイレが掃除できるのは便利なんです。なんかスマートハウスぽいでしょ？(笑)。これはJavaScriptで操作します。Arduinoのようにセンサーをつけて、JavaScriptで動かせるので、僕みたいなWebエンジニアでも普通に使えます。
<br><br>
あと1つ、<a href="https://tessel.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Tessel</a>もJavaScriptで操作できるものもあります。Espruinoよりももっと簡単に操作できる端末。Wifiが内蔵されているので、Intel Edisonに近いかんじです。Tesselの場合は、センサー類が別売りされている。簡単に装着することができるので、電子工作の知識がなくても使えます。スーパー簡単です。Espruinoはいろんな機能が使えるけど、電子工作の知識が必要ですね。
<br><br>
<strong>高岡：</strong>私は「<a href="http://aitc.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">先端IT活用推進コンソーシアム</a>」で活動しているのですが、IT企業がIoTに対してどう取り組んでいくかを考えるために、2014年11月から月1回、一から勉強するIoT勉強会やハッカソンなどを主催しています。</p>

<p><img src="/wp-content/uploads/2015/02/takaoka.jpg" alt="" width="550" height="404" class="alignnone size-full wp-image-13065" srcset="/wp-content/uploads/2015/02/takaoka.jpg 550w, /wp-content/uploads/2015/02/takaoka-300x220.jpg 300w, /wp-content/uploads/2015/02/takaoka-207x152.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲高岡 大介さん<br>外資系SIerでエンタープライズシステムの開発を経験した後、独法研究所にて形式手法やセマンティックWeb関連の研究に従事。ベンチャー企業などを経て現在はフリーランスとして、技術支援、開発、執筆、講演など様々な仕事に携わる。<a href="http://www.buildinsider.net/column/takaoka-daisuke" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Build Insider</a>でオピニオンコラムを執筆中。Senchaユーザーグループや<a href="http://aitc.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">先端IT活用推進コンソーシアム</a>で活動している。</span>
<br><br>
例えばこの<a href="http://jp.littlebits.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">littleBits（リトルビッツ）</a>を使って、勉強会でデモをやったりしてます。Arduinoも試してみたんですが、Wifiシールドを付けないとインターネットにつながらないので、<a href="http://www.intel.co.jp/content/www/jp/ja/do-it-yourself/edison.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Intel Edison</a>を買ってつないだりします。
<br><br>
<a href="http://www.seeedstudio.com/wiki/GROVE_System" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GROVE System</a>とか、さっきのTesselとか組み合わせれば簡単にできるというのは、最近の流行ですね。littleBitsは磁石でつながるし、ショートしないようになっているから子供でも使える。間にセンサーにはさんだり、シンプルなボタンにラッチというモジュールを挟むだけでトグルスイッチにもなります。あとはcloudBit（クラウドビッツ）はインターネットにつながる秘密兵器なので、注目しています。IFTTTに対応したBitモジュールが便利なんですが、まだ日本では正式発売されていないんです。
<br><br>
こんなかんじでデバイスやセンサーのことは勉強してますが、自分はあくまでもアプリケーションレイヤーの部分で頑張りたいと思っています。だからデバイスはお手軽に組み合わせて、使えるものを選んで試しているかんじです。
<br><br>
<strong>岡島：</strong>私は、もともとはWebサービスの企画屋だったんです。2009年くらいから友人たちとハードウェアをいじり始めて、2011年に岩淵技術商事を起業。<a href="http://tokyodevices.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">東京デバイセズ</a>研究開発用製品を製造販売するメーカーを展開しています。それ以外にも<a href="http://abbalab.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ABBALab</a>でいうハードウェアスタートアップアクセラレータへのサポートを通じて、ハードウェアのスタートアップ支援や、アクセラレーションのプログラム提供などを行っているので、IoTに関わる機会は多いですね。</p>

<p><img src="/wp-content/uploads/2015/02/okajima.jpg" alt="" width="550" height="383" class="alignnone size-full wp-image-13067" srcset="/wp-content/uploads/2015/02/okajima.jpg 550w, /wp-content/uploads/2015/02/okajima-300x208.jpg 300w, /wp-content/uploads/2015/02/okajima-207x144.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲岡島 康憲さん<br>岩淵技術商事株式会社 執行役員。インターネット関連企業・NECビッグローブにて、Webサービスの企画立案・運用やインターネット接続型ハードウェアの企画立案に6年間従事する。2011年7月、エネルギー関連ハードウェアや、Webサービスの企画開発を主業務とする岩淵技術商事株式会社を創業。研究開発用電子製品を開発・販売する「<a href="http://tokyodevices.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">東京デバイセズ</a>」を運営している。</span>
<br><br>
友人たちと作った代表的なもの1つは、2009年にTwitterと脈拍のセンサーをつないで「<a href="http://www.engadget.com/2009/06/28/device-judges-your-pulse-and-shares-the-results-with-your-mom-an/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">死んだらツイートするデバイス」こと「秋月パルス」</a>。毛細血管の赤外線吸収量から、血流の変化を検出し、Twitterに生命活動を投稿する自作デバイスです。Twitter APIを活用したハードウェアなんですが、同じように個人が開発したWebサービスと絡めたハードウェアで、PCなしで装置単体でネットもつながるのは当時はほとんどなかったと思います。海外のTechCrunchやEngadgetで取り上げられて、日本で話題になりましたね。
<br><br>
<strong>白石：</strong>へえ、すごいですね。ところで、ハードをいじり始めたきっかけは何だったんですか？
<br><br>
<strong>岡島：</strong>起業する前は、NECビッグローブで動画配信サービスなどWebサービスの企画運営をやってたんです。多くのWeb系企業が展開していたサービスの大半がPCや携帯電話向け中心だった状況に限界を感じて、上司と研究開発部を作って、今で言うChromecastのようなハードウェアプロトタイプをはじめ、いくつかのハードウェアの企画や試作をしました。また、Kickstarterのようなクラウドファンディングが普及し始めた時期に、個人間送金のようなかたちで投げ銭ができるサービスをリリースしたりしていました。
<br><br>
<strong>白石：</strong>東京デバイスセズは、販売代理店をやってるんですか？
<br><br>
<strong>岡島：</strong>いえ、全体の半分以上は自社製品です。複数人で製品開発を行う場合もありますが、大半のものは弊社の代表自身が開発しています。利用シーンやユーザーニーズををうまくとらえることで、少人数であっても魅力ある製品を作れるのではないかと考えています。</p>

<h2>WebクリエイターがMakeする必要って、あるの？</h2>

<p><br>
<strong>白石：</strong>ではそろそろ本題に。そもそもWebクリエイターがMakeする必要性って、あると思いますか？
<br><br>
<strong>村岡：</strong>絶対やらないといけないということはない。jQueryと同じで使いたい人だけやればいいんじゃないかと。ただし、やったら絶対面白いと思いますね。これまでなかった新しいビジネスのチャンスにもなるし、勉強すればハードウェア業界に打って出れるチャンスでもある。
<br><br>
別にフリーランスだから新しい仕事を取りにいこうとか、自分で製品を作って売ろうとかも、今のところ考えてない。じゃあ、なんでかと言えば、答えはハードウェアの人と組んで仕事をするためには、最低限の知識が必要だと思っているから。これからはWebクリエイターもある程度のハードの知識は必要だと思うし、ハードウェア側の人も勉強しているはず。
<br><br>
お互いに共通言語で話せるくらいにならないと、いいものは作れないと思うんです。これからは絶対Makersみたいな仕事が増えていくし、ハードウェア屋さんの発想や知識だけではできないことを作りたいんですよね。Webクリエイターにしかできない新しいソリューションを生み出していきたい。ハード屋と仲良くなりたいから勉強しているし、自分のスキルアップや新たな分野にシフトチェンジするチャンスだと思ってます。
<br><br>
<strong>白石：</strong>なるほど。今の村岡さんの話には「IoTの仕事が増えていく」、「その中にWebクリエイターの仕事がある」という2つの仮説がありましたね。岡島さんは、どう思われますか？</p>

<p><img src="/wp-content/uploads/2015/02/okajima3.jpg" alt="" width="550" height="353" class="alignnone size-full wp-image-13073" srcset="/wp-content/uploads/2015/02/okajima3.jpg 550w, /wp-content/uploads/2015/02/okajima3-300x192.jpg 300w, /wp-content/uploads/2015/02/okajima3-207x132.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>岡島：</strong>IoTの仕事は実際、今も増えています。ここ2～3年は、「ネットとセンサーをつなげてこんなことができませんか？」といった問い合わせも多いですね。CES（Consumer Electronics Sh.ow）でもIoT系のデバイスやプロダクトも増えて、盛り上がっていた。大手メーカーやハードウェアベンチャーからこれまでインターネットと関係なかったデバイス屋さんからの相談も増えてます。
<br><br>
Webクリエイターの仕事チャンスはあると思います。僕自身もハードとソフトの中間の立場なので、バリバリのハードウェア業界の方々にはWebサービス界隈の人の顔をする。
「IFTTT（イフト）っていうのはなあ…」なんて話を偉そうにするし、逆にWebサービス業界の方々にはハードウェア界隈の人の顔をして「お前は知らないかも知らないけど、ハードウェアって超大変なんだぞ」って！
<br><br>
ハードウェア業界の方々の中には、Webサービスの可能性や実装に必要な技術を把握しきれていない人もいる。例えば、福島で放射能のセンサーを作ろうとしたときに、GPSとネットをデバイスにつなぐにはどうしたらいいの？って相談されたとします。通信は3Gならいけるな、Webサーバーを立てて、管理画面作らなきゃとか、Googleアカウント立ててみようかとか…。Web系のエンジニアが必要とされるところはたくさんあります。特にセンサー、デバイス周りの認証回りは、相性がいいと思いますね。
<br><br>
Web的な発想で企画提案する人や、管理画面が必要なのであれば、UIデザイナーも必要とされてくるはず。だから、その仮説は正しいんじゃないかと。</p>

<h2>ハードウェアエンジニアとWebクリエイターの違い</h2>

<p><br>
<strong>村岡：</strong>さっきの話すごくわかりますね。最近、ハードウェア屋さんと話をすることが多くなって気づいたんですけど、彼らはソフトウェアやインターネットの知識が意外と少ない。ハードウェアは業務が高度に専門化しているから、設計者だけでは製造できないし、設計も業種が細かく細分化されている。何でもふんわり全部やるWeb業界の文化とは全然違うんですよね。でも、文化の違いを理解するだけでもずいぶん歩み寄れる。まずは業界・風土や仕事の理解ができてから、彼らと話がスムーズにできるというのがスタート地点。
<br><br>
そうなるとWebクリエイターはここからどういうソフトを作ったらいいか、サービスまで広げて考える。ソフトからサービスまで考えることがハード屋さんにはないから、新鮮に映るみたいです。デバイスを作る理由をサービスを作ることまでつなげてあげると驚かれるんです。これはやってみてわかったこと。ハード屋さんには刺激を与えられているし、面白いと言ってもらえる。本質的な新しいジャンルとのマッシュアップだと思っている。まだまだ可能性があるし、新しくて楽しい仕事が増えていくので、みんなも早くやったほうがいいと言いたい。
<br><br>
<strong>白石：</strong>僕は自分がハードを知らなさすぎるせいか、ハード屋さんがソフト屋さんになるほうが簡単じゃないのって思ったりします。ソフトウェア作りって、そんなに難しい気がしないっていうか…。
<br><br>
<strong>村岡：</strong>むこうも同じこと思ってますよ(笑)。電気回路を覚えるほうが、ソフトウェアやWebサービス考えるより簡単じゃないかって。</p>

<p><img src="/wp-content/uploads/2015/02/okajima2.jpg" alt="okajima2" width="550" height="367" class="alignnone size-full wp-image-13075" srcset="/wp-content/uploads/2015/02/okajima2.jpg 550w, /wp-content/uploads/2015/02/okajima2-300x200.jpg 300w, /wp-content/uploads/2015/02/okajima2-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>岡島：</strong>どういうレイヤーで作るかにもよりますけど、例えば銀行のシステムを作るのって個人レベルじゃ厳しいじゃないですか。PHPでちょいちょいとWebサイト作るのとは全然違う。
<br><br>
それと同じで、東京デバイセズは何千万の製品を完全なものを安定的に供給するのは無理だけど、ハッカブルな製品を毎月数台出すくらいなら問題ない。十分売り上げが立つんです。やること次第だし、比べることはあまり意味がない。
<br><br>
IoTの意味って、サービスのモノ化だと思っています。IoTはソフトのハード化なんだと。サービスを作るためにスマートフォンだけじゃ足りないからモノに手を出しているんだと。それが本質なんですね。僕がハードをいじりはじめた理由なんです。興味があったわけじゃないし、PCとガラケーでできることに限界を感じていたから。</p>

<p>大手メーカーが扱っていないモノを作ろうと思ったときに、画面の外に出たくてハードに手を出した。やりたいことに限界を感じたからハードを作り出したんです。ハード屋さんハードがあるからこそ、いわゆる従来型のハードウェアの企画開発フォーカスしてしまって、Webサービスによってハードウェア製品の価値を伸ばすことに検討の余地を残してしまっていると思います。</p>

<h2>今後のIoTビジネスはどうなる？</h2>

<p><br>
<strong>村岡：</strong>サービスというのは「モノを売ってなんぼ」だけじゃない。ハード屋さんはモノを作って売る対価のやりかたに慣れすぎて、それに気づかないんです。クラウドを使うとか、ソフトばらまいて広告を売るとか、Webのマネタイズの話をすると、ハード屋さんに「思いもつきませんでした」と驚かれます。
<br><br>
<strong>高岡：</strong>今後のIoTビジネスの話は興味深いですね。IoT勉強会をやっていると大きく二つの流れがあるような気がします。Makersやデジタルファブリケーションの文脈のIoTと、IBMやインテル、シスコなどの大きいビジネスやスマートグリッドなどの文脈。これが両方が融合していない気がするんですよね。分断されてるというか。Webエンジニアがどっちの文脈でいくのがいいか悩みますね。
<br><br>
先日ガートナーは、ハードウェアスタートアップベンチャーはあと2～3年後で限界がくると指摘していましたね。スタートアップが大企業にとって食われて、やれることがなくなってくるというものでした。</p>

<p><img src="/wp-content/uploads/2015/02/iot-4.jpg" alt="" width="550" height="367" class="alignnone size-full wp-image-13077" srcset="/wp-content/uploads/2015/02/iot-4.jpg 550w, /wp-content/uploads/2015/02/iot-4-300x200.jpg 300w, /wp-content/uploads/2015/02/iot-4-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>白石：</strong>メイカームーブメントが終わるということ？
<br><br>
<strong>岡島：</strong>今の話で2つ面白いと思ったことがあります。1つはシスコやインテルのIoTと、スタートアップのIoTに乖離があるという点。シスコやインテルは、ネットに繋がるハードウェアをどういうプロトコルでつなぐといいかという点にフォーカスしている。そもそも考えている土俵が違うから、ずれがあるんですよね。理由はレイヤーが違うから。
<br><br>
ハードウェアスタートアップ限界説については、ハードウェアスタートアップがハードウェアを作るのはものすごく大変なので、実際今も起きている問題です。イニシャルコストが大きい、設計や試作も大変、サポートも大変と、ハードウェアはお金がかかるビジネスだから。
<br><br>
<strong>村岡：</strong>Kickstarterはバブルみたいなものだって、言われてますもんね。
<br><br>
<strong>岡島：</strong>僕は、ハードウェアを作るコストが下がってくれば、その構造が変わっていくと思っています。ガートナーの発表は製品を設計・製造・販売する環境が今と変わらない前提でのものだけど、製造コスト、サポートのハードルが下がれば、それぞれの枠組みが変わって、さらに多くハードウェアスタートアップが入ってくる。そうなると必然的に、ブレイクスルーが起きてくる。
<br><br>
それは、インターネット業界のスタートアップと仕組みは同じなんですよね。サーバーにはお金がかかるし、新しい技術の伝搬コストや情報共有するコミュニケーションコストもかかるから、大手しかできないと思われてたことが、今はサーバーも安くなったし、GitHubが出てきてベンチャーでも遜色なく作ることができる。
<br><br>
<strong>高岡：</strong>そこでまさに、私たちWebクリエイターの力が役立つ可能性が高いわけですよね。
<br><br>
<strong>岡島：</strong>インターネット業界では、例えばUberのように、物理的な不動産や動産に対してブレイクスルーを起こしてきた。それと同じことが起こればいいだけ。
<br><br>
<strong>白石：</strong>ハードウェアの製造コストが今は高いと思われているけど、ブレイクして、コストが下がれば、スタートアップは引き続き盛り上がるということですね。
<br><br>
<strong>岡島：</strong>もしハードウェアスタートアップのこの盛り上がりが落ち着くとしたら、潜在的な燃料がありそうなバイオ領域に関心が移ることじゃないかって思っています。大手の伸びに押されて尻つぼみになるシナリオはあんまりピンとこないですね。
<br><br>
<strong>村岡：</strong>ああ、確かにそれはありますね。</p>

<h2>IoTの時代、Webクリエイターの仕事はどう変わる？</h2>

<p><br>
<strong>白石：</strong>IoTの時代が来るとして、僕らの仕事ってどう変わっていくのか意見を聞かせてください。
<br><br>
<strong>岡島：</strong>まず、Webのビジネスにどう関わっているかが、1つ大事な判断材料ですね。Webサービスの企画立案している人にとっては、企画の幅を広げるのにいいブーム。アタマのかたすみに考えておいたほうがいいと思います。サーバーサイドをやっている人は、IoTはセキュリティやプライバシーの問題とかで、ツッコミどころが多いから需要が増えると思います。
<br><br>
<strong>白石：</strong>TechCrunchでも、IoTのセキュリティとプライバシー問題は取り上げられてましたね。　
<br><br>
<strong>高岡：</strong>求められる人材としては、ハードウェアの知識もWebの知識もある人だけど、今はまだそうそういないですよね。私たちがハードウェアを理解したり、ハードウェアエンジニアがソフトを理解する必要がある。</p>

<p><img src="/wp-content/uploads/2015/02/iot-3.jpg" alt="" width="550" height="367" class="alignnone size-full wp-image-13071" srcset="/wp-content/uploads/2015/02/iot-3.jpg 550w, /wp-content/uploads/2015/02/iot-3-300x200.jpg 300w, /wp-content/uploads/2015/02/iot-3-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>白石：</strong>今は売り手市場だけど、ハードウェアエンジニアのニーズってどうなんですか？
<br><br>
<strong>岡島：</strong>ハード系のエンジニアも、めちゃくちゃ足りないって言われてますね。ハード系はフリーエンジニアはほとんどいないんです。大手メーカーがつぶれたら、数万人のエンジニアがが野に放たれる。エンジニアを解放してほしいって思ってます(笑)。
<br><br>
「DMM.make AKIBA」の施設運営やハードスタートアップ支援プログラムを小笠原という人間と一緒にやっているんですけど、いろいろなビジネスを通じた売上も重要である一方で、職業の枠をどれだけ増やすか、ハードウェアエンジニアの仕事をどれだけ楽しくできるかをよく話したりします。 
<br><br>
ハードウェアビジネスに関わるためには大手メーカーに入るしか道がない、その状況を変えたい。これからは、想像もしないような職業が、新たなハードウェアニーズの隙間から出てくるはずなんです。そのためにもハードウェアのフリーエンジニアをどうやって増やすかを考えています。
<br><br>
<strong>白石：</strong>IT業界はゼネコン構造が多いですが、ハードウェア業界はどうなんですか？
<br><br>
<strong>岡島：</strong>見方によっては、今のハードウェア業界は20年前のインターネット業界に似ていると言われています。だが、大手しかできなかったことがより低コストでできるようになって、つまり「ハードウェアビジネスの民主化」が進むことで、個人でもビジネスでできるようになった。これからはもっと盛り上がっていくんじゃないでしょうか。
<br><br>
<strong>高岡：</strong>我々Webエンジニアがハードウェアビジネスに飛び込んで、成功する確率はあるのでしょうか？ IoTを勉強すれば、仕事の幅は広がるけど、ガチに参入したらどのくらい成功できるものなのか気になります。</p>

<p><img src="/wp-content/uploads/2015/02/iot-5.jpg" alt="" width="550" height="367" class="alignnone size-full wp-image-13078" srcset="/wp-content/uploads/2015/02/iot-5.jpg 550w, /wp-content/uploads/2015/02/iot-5-300x200.jpg 300w, /wp-content/uploads/2015/02/iot-5-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>岡島：</strong>インターネットのサービスの成功確率とほぼ変わらないと思います。0.00001％とか(笑)。Webのサービスも、生き残る確率は限りなくゼロに近いですよね。
<br><br>
<strong>白石：</strong>大半がつぶれるってことですか？
<br><br>
<strong>岡島：</strong>生まれてつぶれていくのが認識できないくらいですね(笑)。今はまだ母集団が少ないから、目立っているけど。ただ認識しないといけないのは、きちんとバリューが提供できるサービスなのかどうか、お客さんに価値を与えることができるのかどうか、自分達でないとできないサービスなのかということ。ハードもソフトも、そこを設計してサービスを考えられる人は生存確率が高い。
<br><br>
生粋のハードウェア屋よりも、そういう意味ではWebクリエイターの方が成功できるはず。みんな、はてブの「成功するための○○の法則」とか大好きじゃないですか。そいう思想に慣れているのが、Web系エンジニアの強みですよね。</p>

<h2>だから、WebクリエイターもMakeしよう！</h2>

<p><br>
<strong>白石：</strong>では、最後にWebクリエイターとしてのメッセージを一言！
<br><br>
<strong>村岡：</strong>Webクリエイターもハードウェア知識も身に付けるべき、ということですね。ソフトとハードエンジニアの垣根がなくなってきたし、フルスタックエンジニアもハードの設計ができることが求められるようになると思います。
<br><br>
5年くらい前にHTML5の時代がくるって言われたけど、実際にHTML5が勧告されてから勉強し始めてたんでは、すでに遅い。たぶんそれと同じことが起こるんじゃないかと。「Arduinoとかできますよね？」って聞かれて、普通に「はい、やれます」と答えるような人が給料もらえるようになるんじゃないでしょうか。
<br><br>
<strong>高岡：</strong>なんだかんだ言っても、現実のものが動くのは楽しい。スクリーンを出て「現実をハックしよう！」ってことです。
<br><br>
<strong>岡島：</strong>画面の中だけに満足できなければ、ハードをやればいい。ただし、自分が興味があるものをやればいいし、世間にまどわされなくていい。受け身じゃなくて、好奇心をもってやるべき。時代の先端にいた人たちは、今に満足できなくて、踏み出した人たちなだけなんですから。</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
		<item>
		<title>WebクリエイターのためのIoT/WoTの基礎知識</title>
		<link>/dsuket/12418/</link>
		<pubDate>Sun, 01 Feb 2015 12:47:25 +0000</pubDate>
		<dc:creator><![CDATA[高岡大介]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=12418</guid>
		<description><![CDATA[連載： IoTxWeb (1)ここ数年、モノのインターネット: Internet of Things（IoT）が盛り上がってきています。今年のCES 2015（世界最大級のIT＆家電見本市）でも IoTが大きなテーマとな...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (1)</div><p>ここ数年、モノのインターネット: Internet of Things（IoT）が盛り上がってきています。今年のCES 2015（世界最大級のIT＆家電見本市）でも IoTが大きなテーマとなったようですね。具体的なプロダクトやサービスも数多くローンチされ、今年はIoT元年ともいわれています。</p>

<p>「IoTとは何なのか」「なぜ今注目を集めるのか」「Web of Thingsとは」について解説します。そこから今後のIoTと、我々Webクリエイターがどう関わるのか、についても考えてみましょう。</p>

<p><img src="/wp-content/uploads/2015/01/internetOfThings_s.jpg" alt="internet of Things" width="660" height="440" class="aligncenter size-full wp-image-12460" srcset="/wp-content/uploads/2015/01/internetOfThings_s.jpg 640w, /wp-content/uploads/2015/01/internetOfThings_s-300x200.jpg 300w, /wp-content/uploads/2015/01/internetOfThings_s-207x137.jpg 207w" sizes="(max-width: 660px) 100vw, 660px" /></p>

<h2>モノのインターネットとは？ IoTの本質を考える</h2>

<p>Internet of Thingsとは、さまざまなモノがインターネットに接続され、センサーなどによりデータを測定したりコントロール可能にする概念だと言われています。モノがインターネットに繋がっていろいろできるということですが、その実体はなんなのでしょう。単にいろんなモノがインターネットに繋がることでしょうか。例えば、冷蔵庫がインターネットに繋がってレシピが見られるようになったら、それはIoTでしょうか。</p>

<p>それもIoTだという人もいるかも知れません。しかし、それだけでは少し物足りないと私は考えています。誤解を恐れずに言うと、IoTの本質はセンサーデータとサービスの融合です。モノの状態やその場の状況を測定し、その情報をネットワークを通じてサーバーに送り、そのデータを分析・解析し、適切なサービスを提供する。それまでやってこそIoTの本領が発揮されるのです。</p>

<p>先の例だと 単にモニタを付けただけの冷蔵庫ですよね。冷蔵庫内の温度、湿度、内容量、内部の空気の状態、カメラ画像などを取得し、そのデータをクラウドへ送り、分析することによって冷蔵庫内の食品の状態を管理しユーザーへ適切な情報を提示する。さらに各家庭の冷蔵庫の使われ方を横断的に分析すればいろんな可能性が考えられます。</p>

<p>このように、センサーとビッグデータによるサービスが新しいビジネスを生み出すと期待されています。</p>

<h2>IoTの対象分野: すべてがインターネットにつながる</h2>

<p><img src="/wp-content/uploads/2015/01/connect_things_s.jpg" alt="connect things" width="400" class="aligncenter size-full wp-image-12459" srcset="/wp-content/uploads/2015/01/connect_things_s.jpg 640w, /wp-content/uploads/2015/01/connect_things_s-300x200.jpg 300w, /wp-content/uploads/2015/01/connect_things_s-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>分かりやすく冷蔵庫の例で説明しましたが、IoTの対象はもちろん家電だけではありません。いわゆるスマート家電といったものや、それらを統合したスマートホームの実例も出てきています。</p>

<p>ヘルスケア業界も機器メーカだけでなく、Nikeのようなメーカーや、スタートアップも多く参入しています。もちろん医療分野でも、センサーを埋め込んだカプセルを飲み込んで消化器系を検査する内視鏡のような新しい検査や治療が期待されています。</p>

<p>生活に関わる場だけでなく、むしろそれ以上に産業界でも大きな変革をもたらすとも言われています。建機や産業機械、工場やビルに取り付けたセンサー群によって状態をリアルタイムで管理し、作業の効率化や故障の事前検知によってダウンタイムをゼロにすることを目指す取り組みもあります。</p>

<p>車産業ではコネクテッドカーと自動運転を実現するキーとしてIoTが注目を浴びています。他にも、農業、エネルギー、教育、公共、福祉などの幅広い分野での活躍が期待が大きく膨らんでいます。その市場規模は 2020年には 3兆400億ドルとも言われます。（※ <a href="http://www.idcjapan.co.jp/Press/Current/20141118Apr.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">
世界IoT（Internet of Things）市場予測を発表</a>）</p>

<h2>なぜ今IoTなのか: IoT時代の幕開け</h2>

<p>モノにセンサーを付け、データを集めて処理をするという概念は昔からありました。Internet of Thingsという言葉も1999年に論文で出てきます。以前からあるものがなぜ今注目されているのでしょう。いくつかの要因がありますが、大きなポイントは3つあると考えます。</p>

<h3>小型で安価なセンサーの普及</h3>

<p>ハードウェアの進化によりセンサーやチップの小型化、省電力化が進みました。また量産性も上がり、安価に作れるようになってきました。
これによりIoTデバイス自体の小型化や低価化はもちろんのこと、センサーを多数搭載したデバイスや、大量にセンサーを環境に配置するなど、従来コスト的に厳しかったことが実現可能になってきました。</p>

<h3>クラウドやビッグデータ基盤の成熟</h3>

<p>ここ数年のクラウドとビッグデータの発展は、言うまでもありません。センサーから送られる大量のデータをクラウドのストレージに格納し、ビッグデータ分析により高パフォーマンスの解析が簡単に安価に可能になりました。またそれらを活用したサービスを立ち上げるコストも格段に下がってきています。</p>

<h3>メイカームーブメント</h3>

<p>ハードウェアとソフトウェアの発展により、シンプルなIoTデバイスであれば簡単に作れる土壌ができてきました。そこにメイカームーブメントとデジタルファブリケーションの波が起こり、大きな潮流となっています。Makerの祭典である「Maker Faire」は、世界中で開催され毎年規模を拡大しています。開発者が増えることでツールやライブラリが充実し、さらに開発者が参加しやすい環境が生まれています。</p>

<p>ハードウェア（モノ）とソフトウェア（サービス）、それに開発者（人）が揃ってきている今、まさにIoT時代の幕開けですね。</p>

<h2>Web of Things: すべてがWebにつながる</h2>

<p><img src="/wp-content/uploads/2015/01/web_s.jpg" alt="web" width="400" class="aligncenter size-full wp-image-12461" srcset="/wp-content/uploads/2015/01/web_s.jpg 640w, /wp-content/uploads/2015/01/web_s-300x199.jpg 300w, /wp-content/uploads/2015/01/web_s-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>IoTの一つの側面として、<a href="http://www.w3.org/community/wot/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web of Things:WoT</a>といわれるものがあります。インターネットとWebの関係のように、IoTをセンサー類のネットワーク層と考えたとき、WoTは上位のアプリケーション層として位置付け、そこにWeb技術を利用する構想です。端的に言ってしまうと、なんでもWebに繋げよう、ということですね。</p>

<p>Webに繋げるということは、広く普及しているWeb技術を活用できるということです。開発者数の多いWebエンジニアがIoTに参加することが可能になります。開発者の増加は産業の発展にもつながり、IoT/WoTはますます進化のスピードをあげていくでしょう。</p>

<p>Web標準化団体W3CでもWoTコミュニティの設立やワークショップが開催され始めました。WoTで必要なものを整理し標準化することで、より活発な開発が期待されます。まだまだ議論中ですが、現在のところ4つの層が提案されています (以下は多少専門的な内容／用語を含みますので、「これからのIoT」の節まで飛ばしてくださっても構いません)。</p>

<h3>Accessibility Layer</h3>

<p>Web APIを使ってモノに接続し、操作・プログラミング可能にするWoTのコアレイヤーです。RESTful APIを使うことで、既存のWeb（HTML、JavaScriptなど）とシームレスに接続可能にします。</p>

<p>一方IoTではHTTPのリクエスト/レスポンスパターンよりも、MQTTやCoAPといったPublish/Subscribe（出版-購読）モデルのプロトコルが使われることも多くあります。そのような場合、WebSocketを使用してプロトコルを変換し、REST APIを補完します。</p>

<p>シンプルなセンサーや小型デバイスでは、パフォーマンスやバッテリーの問題でZigBeeやBLE（Bluetooth Low Energy）を使うことも多く、直接HTTPアクセスが難しいことがあります。非IP層とWebを繋ぐスマートゲートウェイを利用することで、その問題を解決します。スマートゲートウェイを使えば、ネットワーク層以下を隠蔽し、先ほどのプロトコル変換なども行えます。</p>

<h3>Findability Layer</h3>

<p>接続可能なモノがあるのか、また場所はどこなのか、を見つけるための層です。今後、センサーが環境に大量に増えた場合などに必要になってきます。このレイヤーではセマンティックWebの考えが使われます。MicrodataやRDF/RDFa、JSON-LDなどでモノがどういうサービスと接続可能なのか、どういうAPIがあるのかなどを定義し、それらを検索可能にします。</p>

<h3>Sharing Layer</h3>

<p>Web of Things は個人情報を含むビッグデータを扱うことも多くあります。そのため、サービス間でデータを連携する場合、どのモノの情報をどのサービスが使用できるのか効率的に安全に共有する必要があります。そういった情報をソーシャルネットワークで解決できないか、というSocial Web of Thingsというアプローチもいくつかあります。</p>

<h3>Composition Layer</h3>

<p>最後のレイヤーでは、モノと連携したアプリケーションを簡単に作成するために、サービスとモノのデータを高いレベルで統合することを担います。Web2.0の時代のサービスを統合するマッシュアップに影響を受け、物理的なモノとサービスを統合するフィジカルマッシュアップを行うための基盤や仕組みを提供します。例えば IFTTT のように誰でも簡単にプログラムのスキルを必要とせずとも統合できるようなツールやアプリケーションがいくつか提案されています。</p>

<p>他に面白い動きとして、Web of Thingsのある種究極ともいえる <a href="https://github.com/google/physical-web" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Physical Web</a>というGoogleが立ち上げたプロジェクトがあります。 全てのモノにURLを与え、専用アプリではなくWebだけで、ワンタップでアクセス可能にする構想です。仕様・設計はオープンにし、WoTの標準を目指しています。中央集権的なハブを介さず、網目状にURLでリンクするというのがまさにWebらしい考えですね。</p>

<h2>これからのIoT: 僕らがこれからできること</h2>

<p><a href="http://www.afpbb.com/articles/-/3037457" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">グーグルのエリック・シュミット会長が、「インターネットは近い将来、生活のあらゆる面に浸透し事実上『姿を消す』だろう。『センサー類や機器が世の中にあふれ、全く気にならないほど身の周りのいたる所に存在するようになる』と語った</a>と話題になりました。</p>

<p>そこまで進んだとき、IoTはどうなっているでしょうか。最初にIoTの本質はセンサーデータとサービスだと言いました。センサーが当たり前になった将来、IoTはモノがインターネットに繋がるというレベルを超えて、これまで関係がなかったような事業、産業同士が繋がり、新しいサービスの萌芽が数多く見られるようになるでしょう。</p>

<p>そんな時代に、Webクリエイターだからこそ活躍できることがあると思っています。Web業界は日々新しいビジネスモデルのサービスにチャレンジしています。その業界に身を置く我々は、まずサービスから考えることに長けています。また、UXDのようなユーザー体験を重視したサービス設計も行われ、サービスに対して真摯に向き合っています。それはこれからのIoT時代において、非常にアドバンテージとなるでしょう。</p>

<p>そこに加えて、今後僕たちWebクリエイターに必要なスキルは、<em>境界を越える</em>スキルではないかと思っています。ハードウェア/ソフトウェアの境界はもちろん、デザイン、企画、営業、経営などの職種を越え、異なる事業/産業の境界をも越えたところに、新しい可能性が広がっているように思います。そのあたりの詳細は、別途行った対談でまとめられるかと思いますのでお楽しみに。</p>

<h2>おわりに</h2>

<p><img src="/wp-content/uploads/2015/01/break_screen_s.jpeg" alt="break screen" width="660" height="514" class="aligncenter size-full wp-image-12458" srcset="/wp-content/uploads/2015/01/break_screen_s.jpeg 640w, /wp-content/uploads/2015/01/break_screen_s-300x233.jpeg 300w, /wp-content/uploads/2015/01/break_screen_s-207x161.jpeg 207w" sizes="(max-width: 660px) 100vw, 660px" /></p>

<p>IoTの定義は非常に曖昧で、各社各団体が様々なことを言っています。今回の私のまとめ方も全ての人が納得がいくものではないかもしれません。しかし、正確な定義はあまり重要ではないと考えています。例えば、クラウドの正確な定義より、そこで何ができるのかが重要ですよね。IoTも同様で、IoTを使って何ができるのか、どんなサービスが実現できるのか、を考えることが重要です。</p>

<p>さて、この記事では「IoTとは何か」について長々と説明してきました。しかし、IoTの楽しさは、言葉では表現しきれません。自分が思うとおりに、実際にモノが動くことはクリエイターなら誰しも感動するはずです。子供の頃のワクワクする感情が沸き上がってくること請け合いです。もしまだIoTを体験されてない方は、ぜひスクリーンから飛び出して、リアルをハックしてみてください。</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
	</channel>
</rss>
