- 2016.12.09
- 技術ブログ
ラズパイで手軽に作る!ドアロックセンサーの実現【第一回 AWS IoTの設定】
気温もぐっと下がり、札幌では氷点下が当たり前の季節になってきました。
何年経っても、札幌の冬は寒いと感じるtacckです。
突然ですが、皆さんは「家の鍵」の閉め忘れが気になることありませんか?
閉める動作が無意識になってしまって、後で「あれ?」となってしまうことがありますよね。
そんな時でも安心。ご家庭にあるラズパイとセンサーを使って、「鍵の開閉」を検知するシステムをお手軽に作ってみましょう!
防犯やトラブル検知としても、使えると思います。
準備
ハード
- Raspberry Pi 3
- SimpleLink SensorTag IoT評価キット CC2650STK
今回のシステムでは、「BLE」を手軽に利用でき、豊富なセンサーも載っているTexas Instruments製の「CC2650STK」を利用します。(センサーを使うのは次回)
また、センサーから簡単にデータを取り出せるように、Raspberry Piも「BLE」搭載の3を利用します。
ゴール
最終的には、玄関のドアの「鍵の開閉」をセンサーで検知し、「メール」で自分に通知する(スマホでメールを受信する)、ということにします。
ステップとしては、
(1) AWS IoTの設定
(2) Raspberry PiからAWS IoTへメッセージを送信しそれをメールで通知
(3) センサーからデータを取得しAWS IoTへメッセージ送信
となります。
今回は、(1)を完了させるところを目指します。
Raspberry PiへNode.jsのインストール
このシリーズでは、Raspberry PiでNode.js
を利用します。
ここでは難しいことを考えず、apt
とn
を使って簡単に環境構築をしてしまいます。
1 2 3 4 5 6 7 8 9 10 |
pi@raspberrypi:~ $ sudo apt install -y nodejs npm pi@raspberrypi:~ $ sudo npm cache clean pi@raspberrypi:~ $ sudo npm install n -g pi@raspberrypi:~ $ sudo n stable pi@raspberrypi:~ $ sudo npm update npm -g pi@raspberrypi:~ $ node -v v7.2.0 pi@raspberrypi:~ $ npm -v 4.0.3 pi@raspberrypi:~ $ |
AWS IoTの設定
ここでは、AWSのアカウントは取得済みで、「AWS IoT」と「AWS SNS」以外は利用した経験がある前提とします。
余談ですが、2016年11月24日前後にAWSコンソールのUIが変更され、今回利用する「AWS IoT」のUIも変更されています。
本記事は一度旧UIで執筆していたのですが、それに伴って新UIで再作成を行ないました。
AWS IoTの利用開始
AWSのコンソールから「AWS IoT」を選択し、Get started
ボタンを押しましょう。
下記のような画面が表示されます。
ページ左側のConnect
をクリックし、Configuring a device
のGet started
をクリックします。
これを選ぶことで、「Thing (今回はRaspberry Pi)」を手軽に「Internet (今回はAWS IoT)」に結びつけるための手続きを開始できます。
では、次に進んでいきましょう。
利用プラットフォームと言語の選択
次に、自分が利用するThing(モノ)のプラットフォーム(OS)と、通信するためのSDK(プログラミング言語)を選択します。
今回は、Raspberry PiにRaspbianを使っているのでプラットフォームはLinux/OSX
を選択、SDKはセンサー利用時のプログラムのし易さも考えてNode.js
を選択します。
選択が終わると、これからの流れを説明したページに遷移します。
ここもページ右下のGet started
をクリックして、次に進みます。
Thing(モノ)の登録
では、これから「Thing(モノ)」の名前を登録してみましょう。AWS IoT上の識別名なので、自由につけて良いです。
ここではpi_check_lock_thing
としています。
入力できたら、右下のNext step
をクリックします。
次は、「ポリシーの追加結果」と「Thing」から通信するための情報表示」のページになります。
ページ下部にあるDownload connection kit
のLinux/OSX
ボタンをクリックすることで、通信に必要なSSL証明書とテスト接続プログラムであるstart.sh
をダウンロードできます。
ダウンロードできたら、再度右下のNext step
をクリックします。
このページで、先にダウンロードした接続プログラムを実行して、動作の確認を行なうことができます。
Raspberry Piで実行するために、ダウンロードしたZIPファイルをRaspberry Piへ転送します。
192.168.3.12
は、私の環境でのRaspberry PiのIPアドレスです。各自のRaspberry PiのIPに変更して下記実行してください。
1 2 3 4 |
$ scp -r connect_device_package.zip pi@192.168.3.12: pi@192.168.3.12's password: connect_device_package.zip 100% 3654 3.6KB/s 00:00 $ |
転送できたら、Raspberry Pi側でconnect_device_package.zip
を展開し、start.sh
を実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
pi@raspberrypi:~ $ unzip connect_device_package.zip -d connect_device_package Archive: connect_device_package.zip inflating: connect_device_package/pi_check_lock_thing.private.key inflating: connect_device_package/pi_check_lock_thing.public.key inflating: connect_device_package/pi_check_lock_thing.cert.pem inflating: connect_device_package/start.sh pi@raspberrypi:~ $ tree connect_device_package connect_device_package ├── pi_check_lock_thing.cert.pem ├── pi_check_lock_thing.private.key ├── pi_check_lock_thing.public.key └── start.sh 0 directories, 4 files pi@raspberrypi:~ $ cd connect_device_package pi@raspberrypi:~/connect_device_package $ sh start.sh Downloading AWS IoT Root CA certificate from Symantec... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1758 100 1758 0 0 5762 0 --:--:-- --:--:-- --:--:-- 5782 Installing AWS SDK... /home/pi/connect_device_package └─┬ aws-iot-device-sdk@1.0.13 ├── crypto-js@3.1.6 ├── minimist@1.2.0 ├─┬ mqtt@1.11.2 │ ├─┬ commist@1.0.0 │ │ └── leven@1.0.2 │ ├─┬ concat-stream@1.5.2 │ │ ├─┬ readable-stream@2.0.6 │ │ │ ├── isarray@1.0.0 │ │ │ ├── process-nextick-args@1.0.7 │ │ │ └── util-deprecate@1.0.2 │ │ └── typedarray@0.0.6 │ ├─┬ end-of-stream@1.1.0 │ │ └─┬ once@1.3.3 │ │ └── wrappy@1.0.2 │ ├── help-me@0.1.0 │ ├── inherits@2.0.3 │ ├─┬ mqtt-connection@2.1.1 │ │ ├── reduplexer@1.1.0 │ │ └── through2@0.6.5 │ ├─┬ mqtt-packet@3.4.7 │ │ └── bl@0.9.5 │ ├── pump@1.0.1 │ ├─┬ readable-stream@1.0.34 │ │ ├── core-util-is@1.0.2 │ │ ├── isarray@0.0.1 │ │ └── string_decoder@0.10.31 │ ├── reinterval@1.1.0 │ ├─┬ split2@2.1.0 │ │ └─┬ through2@2.0.1 │ │ └── readable-stream@2.0.6 │ └── xtend@4.0.1 └─┬ websocket-stream@3.3.3 ├─┬ duplexify@3.5.0 │ ├── end-of-stream@1.0.0 │ ├─┬ readable-stream@2.2.2 │ │ └── buffer-shims@1.0.0 │ └── stream-shift@1.0.0 ├─┬ through2@2.0.1 │ └── readable-stream@2.0.6 └─┬ ws@1.1.1 ├── options@0.0.6 └── ultron@1.0.2 npm WARN enoent ENOENT: no such file or directory, open '/home/pi/connect_device_package/package.json' npm WARN connect_device_package No description npm WARN connect_device_package No repository field. npm WARN connect_device_package No README data npm WARN connect_device_package No license field. Runing pub/sub sample application... connect message topic_1 hello! ^C pi@raspberrypi:~/connect_device_package $ |
connect
と表示されると、AWSコンソール側で{"mode1Proccess": 1}
のように表示されます。接続を続けていると、数字がどんどん増えていき、Thing側からメッセージが送信され続けていることがわかります。
同様に、コンソールのテキストボックス内にメッセージを入力してSend message
をクリックすると、Thing側へメッセージが送信されます。
ここではテキストボックスに「hello!」と入力した結果がmessage topic_1 hello!
として、Raspberry Piのターミナルへ表示されました。
すべて確認できたら、ページ右下のDone
をクリックしましょう。
これで、AWS IoTの基本的な設定は完了しました!
再度ページ右下のDone
をクリックすることで、AWS IoT
のメニューが表示されます。
まとめ
ここまで、AWS IoTに「Thing(モノ)」を登録する手順を見てきました。
最初はやることが多くて戸惑うかもしれません。
しかし、上記の手順に沿うだけでモノとネットワークを繋げて、通信までできてしまいます。
まずは色々と試して、操作に慣れてみてください。
次回は、「Thing(モノ)」から特定のメッセージを送信した場合に、メール通知を行なえるようにします!