AWSにラズパイを接続!GPIOの信号をクラウドに送信してみた

AWS

AWSに入門したくなり、ラズベリーパイで始めてみました。

ラズパイとAWSを接続して、PythonでGPIOの信号をクラウドに送信しています。

無料枠の範囲内で実施出来ますので、AWSを始めてみたい人におすすめします。

 

スポンサーリンク

AWSにラズパイを接続!GPIOの信号をクラウドに送信してみた

AWS(アマゾン提供のクラウド)にラズベリーパイのGPIO信号を送信してみました。

PythonでラズパイとAWSを接続させています。

 

ラズパイからのメッセージをMQTTでAWSに通知させることが可能です。

サンプルプログラムを流用して、簡単にテストしてみました。

 

AWSの登録・設定方法から、テストプログラムまで紹介していきます。

実際にラズパイでAWSと通信させたテストの様子を動画でも紹介しています。

GPIOをONした瞬間にAWS側でメッセージを受け取っていることが良く分かります。

AWS IoTとラズパイをPythonで接続してみた

 

AWSに個人で登録する

最初は下記リンクに従ってAWSの登録を進めます。個人でも自由に登録が可能です。

無料枠も十分にあるので、少しAWSに体験してみる程度ならば無料で試せます。

AWS アカウント作成の流れ | AWS
日本のお客様に AWS アカウント作成の手順とポイントをステップバイステップでご紹介します。

 

登録が終了してログインすると、AWSのコンソールの画面が出てきます。

この画面から自由にAWSのサービスを選ぶことが可能です。

今回は「AWS IoT」というサービスを使って、ラズパイでAWSに接続してみます。

 

AWS IoTでラズパイと接続してみる

AWS IoTでラズパイと接続するためには何点か手順を踏む必要があります。

シンプルな方法の一例を紹介します。

 

AWS IoTでモノを登録する

最初にAWS IoTで使うデバイス、つまり「モノ」を登録していきます。

今回はラズベリーパイが「モノ」となります。

コンソール上のすべてのサービスの中から「IoT Core」を選びます。

 

AWS IoTの画面を開いたら、左の一覧から「管理」→「モノ」を選択します。

 

モノの画面の右上にある「作成」をクリックして進めていきます。

 

そしてAWS IOTモノを作成する画面で「単一のモノを作成する」を選択します

 

モノの名前を任意で入力します。(筆者は「raspberry-pi」としました。)

他にタイプ・グループなども選べますが、今回は特に選択せず「次へ」で進みました。

 

AWS IoTで証明書を作成する

AWSとラズパイで通信させるために必要な証明書を作成していきます。

AWSのコンソール画面で証明書を作り、後ほどラズパイに渡す流れです。

「証明書を作成」を選択します。

 

このモノの証明書、パブリックキー、プライベートキーを全部ダウンロードします。

またルートCAもダウンロードリンク先から入手します。

ルートCAに関して今回は「RSA 2048 bit key: Amazon Root CA 1」をダウンロードしました。

ダウンロード後に「有効化」を押して、「ポリシーをアタッチ」を選択します

 

AWS IoTでポリシーをアタッチする

AWS IoTでポリシーを作成していきます。

ポリシーとはざっくりいうと、AWSへのアクセス権限を管理するリストみたいなものです。

今回はテスト用にAWS IoT関連ならば、何でもできるポリシーを作成しています。

 

「新規ポリシーの作成」を選びます。

 

ポリシーに名前を付けて、アクションに「iot:*」リソースAPNに「*」を記載します。

あと効果も「許可」にチェックを入れます。

 

ポリシーが作られましたので証明書にアタッチ(紐づけ)します。

左一覧の「安全性」→「証明書」から先ほど作成した証明書を選択します。

 

証明書の項目で右上のアクション→ポリシーのアタッチを選択します。

先ほど作成したポリシーをアタッチします。

 

AWSのエンドポイントのURLを控えておきます

最後にAWSのエンドポイントのURLを控えておきます。

AWS IoTを使う際に必要な情報となります。

左一覧にある「設定」を選ぶと、エンドポイントのURLがあります。

 

これで一旦AWS側の設定が終了です。次からはラズベリーパイ側の設定をしていきます。

 

一括でAWSの設定する方法もありますが…

一番最初のコンソール画面に「IoT デバイスを接続する」があります。

ここをクリックするとワークフローに従った形で進めることも可能です。

(SDKのダウンロード・証明書の発行・ポリシーのアタッチなどの手順を一括で進めれます。)

ただ環境により失敗することも多いので注意が必要です。

 

おそらく前述した形で「モノ」「証明書」「ポリシー」を作った方が楽かと思います。

筆者も最初に実践してみましたが、結構躓きました。何点か紹介します。

 

ポリシーなど修正する必要が出てくる

自由にテストしたい場合などは(ポリシーなど)修正する項目が出てきたりします。

一括のフローで作られたデフォルト設定だと、ある程度アクセス権限が絞られています。

そのため、今回紹介するPythonプログラムなどではAWSに接続できませんでした。

※ポリシーを再度修正すればAWSに接続できました。

 

実際のログは下記形です。AWSに接続できなくタイムアウトしています。

 

古いPython2.7にインストールしようとした

一括のフローで進める場合、PythonのSDKのインストールもしてくれます。

但し、失敗する場合もあります。

筆者の場合は古いPython2.7の方にインストールしようとしていました。

 

実際のログの一部切り取りが下記です。

実効スクリプトにsudoが無いのか、またPython2.7の方にファイルを作ろうともしていました。

 

下記原因が考えますが、上手くいくかはラズパイの環境に結構依存しそうです。

  • 筆者のラズパイに古いPythonの環境が残っていた影響?
  • 一括で実行するシェルスクリプトが悪い?

 

参考にさせていただいた記事

AWSの設定に関しては下記Qiita記事を参考にさせていただきました。

運営者・著者の方にはこの場を借りて深くお礼申し上げます。

 https://qiita.com/chigusaweb66/items/2058174713ca833361ff

 https://qiita.com/f-daiki/items/3d7b0adba3e457ee48a5

 

ラズパイにaws-iot-device-sdk-pythonをインストール

AWSと通信できるようにラズパイ側をセットアップしていきます。

今回は「Python」でプログラムを書きますので、SDKもPythonをインストールします。

(他のプログラム言語のJava、Node.jsも選べるようですが、今回は省略します)

 

AWSIoTPythonSDKをインストール

ラズパイのコンソールの画面でインストール作業を進めていきます。

 

今回は下記コマンドを入力しています。

git clone https://github.com/aws/aws-iot-device-sdk-python.git
cd aws-iot-device-sdk-python/
sudo python3 setup.py install

 

ダウンロード先のAWSのGithubのリンク先は下記となっています。

今回のPythonのプログラム含めて参考にさせていただいています。

 https://github.com/aws/aws-iot-device-sdk-python

 

aws-iot-device-sdk-python-v2もあります

今回インストールしたSDKの次のVerの「aws-iot-device-sdk-python-v2」も出ているようです。

もし興味ある方は試してみて下さい。Githubのリンク先は下記です。

 https://github.com/aws/aws-iot-device-sdk-python-v2

 

証明書、鍵、ルートCAもラズパイに入れます

またAWSで発行した証明書、鍵(プライベートキー)、ルートCAもラズパイに入れておきます。

今回は動かすプログラムと同じ階層(/home/pi)にフォルダ(/cert)を作り、そこに入れています。

 

ラズパイからAWS IoTにMQTTで通信テスト

最初にAWS IoTに正常に通信できるか通信テストを行います。

Pythonでプログラムを作成していきます。

 

ラズパイにはデフォルトでPythonがインストールされており、誰でも簡単に使用できます。

初心者の方でも大丈夫です。下記記事で使い方を紹介しています。(リンク先はこちら)

ラズベリーパイでプログラミング入門!Pythonの簡単な始め方

ラズベリーパイでプログラミング入門!Pythonの簡単な始め方
プログラミングを始めたい方にラズベリーパイを使った簡単な入門方法を紹介します。 プログラミング言語の中でも初心者にもやさしく、人気なPythonがラズパイならば簡単にスタートできます。 ラズベリーパイでプログラミング入門!Pytho...

 

Pythonで通信テストのプログラムを作成

実際にAWSと通信テストしたプログラムは下記です。

Github先のサンプルを簡単に修正したレベルのものです。

ラズパイのデフォルトのホームディレクトリ「/home/pi」上にプログラムを置いています。

内容としてはMQTTと呼ばれるプロトコルでAWSに「myPayload」とメッセージを送っています。

 

実際に使う場合はID、エンドポイント,証明書、鍵、ルートCAを適宜修正してください。

 

筆者の場合は下記のように修正しています。

(***箇所は各自のファイルの名前を確認して修正をお願いします。)

  • "myClientID" → "raspberry-pi"
  • "YOUR.ENDPOINT" → "***.amazonaws.com"
  • "YOUR/ROOT/CA/PATH" → "cert/AmazonRootCA1.pem"
  • "PRIVATE/KEY/PATH" → "cert/***-private.pem.key"
  • "CERTIFICATE/PATH" → "cert/***-certificate.pem.crt"

 

AWSでMQTTクライアントを動かす

AWS IoTの画面で左の一覧から「テスト」を選択します。

MQTTクライアントの画面が出てきます。

 

今回はトピックのサブスクリプションの箇所に「myTopic」と入力します。

そして「トピックへのサブスクライブ」をクリックします。

入力内容はPythonのプログラムの最後の方にある下記箇所と合わせています。

myMQTTClient.publish("myTopic", "myPayload", 0)

 

 

MQTTでメッセージの通信テスト

AWSの準備が終わりましたら、ラズパイのPythonのプログラムを起動します。

プログラム起動前はAWSの下記赤枠のMQTTによるメッセージはないはずです。

 

プログラム起動後はAWSの画面でMQTTのメッセージが表示されています。

ラズパイからAWSに「myPayload」のメッセージが受け取れました。

 

通信ポートに関しては8883でなくても443でも動作は出来ました。

AWSのMQTTクライアントのデフォルト設定はJSONという表示形式です。

ただし、JSON形式でなくともAWS側でUTF-8文字列として表示してくれました。

 

ラズパイからAWSにGPIOの信号情報を送るテスト

折角なので少し応用して、ラズベリーパイのGPIOの信号をAWSに送信したいと思います。

具体的にはスイッチが押されたらラズパイからAWSにメッセージを送る形にします。

 

冒頭にも紹介しましたが、実際のテストの様子を動画でも紹介しています。

ラズパイのGPIOをONした瞬間にAWS側でメッセージを受け取れています。

AWS IoTとラズパイをPythonで接続してみた

 

ラズベリーパイのGPIOの配線

ラズパイのGPIO17に「スイッチ」と「プルダウン10kΩ抵抗」を接続します。

 

ブレットボードとジャンパー線で簡単に配線できます。

 

 

Pythonのプログラム

ラズパイのプログラムも修正します。

3秒間隔でGPIOの信号を読み取り、ONの場合はAWSにMQTTでメッセージを送る内容です。

 

実際に使ったPythonのプログラムは下記です。

 

AWSへGPIO信号の通信テスト

ラズパイのPythonのプログラムを起動して、AWSの画面を確認します。

ラズパイのGPIO17をONし続けると、AWSが3秒間隔でメッセージを受け取ります。

無事ラズパイからAWSへの通信テストが出来ました。

 

AWS IoTの料金

今回の通信テストレベルではAWSの料金は無料の範囲内でした。

 

何回か通信テストを行いましたが、1か月の無料枠の0.02%を使う程度です。

(1か月100万APIリクエストの無料枠中の228リクエスト程度でした)

 

画像認識のテストも無料枠内だった

今回の記事とは別にラズパイとAWSで画像認識のテストも実施しました。

AWSのRekognitionというサービスを使いました。

 

下記記事で紹介しています。(リンク先はこちら)

最初の12か月の無料枠では月5000枚まで画像認識出来るということです。

よろしければ下記記事も一緒にご覧ください。

AWSとラズパイで画像認識!クラウドの力を借りてみた

AWSとラズパイで画像認識!クラウドの力を借りてみた
ラズべリーパイとAWSで画像認識をしてみました。 AWS(アマゾンのクラウド)を使うことで、誰でも簡単に画像認識を始めれます。 設定方法から実際にカメラを使った画像認識まで紹介していきます。

 

まとめ

今回はAWSとラズパイの接続に関して紹介させていただきました。

記事をまとめますと下記になります。

AWSにラズパイとPythonで通信出来ました。
(今回の)通信テストレベルでは無料枠内で実施出来ます。

 

AWSを始めてみるにもラズベリーパイ(raspberry pi)はちょうど良いデバイスかと思います。

ハードウェアの勉強や趣味・工作にも十分に使えます。

是非皆さまも試してみて下さい。

コメント