IoT を使ってみる(その1:AWS IoT チュートリアル編)

| 6 min read
Author: shuichi-takatsu shuichi-takatsuの画像

「IoT」という言葉が世の中に広まって、結構な時間が経ったと思います。
私達が日頃「ああ、これがIoTだ」と実感することはそれほど多くないと思いますが、IoTは私達の生活の中に着実に広がっています。
今回から数回に分けて、AWS(アマゾン・ウェブ・サービス)の「AWS IoT」とIoTデバイスの「Raspberry Pi」を使って、IoTについて紹介していきたいと思います。
また必要に応じて他社のIoTサービスやIoTデバイスについても比較検討してみたいと思います。

Contents

IoT とは

#

IoT とは、今までインターネットにそれほど縁のなかった様々な”モノ”が、インターネットという通信網を介して相互に接続され、情報をやり取りしたり、制御したりする仕組みの総称です。
IoTは”Internet of Things”の略であり、日本語だと”モノのインターネット”と訳されます。
(IoTを日本語にした瞬間に、何故かダサい響きを感じるのは私だけでしょうか…)

IoTの”T”は ”Things” のことであって、安易に ”Devices” とかにしなかったところに「これまでとは違ったインターネットの活用法」という雰囲気を感じます。

”モノ(Things)”には様々なものがあり、車はもちろん、家電製品、照明機器、ガスメーターなど、幅広い分野に及びます。

大量の多種多様な”モノ”が相互に接続されることによって、これまで収集が困難だったデータを大量かつ広範囲に収集・分析・処理することによって、高度な制御・監視が可能になります。

AWS IoT とは

#

IoTは概念ですが、この概念を現実世界の製品・サービスとして世の中に送り出している企業は沢山あります。
その先頭を走っている企業の一つが”Amazon”です。
一般の人ならば”Amazon”と聞くと「ネットで便利にお買い物ができるサイトを展開している企業」というイメージが強いと思いますが、Amazonの収益の多くはクラウドサービスが叩き出しています。

そのAmazonが提供するクラウドサービスがAWS(アマゾン・ウェブ・サービス)です。

そして、AWSの中で「IoT」に特化したサービス・仕組みのことを「AWS IoT」と呼びます。

AWS IoTは、AWSの中で提供されている様々なサービスを利用することができ、複数のIoTデバイスからデータを収集・分析し、IoTデバイスの管理・制御を行うことができます。

IoTデバイス とは

#

IoTの主役は2つあると思っています。

一つはもちろん”インターネット”です。
そして、もう一つは”モノ”です。

これまで単独で動作していた”モノ”がインターネットに接続されることで応用範囲が非常に広くなりました。
”モノ”に相当する機器をIoTデバイスと呼称するようです。
これらのIoTデバイスはインターネットに接続するための固有のアドレスを持ち、インターネットを介して情報の送受信や制御の実行を行います。

IoTデバイスには

  • 監視/制御と、インターネット(クラウド)との情報のやり取りの両方を行うもの
  • インターネット(クラウド)との情報のやり取りのみに特化したもの

があり、後者を「IoTゲートウェイ」と呼んだりもします。

安価なIoTデバイスとしての「Raspberry Pi」と「Arduino」

#

Raspberry PiはARMプロセッサを搭載したシングルボードコンピュータです。
イギリスのラズベリーパイ財団によって開発されており、教育用/実務用の両方に広く使用されています。
高性能の割に価格が非常に安価であり、IoTマニア(?)には御用達の機器でしょう。
microSDカードにOS(Linux系OSのRaspbianがよく使われます)を入れて、マウス・キーボード、外部LCD等を接続すれば立派なパソコンになります。

もともと教育・ホビー用途で利用されることが多かったのですが、IoTの普及にともなってその存在がクローズアップされた感じです。

Raspberry Piの詳細についてはここを御覧ください。

筆者も自宅に一台持っています。
数千円程度で購入できるため、実験用途には最適だと思います。

※写真の左側がRaspberry Pi本体です。右側はブレッドボードです。
 画面が暗くて申し訳ありません。その他の機器も一緒に詰め込んでいるラックの中を写しています。

上記は、筆者が知的好奇心を満たすために自宅で使用している「Raspberry Pi 3B+」というタイプの機器です。大きさは手のひらサイズです。

2022/09/03現在、Raspberry Pi 4 のバージョンまで販売されているようです。
またRaspberry Piシリーズには他にも「Zero」、「Pico」というもっと廉価版のタイプも販売されているので、スペックと予算に応じて機種を選択できます。

似たようなIoT機器にArduinoがあります。
ArduinoはRaspberry Piよりも更に安価に購入できます。

筆者が持っているのはUNOというタイプです。
価格は1500円程度だったでしょうか。Raspberry Piほどの自由度は無いですが、USBケーブルでパソコンに接続し、Arduino IDEという専用の開発アプリケーションを利用するだけで、基盤に付いているLEDをプログラムからチカチカさせたりできます。

他にもJetson nanoなど、面白いデバイスは数多くありますが、今後は主にRaspberry PiというIoTデバイスを使って話を進めていきたいと思います。

とりあえず、IoTを試す

#

概要の説明ばかりしていても面白くないので、能書きはそろそろ終えて、”とりあえず”、AWS IoTのサービスからIoT機器を利用してみましょう。
今回はAWSで公開されているIoT機器接続を簡単に試す手順を実行してみます。
当然ですが「AWSのアカウント」を持っていることが条件です。

AWSにいくつかIoTチュートリアルがあるので、今回はそのうちの
「AWS IoT クイック接続を試してみましょう」に従って話を進めます。
(上記のURLを進めていくと、説明の内容と実際に表示される内容にかなり食い違いがありますが、やろうとしていることは同じようなので、表示される内容に従ってチュートリアルを進めていきます)

使用するAWS IoTサービスは、以下の「AWS IoT Core」がメインになります。

その他のサービスについては別の機会に紹介していきます。

チュートリアル「AWS IoT クイック接続を試してみましょう」

#

今回、接続するIoTデバイスは「Raspberry Pi 3b+」(以降、Raspiと称します)を想定します。
Raspiがインターネットに接続できるように環境設定は済ませておいてください。

AWSコンソールにログインし、サービス「IoT」-「IoT Core」を選択します。

以下のような画面が表示されます。

左側のメニューの下の方に「学習」という項目がありますので、「学習」を選択します。

次に「AWS IoT に接続する」というタイトルの中の「接続オプションの表示」を選択します。

「AWS IoT > 接続 > 1個のデバイスを接続」という画面が表示され、
「Step1 デバイスを準備する」が選択されている状態になります。

Raspiを起動し、Raspiに直接またはターミナルソフトでログインします。
RaspiからAWSに接続できるかどうか Pingでチェックを行います。
(AWS側のエンドポイントはNo.4の手順の内容をコピーすれば、確実です)

Pingが通らない場合はRaspiからAWSに接続ができていません。
自宅/会社のネットワークのルーティング等の確認をしてください。

「次へ」ボタンを押します。

Step2では「新しいモノを作成」を選択し、モノの名前を決めて設定します。
ここでは
test-device-01
としました。

「追加設定」のその他のオプションはそのままにして「次へ」を押します。
(今回紹介しなかったオプションについてはまた別の機会に詳細を解説します)

Step3ではIoTデバイス側の「OS」と、接続に使用するIoTデバイス側の「AWS IoT デバイス SDK」を選択します。

上記では

  • OS: Linux/macOS
  • SDK: Python

を選択しました。
RaspiのOS「Raspbian」はLinux系OSなので「Linux/macOS」を選択しています。
SDKは筆者の好みでPythonを選択しました。
(注意:AWS IoT デバイス SDKでPythonを選択した場合、Raspi側でPython3系が使用可能であることが条件です。RaspiへのPython3系のインストールは各自実施しておいてください)

「次へ」を押します。

Step4では「接続キット」をダウンロードします。
以下のファイル名でダウンロードされます。
connect_device_package.zip

このキットの中には接続時に使用するセキュリティキーの公開鍵、秘密鍵、証明書、ポリシーファイル等が含まれています。
チュートリアルではこれらのファイルはすべて一つのZipファイルに同梱されてダウンロードされます。
個別に設定を進める場合は、個々にファイルをダウンロードすることになります。

画面上の「接続キットをダウンロード」ボタンを押すと、操作をしているブラウザが動作しているパソコン上に接続キットがダウンロードされます。
Raspi以外のパソコンにファイルをダウンロードした場合は、FTP等のファイル転送プロトコルで「connect_device_package.zip」ファイルをRaspiに転送し、Raspi上で解凍してください。

解凍が完了すると以下のようなファイルが展開されているはずです。
(TerminalソフトでRaspiにログインして確認しています)

ファイルが展開されていることを確認したら「次へ」を押します。

以下のような画面になっていると思います。

画面に書かれているように、先程展開したファイルの中の
start.sh
ファイルに実行権限をつけます。

chmod +x start.sh

その後、start.sh を実行します。

./start.sh

シェルスクリプトが実行されると、以下のような実行結果がターミナル上に表示されていくと思います。

続いて、このままの状態でブラウザ側を確認すると、先程の「サブスクリプション」のエリア「sdk/test/Python」に数秒おきにデータが受信されていることが確認できると思います。

今回の接続モデルは

  • AWS IoT側がサブスクライバー
  • Raspi側がパブリッシャー

のPub/Subモデルになっています。
Raspi側で送信を中止するか、AWS IoT Core側でサブスクライブを中止して、接続を切ります。

「続行」ボタンを押します。
これまでの操作で、一通りの接続確認は完了しました。

「モノを表示」を押します。
先程作成した”モノ”に関する詳細情報が確認できます。

モノが不要になった場合は「削除」ボタンを押して、モノを削除します。

注意:モノだけ削除しても、チュートリアルによって自動的に作成された”証明書”、”ポリシー”は削除されないので、それも不要ならば個別に削除します

まとめ

#

今回は「AWS IoTチュートリアル」に沿って、1つのIoTデバイスのみAWS IoTに接続し、IoTデバイス(Raspi)側からAWS IoTクラウドにメッセージを送信(パブリッシング)できることを確認しました。
本来は個別にポリシーの作成、証明書の発行やグループ・タイプの設定等を行うのですが、今回はチュートリアルをそのまま実行し、”とりあえず繋いでみる” を優先しました。

次回以降、AWS IoTに用意されているサービスを更に詳しく見ていこうと思います。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  2. Tauri でデスクトップアプリ開発を始める (2022-07-08)
  3. Deno による Slack プラットフォーム(オープンベータ) (2022-09-27)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  7. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  8. Rust によるデスクトップアプリケーションフレームワーク Tauri (2022-03-06)
  9. 箱ひげ図で外れ値を確認する (2022-05-18)
  10. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)