デバイスからのデータ送信
AWSの環境構築がおわりましたので、次に、IoTデバイスであるRaspberry Pi 3の概要とRaspberry Pi 3からAWS IoTにデータを送信する手順を説明します。
Raspberry Piとは
Raspberry Pi(ラズベリーパイ)は、教育用に開発されたシングルボードコンピュータです。ARMプロセッサを搭載し、MicroUSBで電源を供給し、OSをSDカードにインストールすることで動作します。
公式サイトは、以下になります。
データの送信には、MQTTというプロトコルを使います。MQTT(Message Queueing Telemetry Transport)とは、IoTやM2M(Machine-to-Machine)向けに開発された軽量プロトコルで、デバイスから少量のデータを定期的に送受信するのに適しています。HTTPに比べるとヘッダ情報が小さく、消費電力が少ないのが特徴です。
MQTTは、パブリッシュ/サブスクライブ(Publish/Subscribe)型のモデルを採用しています。このモデルでは、メッセージの送信側をパブリッシャー、メッセージの受信側をサブスクライバーに分け、メッセージの中継をMQTTサーバーが行います。やり取りするメッセージのことをTopicと呼びます。
Mosquitto(モスキート)は、MQTTのオープンソース実装です。RedHat Enterprise Linux/CentOS/Ubuntuなどの主要なLinuxディストリビューションやWindowsやRaspberry Piなどのマイコンボードで動作します。
なお、Raspberry Pi 3の詳細や組み立て/OSインストール/セットアップは公式サイト、またはこちらの手順を参照してください。
Raspberry PiからAWS IoTへのデータ送信
Raspberry Piのセットアップが完了したら、Raspberry PiからAWS IoTにMQTTでデータを送信します。
[1]Mosquittoクライアントのインストール
まず、Raspberry PiにMQTTプロトコルを送信するため、Mosquittoクライアントをインストールします。
$ sudo apt-get install -y mosquitto-clients
[2]証明書のアップロード
「AWS IoTを使ったデバイスとの通信」の手順6で、AWS IoTで作成した証明書を、Raspberry Piにアップロードします。まず、Raspberry Piのホームディレクトリ(/home/pi)に「aws-iot」というフォルダを作成し、ここにTeraTermのSCPを使ってファイルをアップロードします。
$ mkdir aws-iot && cd $_
AWS IoTのエンドポイントへの接続に必要な証明書は次の3つです。
| 説明 | ファイルの例 |
|---|---|
| AWS IoTで発行した証明書 | (任意の値)-certificate.pem.crt |
| AWS IoTで発行したプライベートキー | (任意の値)-private.pem.key |
| ルート証明書 | rootCA.pem |
TeraTermの[ファイル]メニューの[SSH SCP]をクリックします。(1)にアップロードしたい証明書のファイルパスを入力し、(2)Raspberry Piのフォルダの格納先である、「~/aws-iot/」を入力し、(3)[Send]ボタンをクリックします。
同様の手順で、表の3つのファイルをRaspberry Piにアップロードしてください。証明書がアップロードできると、Raspberry Piの/home/pi/aws-iotの配下にファイルが配置されます。
なお、ルート証明書は、ダウンロードサンプルから/aws-iot-sampleフォルダ配下のものを利用してください。
[3]AWS IoTの呼び出し
これですべての準備が完了しましたので、インストールしたMosquittoクライアントを使って、AWS IoTを呼び出します。呼び出しは、mosquitto_pubコマンドを使います。
ここでは次のコマンドを実行します。
$ mosquitto_pub --cafile rootCA.pem \
--cert *******-certificate.pem.crt \
--key *******-private.pem.key \
-h *******.iot.ap-northeast-1.amazonaws.com \
-p 8883 -q 1 -d \
-t topic/sns \
-m '{"message":"Raspberry Piから送信"}'
これで、指定したEメールアドレス宛にAWS IoTを介してAmazon SNSからメールが送信されます。AWS IoTを使うことで、デバイスのメッセージの管理や認証が容易になり、短期間でデバイスを使ったシステム開発ができます。
[Note]QoS(Quality of Service)
MQTTではメッセージに対してQoS(Quality of Service)が設定できます。QoSとは、通信回線やネットワークに様々な種類の通信が混在しているとき、通信品質を確保するものです。
MQTTでは次の3種類のQoSが設定できます。
- QoS 0:0回以上送信。届くかは保証しない。
- QoS 1:少なくとも一回送信。重複する可能性もある。
- QoS 2:確実に一回送信
なお、AWS IoTではQoS 2をサポートしていません。
AWS IoTを使うとデバイスの認証やデータ制御などを容易に行うことができました。今回のサンプルでは、デバイスから送信された情報を基にメールを送信するだけでしたが、例えばデバイスのセンサーで取得したデータをもとにグラフを作成したり、機械学習でデータを使うことで予測が可能になったりします。
おわりに
今連載では、Amazon Web Servicesが提供するIoTサービスである「AWS IoT」を使ってデバイスであるRaspberry Piから送信されたデータをトリガーにアクションを行う環境構築を行いました。なお、AWSの全体像や、主要なサービスの概要、マネジメントコンソールの基本的な操作のしかたは、『新米プログラマのためのAmazon Web Servicesによるクラウド超入門』にまとめていますので、興味がある人は手に取ってみてください。
