4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[AWS×IoT] AWS IoT エンタープライズボタンを使ってラズパイにMQTTでメッセージをPublishする

Posted at

はじめに

AWS IoT エンタープライズボタンが一般販売され、個人用に1つポチりました。
どんな使用方法があるかを検討している中で、「とりあえずラズパイにMQTTで何かしらのメッセージをPublishしてみるか」ということで試してみました。

AWS IoT エンタープライズボタンって?

61iUdCWGplL._SL1000_.jpg

要するに「AmazonDashButtonのエンタープライズバージョン」です。
簡単な設定を行うだけで、Lambda関数をコールしたり、SMSを送信したりすることができます。
おそらく、ボタン本体の中に証明書などを持っていて、紐づけたAWSアカウントのAWSIoTにリクエストを送信するような仕組みになっているのかなーと思ってます。

ちなみに今回はLambda関数をコールします。

やること

至って簡単です。

  1. ボタン押す
  2. Lambdaがコールされる
  3. ラズパイがSubってるトピックにメッセージをPubる
  4. 以上!

ラズパイの設定

この記事を参考にして、MQTTを扱えるようにしてください。
SORACOMでAWSIoTにメッセージをBeamする

ラズパイ側はトピック名 demodemo/# でSubっておいてください。

Lambda関数のデプロイ

ランタイムは Node.js 8.10
最低限必要な権限は、 AWSIoTのPublish iot:Publish
ソースコードはこんな感じです。

index.js
const AWS = require("aws-sdk");
const iotData = new AWS.IotData({
 endpoint: "aclhlxe7k1bjt.iot.ap-northeast-1.amazonaws.com"
});
const TOPIC_NAME = "beamdemo/IoTbutton";

exports.handler = async (event) => {
  console.log(JSON.stringify(event));
  
  try {
    const clickType = event["deviceEvent"]["buttonClicked"]["clickType"]
    const params = {
      topic: TOPIC_NAME,
      payload: JSON.stringify({ "message": `Button Clicked ${clickType}` }),
      qos: 0
    };
    await iotData.publish(params).promise();
    console.log("Success!!");
    return null;
  } catch (err) {
    console.error(err);
    throw err;
  }
};

Eventにボタンをクリックした回数などが含まれているので、どのようなボタンのクリック方法をしたのかをメッセージとして、 トピック名 demodemo/IoTButton にPublishしています。

// message例
{"message":"Button Clicked SINGLE"}
{"message":"Button Clicked DOUBLE"}
{"message":"Button Clicked LONG"}

SINGLE=ボタンを1回押す、DOUBLE=ボタンを2回押す、LONG=ボタンを1.5~6秒未満長押しする、といった感じで取れます。

AWS IoT エンタープライズボタンの設定

まず「AWS IoT 1-Click」というスマホアプリからWiFiの設定を行ってください。
画面の通りに進めていけばボタンがWiFi経由でインターネットに出ていくことが可能になります。

その後、AWSコンソール画面に戻り、アカウントとボタンの紐づけ、ボタンをクリックされたあとのイベントの設定を行っていきます。

ボタンを登録する

AWS IoT 1-Click 2018-06-25 12-57-45.png AWS IoT 1-Click 2018-06-25 13-13-52.png AWS IoT 1-Click 2018-06-25 13-16-54.png

↑この画面になったらボタンを押してください

AWS IoT 1-Click 2018-06-25 13-17-34.png AWS IoT 1-Click 2018-06-25 13-20-02.png

これでボタンとAWSアカウントが紐付きました。

ボタンを有効化する

AWS IoT 1-Click 2018-06-25 13-23-07.png AWS IoT 1-Click 2018-06-25 13-24-51.png

ボタンが有効になりました。

プロジェクト / プレイスメントの作成

AWS IoT 1-Click 2018-06-25 13-26-57.png AWS IoT 1-Click 2018-06-25 13-29-03.png AWS IoT 1-Click 2018-06-25 13-32-13.png AWS IoT 1-Click 2018-06-25 13-35-08.png AWS IoT 1-Click 2018-06-25 13-37-24.png AWS IoT 1-Click 2018-06-25 13-39-01.png

これでボタンをクリックしたときにLambda関数がコールされるようになりました。

確認

ラズパイでトピック名 demodemo/# をSubります。

$ mosquitto_sub -h beam.soracom.io -t demodemo/#

この状態でボタンをクリックします。
無事メッセージが届きました!

console.png

さいごに

AWS IoT エンタープライズボタンの登場で、かなり簡単にIoT(っぽいこと)に触れることができるようになりました。
Lambda関数をキックできるので、実質かなり応用が効きますし夢がかなり広がります。
また、Lambda関数以外にもSMSやEmailを送信することができます。

ただボタンに寿命がある(リクエストを送信できるのが約2000回)ので、実際にプロダクションレベルで使用する際には、ボタンの交換などについても考慮しなければいけないです。

簡単に試すことができるので、いろんな利用方法を考えて試していこうと思います。
ではまた!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?