7 IoT
今週はIoTの演習です。 目次 7.1 IoTとは? 7.2 IoTプラットフォーム 7.3 ThingSpeakにデータを送信する 7.4 ThingSpeakからデータを受信する 7.5 応用 7.6 実習 7.1 IoTとは? 少し前から、普通の新聞等でもIoTという言葉をよく聞きますね。これは Internet Of Things の略で、モノとモノがインターネットを通じて通信することで構築されるシステムのことです。ここでいうモノとは、コンピュータと通信機能が搭載された物であればなんでもよくて、家電製品や監視カメラ、センサーを搭載したデバイスなどのことです。 インターネットは、その黎明期には電子メールやWWW、電子商取引などに使われるネットワークとして認識されており、人と人、あるいは人とモノの間のネットワークというイメージでした。IoTはそれを拡張して、モノとモノもインターネットにつなげると色々な可能性があるよ、ということなのです。 IoTは、概念としては全く新しいものではないのですが、マイコンや無線通信のデバイスが安価で小型になったこと、大量のデータを処理することがクラウドコンピューティング技術の進歩によって容易になったこと、AIが進歩したことなどにより、様々な応用分野が現れ広く認知されたというべきでしょう。語呂(語形?)が良かったことも流行った一因だと思います。 所詮は流行り言葉なので、IoTという言葉自体はすぐに消えていく運命にありますが、技術それ自体とそれがどのように応用可能であるかは、きちんと理解しておく必要があります。この演習では特に、IoTがどのように応用可能であるかに焦点を当てて学修していきます。 IoTで何が実現できるのか IoTを活用すると、どんなことができるのでしょうか。製品をベルトコンベア式に生産する工場を考えてみましょう。工場には生産目標があり、そのための生産計画があります。順調に生産が行われていれば利益が出るのですが、ベルトコンベアや生産設備に故障が起こると生産がストップして損が出ます。最適解は故障が起こる直前で生産設備の部品を交換することですが、生産設備の数が多いのでなかなか難しいです。また、問題が発生した時に、どこが壊れたのかが即座にわかると嬉しいです。そのために、多数ある生産設備にセンサーをつけて、機器の状態をサーバに逐一送ることが考えられます。例えば、機器の温度を測ったり、機器から発生する音を録音したりして、そのデータを蓄積するわけです。蓄積されたデータを解析することによって、温度が何度になったら故障の前兆であるとか、機器からどんな音がし始めたら故障の前兆であるかなどのことが分かるかもしれません。 要するにIoTは、監視作業や計測作業の自動化、少し面倒な作業の単純化などをやる仕組みということですね。監視作業や計測作業の自動化をすれば、当然膨大なデータが蓄積されます。これを世の中ではビッグデータなどと呼んでいて、そのデータを解析し問題の最適化を行うためにAIを使ったりするというわけです。そいういう文脈では、IoTとビッグデータとAIはセットで語られることが多くなっています。 この演習では、データの分析・解析及び最適化については扱いません。モノとモノとが通信するというところだけを取り出して演習をしてみたいと思います。 7.2 IoTプラットフォーム IoTプラットフォームというのは、IoTのエッジデバイスを管理したり、エッジデバイスからデータを集めるインターフェイスを提供したり、集めたデータを加工したりすることを助けてくれるシステムです。IoTにおけるエッジデバイスとは、センサなどを搭載して情報を収集する役割を持つデバイスのことです。 ここでは、ThingSpeakというIoTプラットフォームを使います。11/22(月)の開発論の授業でも、ThingSpeakへのデータのアップロードを行ったことと思います。 https://thingspeak.com/ ThingSpeakは、IoTのエッジデバイスから情報を収集してデータを視覚化したり、他のWebアプリなどにデータを渡す中継基地のような役割をはたしたりしてくれます。 上記の図を見ると分かるように、エッジデバイスとThingSpeakの間は、モノとモノがインターネットを使って通信します。 ThingSpeakは無料で使用することができますが、いくつか制約があります。 1日あたりの送信データが8,200以下 データの送信は15秒以上間隔が必要 チャネル数は最大4つまで プライベートチャネルは最大3つまで この中でも特にデータの送信間隔に注意してください。データを送信する際には30秒くらいの間隔を開けるようにするのがよいでしょう。 通信プロトコル エッジデバイスとThingSpeakの間はhttpsを使って通信します。httpsは、SSLを使ってhttp通信をします。SSLとは、TCP通信を暗号化し通信経路における情報の盗み見、改竄などを防ぐためのプロトコルです。 httpsはhttpをSSLの上に載せただけなので、プロトコルとしてはhttpということになります。現在広く使われているhttpのバージョンはHTTP/1.1です。これ以降httpと言えばHTTP/1.1のこととします。 httpはクライアントサーバ型のシステムにおける通信を規定しています。今回の場合、クライアントはエッジデバイスで、サーバはThingSpeakです。 httpには8つのメソッドがあります。しかし、実際に使われるのはGETとPOSTの2つです。 GETは、クライアントがURI(URL)を指定してサーバにリソースの要求をする際に使います。 POSTは、クライアントがURI(URL)を指定してサーバにデータを送信する際に使います。サーバはデータ受信後にクライアントにデータを返すことができます。 エッジデバイスからThingSpeakにデータを送る際にはGETメソッドを使います。データを送信するのだからPOSTメソッドでは、と思いますよね。実はGETメソッドを使ってもサーバにデータを送ることができます。 上記のURLの?以降はGETパラメータと呼ばれている情報で、サーバ側ではこの情報を取り出して使うことができます。GETパラメータは正式にはクエリと呼ばれる部分ですが、一般的にGETパラメータと呼ばれているので、ここでもそのまま使います。?以降の部分は&で区切られています。上記の例の場合、以下の3つのパラメータがあります。 api_key=APIキー field1=2 field2=5 これらをキーバリュー形式のデータだと思うと、api_keyやfield1、field2の部分はキーにあたり、APIキー、2、5が値(バリュー)にあたります。 GETパラメータで渡されたデータは、もちろんサーバ側できちんと取り出しのための処理をしなければいけません。ThingSpeakはそれをよいようにやってくれるという訳です。 […]