SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

AWS IoTとRaspberry PiではじめるIoT超入門

デバイスからのデータ送信

 AWSの環境構築がおわりましたので、次に、IoTデバイスであるRaspberry Pi 3の概要とRaspberry Pi 3からAWS IoTにデータを送信する手順を説明します。

Raspberry Piとは

 Raspberry Pi(ラズベリーパイ)は、教育用に開発されたシングルボードコンピュータです。ARMプロセッサを搭載し、MicroUSBで電源を供給し、OSをSDカードにインストールすることで動作します。

Raspberry Pi 3の外観
Raspberry Pi 3の外観

 公式サイトは、以下になります。

 データの送信には、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クライアントをインストールします。

リスト1 Mosquittoクライアントのインストール
$ sudo apt-get install -y mosquitto-clients

[2]証明書のアップロード

 「AWS IoTを使ったデバイスとの通信」の手順6で、AWS IoTで作成した証明書を、Raspberry Piにアップロードします。まず、Raspberry Piのホームディレクトリ(/home/pi)に「aws-iot」というフォルダを作成し、ここにTeraTermのSCPを使ってファイルをアップロードします。

リスト2 作業ディレクトリの作成
$ mkdir aws-iot && cd $_

 AWS IoTのエンドポイントへの接続に必要な証明書は次の3つです。

AWS IoTのエンドポイントへの接続に必要な証明書
説明 ファイルの例
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コマンドを使います。

 ここでは次のコマンドを実行します。

リスト3 AWS IoTへのメッセージ送信
$ 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を使うことで、デバイスのメッセージの管理や認証が容易になり、短期間でデバイスを使ったシステム開発ができます。

Eメールの通知
Eメールの通知

[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によるクラウド超入門』にまとめていますので、興味がある人は手に取ってみてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 阿佐 志保(アサ シホ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9530 2016/07/05 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー