SHOEISHA iD

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

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

こんなに手軽にIoT開発! SORACOM Air / Beamを触ってみよう

こんなに手軽にIoT開発! SORACOM Air / Beamを触ってみよう【後編】 ~ センサーデータをクラウドに送る

AWS IoT/DynamoDBのデータ保存設定とSORACOM Beamの中継設定、サンプルアプリの改修

  • X ポスト
  • このエントリーをはてなブックマークに追加

SORACOM Beamの設定

 AWS IoTへ接続するには、クライアント1台ずつにX509証明書を配置します。しかし、IoTデバイスによっては、クラウドとの通信にかかる処理コストが暗号化などで重荷になることもあるでしょう。

 SORACOM Beamは、SORACOM Airによる3G/LTE通信を中継することで、クラウドとの認証や暗号化処理を肩代わり(オフロードともいいます)し、IoTデバイスとクラウドとの通信効率を高め、認証情報の運用を楽にすることができます。

STEP-01 SORACOM Beamの設定は、SORACOM Air SIMのグループ単位で行います。SORACOMユーザーコンソールのグループ設定画面を開き、[+ 追加]をクリックします。

SORACOMグループの追加
SORACOMグループの追加

STEP-02 任意のグループ名(今回はgroup1)を入力し、[グループ作成]ボタンをクリックしてグループを作成します。

グループの作成
グループの作成

STEP-03 グループの設定画面が表示されるので、[SORACOM Beam設定]のアコーディオンメニューを開き、[+] -[MQTTエントリポイント]をクリックします。

MQTTエントリポイントの追加
MQTTエントリポイントの追加

STEP-04 任意の設定名(今回は「AWS IoT」)を入力します。

設定名の入力
設定名の入力

STEP-05 転送先の[ホスト名]に、先ほど控えておいたAWS IoTのエンドポイントを入力して、[証明書]をオンにし、ダウンロードしたX509証明書ファイルをエディタで開いて、ファイルの内容をコピー&ペーストします。なお、[秘密鍵(key)]にはXXXXXXXXXX(ランダム文字列)-private.pem.keyファイル、[証明書(cert)]にはXXXXXXXXXX(ランダム文字列)-certificate.pem.crt、CA証明局にはこのWebページからダウンロードしたルートCAファイルが対応します。コピー&ペーストしたら、[保存]ボタンで確定します。

AWS IoTのホスト名と証明書の設定
AWS IoTのホスト名と証明書の設定

STEP-06 MQTTエントリポイントが追加されたことが確認できます。
   

MQTTエントリポイントの確認
MQTTエントリポイントの確認

 あとは、SIM管理の画面からSIMの所属グループを「group1」に設定すれば、SORACOMの設定は完了です。

コーディング

 前編で作成したNode.jsプログラムは光センサーのデータを端末に出力するだけでしたので、ここではSORACOM Beamを経由するAWS IoTへのデータ送信処理を追加します。

grove.js
var GrovePi = require('node-grovepi').GrovePi
var Board = GrovePi.board
var LightAnalogSensor = GrovePi.sensors.LightAnalog

// SORACOM BeamのMQTTエントリポイントに接続
var mqtt = require('mqtt')
client = mqtt.connect('mqtt://beam.soracom.io:1883');

var board = new Board({
  debug: true,
  // GrovePiボードの初期化イベント時に実行
  onInit: function(res) {
    if (res) {
      console.log('GrovePi Version :: ' + board.version())

      // A0に設置した光センサーを扱うインスタンス生成
      var lightSensor = new LightAnalogSensor(0)
      // 1秒おきにセンサーデータを取得し整形、コンソールに表示
      setInterval(function() {
        var val = lightSensor.read()
        var ratio = (1023 - val) * 10 / val
        console.log("value: " + ratio)
        // 送信するデータをJSON形式に整形
        var json = '{"id":"grove","date":"'+ new Date().toISOString() + '", "payload":' + ratio + '}'
        // topic/groveトピックにデータ送信を実行
        client.publish('topic/grove', json);
      }, 1000);
    }
  },
  // エラーイベント時に実行
  onError: function(err) {
    console.log('Something wrong just happened')
    console.log(err)
  }
})

board.init()

 前編で記述したコードに対し、5〜7行目と23〜26行目を追加しました。AWS IoTのエンドポイントと証明書の設定はSORACOM Beamに含まれるため、プログラム内ではSORACOM Beamの接続先のみ指定しています。

動作確認

 それでは、データ送信処理を追加したプログラムを実行してみましょう。

$ npm install mqtt
$ node grove.js
info GrovePi.board GrovePi is initing
GrovePi Version :: 1.2.2
value: 3167.0186335403723
value: 3167.0186335403723
value: 3186.875
^C
$

 DynamoDBの管理画面を見てみると、テーブルの[項目]タブなどでデータが保存されている様子がわかります。

iot_lightテーブルの項目一覧
iot_lightテーブルの項目一覧
iot_lightテーブルの項目例
iot_lightテーブルの項目例

 送信間隔は27行目の1000ミリ秒(=1秒)と短いので、断続的に実行する場合は1分間隔(1000*60)などに調節しましょう。

デバッグ方法

 うまくデータが格納されないときは、AWS IoTのデバッグログを取得するのがよいでしょう。次の記事を参考にしてください。

  AWS IoTのログをCloudWatch Logsで取得する #reinvent | Developers.IO

次のステップ

 今回はRaspberry PiとGrove PiでGrove光センサーのデータをAWSクラウドに送信しました。Groveにはたくさんのセンサーがラインナップされていますので、他のセンサーもいろいろ試してみてください。AWSのサービスもDynamoDBだけでなく、ストレージサービスのS3などAWS IoTが対応するサービスがいくつかあります。また、AWS IoTにはデバイスシャドウというデバイスを制御する機能がありますので、そちらの機能を組み込むのもよいでしょう。

まとめ

 IoTアプリの入門編として、センサーからクラウドまでのチュートリアルを前後編でお伝えしてきました。最近ではデバイス、クラウドともに扱いやすい製品やサービスが揃ってきており、以前に比べるとIoTアプリを手軽に開発できるようになっています。それらをつなぐSORACOMには、SIMだけでなくSORACOM Beamといった魅力的なサービスがあります。新しいアイデアを形にするツールとして、SORACOMを活用していきましょう!

 また、SORACOMではユーザー間の情報共有やユーザーからのフィードバックを重視しているようです。スタックオーバーフローのsoracomタグ(下記)で情報交換しましょう!

  新着の 'soracom' 質問 - スタック・オーバーフロー

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
こんなに手軽にIoT開発! SORACOM Air / Beamを触ってみよう連載記事一覧
この記事の著者

大瀧 隆太(オオタキ リュウタ)

クラスメソッド株式会社 AWSソリューションアーキテクト。SORACOMをクラウド屋とデバイス屋をつなぐ夢の架け橋と捉え、SORACOMによるクラウド活用ネタの技術ブログを日夜執筆中(会社ブログ:http://dev.classmethod.jp)。近日立ち上げと噂のSORACOMユーザーグループ(SORA...

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9015 2015/12/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング