EVENT REPORTイベントレポート
ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。
ヒカラボレポートとは、開催されたヒカラボにおいて、登壇者が伝えたい講演内容を記事としてまとめたものです。ご参加された方はもちろん、ヒカラボに興味があるという方も是非ご覧ください。
イベントレポートvol.1
2015/12/09(水)更新2015/07/16(木)19:30~22:00
こんにちは。レバテック営業の斧田です。
近年にわかに注目を集めるIoT(Internet of Things)。「モノのインターネット」とも呼ばれるIoTは、スマート家電やウェアラブルデバイスに代表されるように、あらゆるモノをインターネットに接続し、新しい価値を作っていこうという考え方に基づいています。
スマートフォンやタブレットが普及し、Webへ接続できるデバイスが増加したことで、IoTに対してのビジネスチャンスも大いに期待されています。皆さんの中にも、そういった動きを感じ取り、IoT開発に興味をお持ちになった方もいらっしゃるのではないでしょうか?
そこで今回のヒカラボでは、家電をWebで操作するサービス「Plutoステーション」「Pluto HAアダプタ」を提供している株式会社Pluto取締役の市東さんを講師としてお招きし、IoT開発の基本をレクチャーしていただきました。
「IoT開発で考えるべきことなど」など、興味を持ち始めたばかりのエンジニアの方にもってこいの内容となっているため、ぜひご覧ください。
講演者プロフィール
市東氏:まずはスマートフォンで操作するIoT機器が、どういうふうにできているのかをみていきましょう。
スライドはIoT機器の一般的な構成を図示したもので、ハードウェアは、センサー、アクチュエータ、BLEモジュール、マイコンで構成されています。
それぞれの役割でいうと、センサーは身の回りの情報を取ってくる、アクチュエータは物理的にモノを動かす、BLEモジュールはスマートフォンとBLEで通信する、といったことを行います。マイコンにはハードウェアを動かすためのプログラムが入っていて、そのプログラムをファームウェアと呼んだりしますね。また、マイコンはBLEモジュールやアクチュエータ・センサーとICチップ間通信を行うことで、それぞれを動作させています。これらのハードウェアに加え、スマートフォンの方でもプログラムを作る必要があります。
IoT機器を開発する手順として、まずこのハードウェアを設計し、マイコンのプログラムを作成、最後にスマートフォンのプログラムを作成する。これがIoT機器開発のおおまかな手順になります。
市東氏:組み込みの特徴として、ぱっと浮かぶだけでも「メモリが非常に少ない」「アーキテクチャに依存する」「マルチタスクではない(OSを使えば別)」などが挙げられます。他にもたくさんあるのですが、ここではIoT開発におけるC言語の書き方について取り上げます。
スライドの上のコードは、自分が書いたコードの中で他の人に「これはわからないよ」と言われたコードです。これは関数を読んでいるのですが、ぱっと見てこれが何をやっているかを分かる人は少ないと思います。
これを説明しますと、まず、メモリのアドレス「0xf000」に関数がプログラムで書いてあります。それで、上のコードはvoid型の引数と戻り値を持つ関数のポインタとなっていて、アドレスを関数のポインタに変えて実行しているわけです。アセンブラだったら下のコードのように記述すればいいので、違いは一目瞭然です。
普通のC言語では上のコードのような書き方をしてはいけないですし、メモリを気にしてコードを書く必要もありません。ですがIoT開発のようにOSがない開発ですと、メモリの構造を理解した上で、こういうコードを書く必要が出てくる場合が出てきます。
市東氏:スマートフォンやWebと比較した場合に、IoT機器が果たすべき役割とは何か?について考えてみましょう。
IoTセンサーは所詮センサーなので、大した計算はできません。できることは現実の世界から情報を取ってきてWebや端末に送ることであり、それは同時に最大のメリットと言えます。スマートフォンは計算機としてみるとセンサーよりも高性能ですが、PCには勝てない。ですがUIとしては最高で、タッチパネルで色々操作できるのはPCより優れていると言えます。Webはどこからでもアクセスできて、実質的には無限に情報を取り扱えるというのが強みです。
大事なことは、「IoT機器はせっかくネットワークでつながっているのだから、他の機器が得意な分野はそちらに任せましょう」「IoT機器に色々とやらせようとするのはやめましょう」ということです。
弊社のPlutoステーションはただ赤外線を出すだけの機械ですけれども、Webからの指令を基に現実の世界を動かすことができます。最近では鍵のIoT機器が出てきましたが、あれもスマートフォンなどから受けた指令を基に、鍵を開け閉めを実行しています。そういった端末からの情報で、現実に影響を及ぼすこともIoTでできることなんです。
つまり「現実世界の情報を、サーバーやスマートフォンとやりとりする」ということが、IoT機器の重要な役割になってきます。それ以外の難しい処理や計算はストレージ資源が実質無限であるサーバーに任せるべきです。
市東氏:個人的に、IoTを普及させる大きな後押しになるのが、BLEじゃないかと予想しています。BLEの特徴としては、「消費電力が少ない」「iPhone・Androidに対応している」などが挙げられ、どちらも非常に肝心です。
例えば、今の時代はほとんどの人がスマートフォンを使っていますので、iPhone・Android対応ということは、基本的にBLEで作っておけば機械はつながるといえます。すなわち多くの人が利用しやすいというのがメリットのひとつです。
市東氏:BLEの大きなポイントとして「消費電力を効率的に下げている」という点があります。どういうことかというと、「平均消費電流」をできるだけ抑えるようになっていて、具体的には通信する際に送信速度を上げて送信時間を減らすということを行っています。
普通に考えたら送信速度が速ければ速いほど消費電力は増えるので、速くしたらその分電気食うんじゃないかと思いがちですが、通信速度を10倍にしても、電力は10倍にはならないんですね。逆に速度を上げることで送信する時間が10分の1になり、送信時間を大幅に減らすことができます。この部分が、BLEの消費電力を下げる工夫となっているわけです。
逆に大容量通信やストリーム通信などの、常に送信をしているようなケースにBLEを使うのは、消費電力を下げる工夫を無にしてしまうので止めた方がいいです。送信時間が増えれば増えるほど電池を消費してしまいます。もしどうしても大容量通信をする場合は、BLEではなくWi-Fiを使った方がいいと思いますが、そもそもIoTで大容量通信はやるものではないと考えています。
これは余談になりますが、無線機器を例にあげると、無線機器には受信と送信という役割があります。では、どちらの方が電力を消費するかというと受信なんですね。
送信は自分から電波を出すものなので、極論すると「自分は送信しかしない」という場合は、送信中以外は機能を切ればいい。ですが受信の場合は相手がいつ送ってくるかわからないので、ずっと受信待ちしないといけないんです。その分受信の方が消費電力を食うようになっています。
自分の場合は、特定の時間にしか送受信を行わないようにして、受信の時間をなるべく減らすようにして対応しています。受信時の消費電力を抑えるやり方は、工夫のしがいがある部分で、色々な解決方法があります。
市東氏:センサーには温度センサー、加速度センサー、光センサーなどさまざまな種類がありますが、これらを使いこなすことがIoT機器開発では重要です。
例えば、温度センサーは温度しか測れないのか、ということを考えてみましょう。結論からいうと、温度センサーを使って体重を量ることができます。気体を圧縮することによって、気体の温度が変化することを利用し、重さに換算するわけです。
一応条件があって、熱が外に逃げないケースじゃないといけません。熱が外に逃げてしまうと温度下がってしまうので。熱が逃げないようにしてるピストンがあったとします。この中に気体を入れて上に物を乗せると、上と下、重さの分沈むので、気体の温度が上がるんですね。
ですので、断熱材・ピストン・温度センサーを用意したら、温度センサで一応体重を量ることができます。ただし、これが唯一の正解という訳ではありません。
何が言いたいかというと、例えば温度センサーは温度を測るだけが能ではなくて、それを利用して現実の色々な状況を調べることができるということなんです。圧力センサーも加速度センサーも、完全に圧力・加速度を測るだけじゃなくて、その加速度を使って何か別の情報も測ることができるわけです。
IoTで頑張るべきはそこだと考えています。色々なセンサーを駆使して現実世界のさまざまな現象をインターネットに上げていける、そこから面白いことができないか試していくことがIoT機器開発の醍醐味なんです。
市東氏:測定とは、測定対象の測りたい物理現象とメーター系に相互作用を起こして、相関が発生する状態のことを言います。
どういうことかというと、例えばセンサーで温度を測りたい場合は温度と電圧に相関を発生させて、その電圧を見ればいいんです。電流系の場合は、電流系の針と電流に相関を発生させた針を見ればいいわけなんですね。
センサーを使った測定とはこういうことで、メーター系と測定対象系に相互作用が発生し、後に相関が発生する、その相関を測る。こうすることで、現実のことはなんでも測ることができます。ですので「ある現象を測りたい」と思ったときは、自分が測りやすい他の物理現象に相関を持たせればいいんです。
操作についても同じように理解できます。操作というのは、コントローラー系と操作対象系とを相互作用させ、相関を持たせることで成り立っています。「こういう風に操作したい」と思ったときに、コントローラーの値を現実世界に適用させることで操作しているわけです。つまり、操作も測定も同じ仕組みになっています。
結局は「相互作用を起こす」ということがすごく重要で、これがIoTが現実世界と仮想世界に相関を起こすということの根本的な考え方です。
いかがでしたか?
IoT開発時の基礎となる情報をメインにご説明いただいたため、どういった部分を勉強していけばいいのかが明らかになる内容だったのではないでしょうか。個人レベルでもIoT開発は可能ですので、今回の内容がIoT開発にチャレンジしたいとお考えの方に役立ていただければ嬉しいです!