CodeIQ MAGAZINECodeIQ MAGAZINE

Webエンジニアのための「IoT/WoTで重要な開発ボードとJavaScriptライブラリ」

2015.08.04 Category:勉強会・イベント Tag: , , , , ,

  • 22
  • このエントリーをはてなブックマークに追加
iotp

FirefoxOSがテレビに組み込まれたり、Windows10でRaspberry Piに対応するなど、Web技術はブラウザから飛び出し、モノにも使われるようになってきた。IoTではなく、WoTの世界へと進みつつあり、Webエンジニアもハードウェアの知識が必要になる。
今回のWeb プラットフォーム部勉強会では、学んですぐ試してみたくなるIoT/WoTに関する技術が紹介された。
by 馬場美由紀 (CodeIQ中の人)

IoT/WoTとは何か?

Webはいつもあなたを見守っている~ IoT/WoT特集~」というテーマで開催された第7回Webプラットフォーム部勉強会。

最初に登壇したのは清水智公さん。「KDDIが提供するOpen Web BoardはFirefox OSが動いているドングル。それを使ってBluetoothでデバイスをコントロールしたり、Webサーバを立ててそのWebサーバの中で動くアプリケーションを経由して、戦車をコントロールして遊んでいる」と前置きし、IoTとWoTの違いについて説明した。

IoTという言葉が注目を集めている一方で、最近、WoT(Web of Things)という言葉も使われるようになってきた。ではIoTがこれまでのパーペイシブコンピューティングやグリッドコンピューティング、ユビキタスコンピューティングと何が違うのだろうか。

決定的な違いは「相互運用性」。お互いをつなぐことで新しい何かを作り出していくことができるかどうかだ。

ソニーの社内ベンチャーが開発した「MESH」を使って、フィリップスのワイヤレスLED電球Hueを点灯させるという例を挙げる清水さん。

「Meshの命令が直接Hueに届けば電気は付くが、両デバイスはそれぞれ対応しているプロトコルが異なるので、その関門を乗り越える処理が必要になる」

つまりMeshからBluetoothでiPadに飛ばして、HTTPのプロトコルでIFTTPというサービスに飛ばし、IFTTPでHueのゲートウェイを探し、そこからZigbeeを飛ばすことで、やっとHueを点灯することができる。たかだか電気をつけるために、普通はこのような手続きが必要になる。

より相互運用性を高めるには、Meshが直接Hueと通信できるようにすることだ。それを可能にするよう考えるのがWoTである。

「相互運用にはアイデンティティ(そのデバイスをどう見つけるか)、プロトコル、データ表現、データ形式など、考えないといけないことがいろいろある。しかしWebなら一通り解決作を持っている。そしてその際に使うプログラミング言語が、JavaScript。今回の3つのセッションはJavaScriptでコントロールでき、かつ秋葉原に行けば簡単に試してもらえることを基準に選んだ。次回はBaaSをテーマに勉強会を開催するので、期待してほしい」

Arduinoとjohnny-fiveで簡単IoT

続いて登壇したのは、インターネットイニシアティブの岩永義弘さん。セッションタイトルは「Arduino とjohnny-five」。岩永さんは、@ITでJavaScriptとIoTをキーワードにした記事「Arduinoで始めるWeb技術者のためのIoT入門」を執筆してきた。

「このセッションではIoT端末を一番安くて一番簡単に作る方法を伝えたい」と選んだのは、タイトルにある通り、ArduinoとJonny-fiveの組み合わせ。つまり、この組み合わせが「最も簡単で安くIoT端末がつくれる」とのこと。

ちなみにArduinoは約2800円と数あるボードの中でも最も安く、ネットで売っているので、手軽に手に入るという特長を持つ。またArduinoの場合、公開されている開発環境(IDE)を使えば、プログラムのアップロードがワンクリックで完了。しかもコミュニティの規模は10万人以上。便利なライブラリを探すのも簡単だ。

一方で、Arduinoには弱点がある。それはインターネットに直接つなげられないことだ。これでは安くても意味がないのでは思われるかもしれないが、そうではないという。開発者なら誰もが持っているPCを活用するのである。

「PCならインターネットにつながる。そのPCからArduinoが制御できれば、PCを介してセンサーやモーターを使うことができ、インターネット上にあるサーバにデータを投げることもできる」と岩永さんは説明する。つまりPCとArduinoのセットをIoTの端末と見なせば、ArduinoがIP通信をする必然性はないというわけだ。そしてPCからArduinoを制御するためのライブラリがJonny-fiveである。

Jonny-fiveではほとんどの電子回路の制御ができると思ってよく、次のようなことが可能だ。

  • LED点灯/消灯
  • センサーデータ取得
  • モーター制御
  • ジョイスティックやWiiリモコンの入力読み込みなど

処理の流れは次の様になる。PCとArduinoはUSBケーブルでつなぐ。その中をFirmataというプロトコルを使ってシリアル通信を行う。

例えばセンサーの値を読み取りたい場合。電圧を読み取る命令をPCからArduinoに送る。Arduino側は命令を受信して指定されたピン「A0」を命令通りに測定する。その結果をPCに送り返す。この一連の流れでPCの上で動いているプログラムが直接、センサーの値を読み取ることができるようになる。

「本来なら、このようなプログラムを書く場合C言語で書かないといけないが、Arduinoの場合は、ArduinoのIDEに最初から入っているプログラムをアップロードするだけ」と岩永さん。具体的には図の様にStandardFirmataを書き込むだけだ。これでボード側の準備が完了する。あとはPCの上でプログラムを動かす準備だけである。

ただ、IDEにはシリアル通信を直接行うAPIは用意されていない。そこで今回はNode.jsを使う。Node.jsをインストールするとnpmというコマンドが使えるようになるので、johnny-fiveをnpm用にインストールすれば完了だ。

ここまで説明し、実際にA0ピンのセンサー値を読み取るためのコードを紹介。共通部分のコードは次のようになる。

Jonny-fiveのボードの中にArduinoのピンの情報などが入っているクラスがあるので、ボード(Board)というクラスをインスタンス化する。

インスタンス化すると、自動的にシリアルの接続を行ってArduinoとFirmataプロトコルで通信できるような、準備が裏側で行われる。このコールバックにデバイス制御の処理を書く。それはreadyイベントで拾うことができる。

センサー読み出しのコードは以下となる。

これでセンサーとかの値を読むことができるようになる。電圧の値を読む場合は、Sensorクラスを使う。

データを取得する頻度は1秒に1回とし、1秒間隔でデータを取得するリクエストがPCから送られる。データが送られてきた時はdataイベントで拾うことができる。

コードをすべて書き終えたところで、実際に動かしてみることに。つながっているのは土壌湿度センサー。握ると手の湿り気などが画面に出力されるという。まずは手で握らずにセンサーを動かしてみる。値は0。センサーを握ると133~6という値が表示された。

「このようにたった10行ぐらいのコードでセンサーを扱えるようになる」と岩永さんは説明する。

またLEDを点滅させるということもできる。これはLedクラスを使う。点灯や消灯はもちろん、指定間隔での点滅、状態を逆にすることができる。

最後に紹介したのはボタンの例。回路上のボタンを押させるプログラムも簡単に書ける。ボタンを押したときにdownというイベントが発火し、ボタンをある一定上押し素続けると、holdというイベントが発火する。どのくらいの時間というのはholdtimeで指定する。この場合は2秒間押し続けるとholdというイベントが発火。またボタンから離れたときは、upというイベントが発火する。

インターネットにデータを投げる場合は、callbackでHTTP POSTやMQTT Pubulishをするだけ。どちらを使えばよいかというと、「単にデータを投げるだけなら、HTTPを使う方がシンプルになる。ただHTTPはリクエストを投げた後レスポンスが帰ってきた段階で、TCPの接続を切ってしまう場合がほとんどなので、クラウド側から端末を制御したいという場合、TCPのコネクションを張り続けるMQTTの方が向いていると思う」(岩永さん)。

「jonny-fiveにはまだまだたくさん機能がある。GitHubのページを見ればWikiとかもたくさんあるあので、それを参考に自分なりにデバイスを操作してみてほしい」と語り、岩永さんのセッションは終了した。

Intel EdisonとMRAA、LittleBitsで遊ぼう

3番目に登壇したのは、MOONGIFTの中津川篤司さん。セッションタイトルは「MRAAでIntel Edisonを遊んでみよう」。
Intel EdisonとはIntel社が販売している超小型&超消費電力コンピュータ。Yocto Linuxが搭載されているので、普通にLinux端末としても使える。3種類あり、初心者にはArduino Boardがお勧めだそうだ。

またIntel Edisonも専用のIDE「Intel XDK IoT Edition」を提供している。同IDEはWindowsもMac、Linux上でも動くという。これを使うと接続したいデバイスを選ぶだけで、IDE上で書いたコードをそのまま流して実行することができるので、開発も簡単に行える。

一方のMRAAとは何か。これはインテル社が開発しているハードウェアを操作するためのライブラリで、Intel Edisonにはデフォルトでインストールされている。またMRAAはオープンソースソフトウェアであり、GitHubで公開。

「Edisonもそうだが、その前身のGalileoにも対応している」と中津川さん。MRAAはRaspberry Pi、Bannana Pi、Beaglebone Blackにも対応している。

サンプルコードは以下の通り。

「C/C++がベースでその後、Python、JavaScriptに翻訳されるという感じ。node.jsのコード自体、英語として分かりやすいので使いやすいと思う」と言い切る。

ここまで解説し、いよいよ使い方の説明に。使うのはIntel Edison kit for Arduino。その理由は、「Arduinoのモジュールが使えるというメリットがあるため。そして5Vが使えること」。

そしてもう一つ、使用するのがLittleBitsのArduinoのコーディングキット。LittleBitsは磁石でくっつけるだけの簡単電子おもちゃ。中津川さんは「子ども向けに買って遊ばせていたが、Arduino KitやHardware Development Kit、CloudBitは俄然、健全な大人のおもちゃになる」と言う。

そして今回のデモをやるための約200ドルを費やしたそうだ。そして開発ツールは先述したIntel XDK IoT Edition。
まずはアナログ入力の取り方について。プログラムは次のようになる。

次はデジタル出力するプログラム例。モーターを2秒後に止めるというデモを動画で紹介。

IoTとは、「インターネットを使って、自分の表現したいモノを表現することだ」と中津川さん。そして表現したいモノとは社会的問題という。さらにIntel EdisonとMRAAで遊んでみるために、「我が家における社会的問題」について考えてみたという。筆頭に浮かんだのがエアコンの切り忘れ問題である。そこでIoTでこれを解決することに。その構成は次の通りとなる。

IRKit(HTTPをたたくと赤外線を出してくれるデバイス)+Intel Edison+LittleBits Light Sensor。Light SensorはLittleBitsのSmart Home KITを購入すれば手に入る。価格は249ドル。

プログラムは次の通り。

電気が消えるとエアコンが消え、電気が付くとエアコンが復活するというプログラムである。ちなみに[6424,3228,873,787,…,8]は赤外線の値だ。

これはネットワークを使っているけど、インターネットは使っていない。そこでニフティクラウドmobile backendを活用することに。IRKitと並列する形で、ニフティクラウドmobile backendに飛ばすという構成に変更したという。

そのプログラムは以下のようになる。

ニフティクラウドにデータを飛ばすことで、その管理画面でエアコンが今どんな状況にあるか、確認できるようになる。
最後に中津川さんはこう語り、セッションを締めた。

「今回のデモを実施するにあたり、費やしたお金は300ドル弱。その8割はLittleBitsにかかっている。みなさん一緒に散在し、IoTを楽しみましょう」

Windows10対応のRaspberry Pi2でセンサーやWebサーバを動かす

最後に登壇したのは、日本マイクロソフトのテクニカルエバンジェリストの太田寛さん。太田さんは「IoTは総合格闘技である」を合い言葉に、IoTに関する技術の啓蒙を行っている。「Windows10 IoT CoreでJavaScriptとかNode.jsとか」というタイトルで、太田さんのセッションは始まった。

太田さんは組み込みエンジニア。そのため「JavaScriptは素人」と言う。従って、披露されたJavaScriptのコードのできは気にしないでほしいとのこと。

7月29日にリリースされたWindows10は8.1の後継バージョンというだけではない。デスクトップやWinnows Phone、Xboxに加え、今回のデモに使用するRaspberry Pi、HoloLensなどのデバイスも同じバイナリーで動かすことができるというコンセプトを持つ。

Windows10 IoTシリーズには、Windows10 IoT for Industry Devises、Windows10 IoT for Mobile Devices、Widows10 IoT Coreというエディションがあり、最後のWindows10 IoT CoreがRaspberry Pi2やIntel E3800processorボード、クアルコムのDragonBoard 410cなどで動くWindowsである。

「セットアップはつい1カ月前は大変だったが、つい先日、簡単になった」と太田さん。今はダウンロードし、ツールでSDカード(8GB以上)に転送するだけでRaspberry PiにWindows IoT Coreが入るようになったという。

それら情報は「windows OnDevices.com」で確認できる。

IoT Coreの開発環境は次の通り。

Windows IoT Core Watcherで表示された項目を右クリックしてブラウザで見るとブラウザでデバイスマネジャーやアプリケーションのパフォーマンスがチェックできる。またPowerShellでも管理ができる。

「複数で開発する場合は、自分のボードにあらかじめ名前を付けておくとやりやすい」というアドバイスも。

一方、アプリの開発環境は次のようになる。Windows10では同じアプリケーションを異なるデバイスで動作させることが可能な「Universal Windows Platform」を採用しており、C#、VB、VC++、Node.js、Pythonでアプリケーションを書くことができるようになる。開発ツールは「Visual Studio 2015」。

IoTに必要な機能の追加は、先に紹介したwindowsOnDevices.comのダウンロードページにアクセスし、「WinodowsDeveroperProvramForIoT.msi」をダウンロードする。

Node.jsで開発したい場合は、こちらから追加環境をダウンロードして実行すると、Node.js for Visual Studioが立ち上がってインストールされるという。

IoTのサンプルコードは次の手順で手に入れる。

WindowsOnDevices.com→「すぐに作業開始」→「Docs and samples」→「Samples」

ここまで説明し、デモを実施。まずはRaspberry Pi2でWebサーバを動かし、「Hello World」を表示するというデモを実施。Visual Studioで新しいプロジェクトをクリックし、次のようなプログラムを書いていく。

Raspberry Pi2でWebサーバを動かす方法については、Raspberry PiのIPアドレスをコピーし、JSのプロジェクトからプロパティを開き、RemoteMachineのところにIPアドレスをコピーして実行する。こうするとプログラムが転送され、ブラウザを立ち上げると、Hello Worldが表示される。

またADXL345(加速度センサー。1000円ぐらい)で加速度を表示するデモも実施。先に紹介したWindowsOnDevices.comのC#でのサンプルコードをJavaScriptに置き換えるだけ。

UWPというパッケージはデフォルトで入っているので何もしなくていい。先と同じようにIPアドレスを入力してRemoteMachineで実行し、ブラウザに取得した加速度の数値が表示された。

IoTはモノをつないでコラボレーションをすることにフォーカスが当たりがちだが、ビッグデータ化したデータを分析、活用していってはじめて価値のあるモノとなる。そこで活用したいのがAzureである。Azureではリアルタイムな分析、バッチ分析などができるソリューションが用意されているからだ。

「JavaScriptが使えるのとJavaScriptしか使えないのは全然違う。慣れているかもしれないが、センサー周りはC#の方が楽。言語は適材適所で使うとよい」と太田さんは言う。

Windows10 IoT Coreに関してさらに学びたい人は「Internet of Things キット ハンズオン トレーニング」の参照してほしいと太田さん。「IoTでつながろうというコミュニティ『IoTあるじゃん』を作ったので、関心のある人は入ってほしい」と会場に呼びかけ、セッションを締めた。

今回、披露された3つのデバイスはすぐに手に入るモノばかり。IoTに関心があるなら、ぜひ手に入れて、Web技術でモノを動かすことにチャレンジしてみてはいかがだろう。

Webプラットフォーム部勉強会「Webはいつもあなたを見守っているIoT/WoT特集」動画

自分の書いたコードを誰かに評価されたいエンジニアは、けっこう多い?

ITエンジニアのための実務スキル評価サービス『CodeIQ』で出題されている「コード銀行」問題に挑戦すると、あなたのコードが評価されます。

評価(1)出題者からの評価  ⇒評価フィードバック例を見る

  • 企業ではたらくという観点からあなたのコードをチェックします
  • フィードバックされた観点をふまえてコードを書くと世の中の企業にとって「いいコード」が書けるようになります

評価(2)企業からの評価  ⇒評価フィードバック例を見る

  • 「あなたと一緒にはたらきたい」という企業からスカウトが届きます
  • あなたのコードが社会でどこまで通用するか、リアルな評価が得られます

興味を持った方はこちらからチャレンジを!

  • 22
  • このエントリーをはてなブックマークに追加

■関連記事

【鹿児島の熱量を感じろ!】モバイルの未来は地方こそ主役「MOBILE CONFERENCE 2017... エンジニア・デザイナーのためのカンファレンスが鹿児島で開催 ウェブやモバイルのエンジニア・デザイナーのためのカンファレンス「MOBILE CONFERENCE 2017」。鹿児島キャリアデザイン専門学校マルチホールを会場に開催された。 この日はあいにくの雨天にも関わらず、会場はウェブ・モバイ...
ロバート・タージャン氏を直撃取材―IntertrustはLINEのセキュリティ技術に何をもたらすか?... LINEとIntertrust社が共同でセキュリティ・サミットを開催 LINEは、Intertrust Technologies Corporation(本社:カリフォルニア州、以下:Intertrust)と共催で、アプリケーションセキュリティおよびデータプライバシー強化ソリューションの促進を目的...
Alex Kipman氏も注目した日本のHoloLens盛況――日本上陸3か月記念「HoloLens... HoloLens販売国の中で突出した盛り上がりを見せる日本 日本マイクロソフトの製品担当メンバーが企画した、日本上陸3か月記念「HoloLens大感謝祭」。3月に開催したCodeIQ感謝祭にブース出展していただいたことを縁に、リクルートキャリアを会場としてイベントが開催された。 さすがは、H...
Webで簡単・効率的にアニメーションを実現できる最新フレームワーク・CSS3アニメーションを紹介... MozillaでWebアニメーションの機能の開発者が登壇 Webでアニメーションというと、数年前まではFlashコンテンツが当たり前に使われていた。 しかしスマートフォンの普及と共に、Webから駆逐され、今はHTML5でアニメーションを表すには、setInterval関数やrequestAnim...
澤円&ちょまどのまどか☆まどかスペシャル対談! ─自分で創る「エンジニアのキャリア」とは... 澤さん、ちょまどさんの相違点とは? 澤:僕、こう見えてもサラリーマンで、ミュージシャンではありません(笑)。 エンジニアとしてのキャリアはCOBOLのプログラマとしてスタートしました。ちょうどWindows3.1が出るか出ないかの頃ですね。 現在はマイクロソフトテクノロジーセンターのセンター長と...
Microsoft HoloLensが実現するMixed Realityの世界とは?─エバンジェリス... Mixed Realityはフィジカルとバーチャルの情報を重ね合わせたもの Mixed Reality(ミックスドリアリティ/MR)は、Virtual Reality(バーチャルリアリティ/VR)やAugmented reality(AR)と何がどう違うのか。 まずはフィジカルリアリティ。これは...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ