Gateway」「Lambda」を使って、センサーで取得した温度を保存してみた。Gateway」「Lambda」を使って、センサーで取得した温度を保存してみた。DB」(データベース)に値を保存それではやってみましょう。利用にあたり、AWSの利用料金がかかる場合があります。APIも使ってみる1、AmazonAWS【Dynamo】1-1、テーブルの作成AWS管理コンソールにログインしたらサービス一覧から「DynamoDB」をクリックして開きます。今回はリージョンは「東京(ap-northeast-1)」を選択します。「テーブル作成」をクリックして下記の通り入力します。センサーの識別子を格納します。センサー値をインサートした日時を格納します。「作成」をクリックしたらテーブルが作成されます。続いては、LambdaからDynamoにアクセスするための権限ロールを作ります。Management)に移動します。IAMにリージョンはありませんのでリージョンは気にしなくて大丈夫です。IAMのポリシー画面で、「ポリシーの作成」ボタンを押し、「独自のポリシーを作成」を選択します。下記の内容でポリシーを作成します。]}作成したら、続いて、このポリシーをアタッチしたロールを作成します。2-2、ロールの作成ロールの作成をクリックします。Lambda】を選択します。「手順4:ポリシーのアタッチ」で先ほど作成した「raspiDynamodb」を選択します。下記の通りの内容で保存したら、IAMでの作業は完了です。続いて、サース一覧から「Lambda」に移動します。今回はリージョンは「東京(ap-northeast-1)」を選択します。Function」をクリックします。下記、Blueprintの選択では何も選ばず「Skip」します。下記の通り入力・選択します。POSTとGETの処理を記述しています。false;」GETする際、直近のデータを取得するよう、ソート順を変更する処理を入れました。Function」を押し保存したら完了です。続いてはAPIの設定です。Gateway」に移動し、新規APIの作成を行います。API」をクリックします。API」APIが作成された時点で「/」というResourceがあります。この下にさらに子のResourceを作っていきます。Resource」ボタンを押します。下記の通り入力します。「raspi」というResourceが「/」の下に作成されました。Resource」をクリックして更に子Resourceを作ります。上記の内容で保存します。{type}というResourceが作られます。続いて、{type}の下にPOSTとGETメソッドを作成します。Method」ボタンをクリックします。「POST」を選択して、横の「チェックマーク」をクリックします。「/raspi/{type}-POST-Setup」の画面が表示されますので、下記の通り前の手順で作ったLambdaでの関数を選択します。Region「ap-northeast-1」(Lambdaのリージョン。Methodの作成が完了します。Request」をクリックします。Required「true」に設定します。Execution」画面に戻ります。Request」をクリックします。Templatesを展開して、Content-Typeを下記の通り入力します。Content-Type「application/json」この「application/json」のTemplateを下記の通り入力して保存します。$input.json('$.value')}以上で、POSTの設定は完了です。つづいて、GETのMethodを作成します。左側のツリーで「{type}」をクリックします。Method」ボタンをクリックします。「GET」を選択して、横の「チェックマーク」をクリックします。「/raspi/{type}-GET-Setup」の画面が表示されますので、下記の通り前の手順で作ったLambdaでの関数を選択します。Region「ap-northeast-1」(Lambdaのリージョン。Methodが作成されます。Request」の設定を行います。stringを追加します。Request」をクリックします。Templatesを展開して、Content-Typeを下記の通り入力します。Content-Type「application/json」この「application/json」のTemplateを下記の通り入力して保存します。"$util.urlDecode($input.params('limit'))"}設定を保存したらデプロイに進みます。デプロイをすることで、APIが使える状態になります。4-4、APIのデプロイ(Deployment)APIをデプロイします。API」ボタンをクリックしてください。下記の通り入力します。Name「prod」StageとはAPIが動作する環境のことです。自由にStageを作成できます。Keys」をクリックします。Key」をクリックし、下記の通り入力します。上記で保存後、下記の通り選択して「Add」ボタンをクリックします。Keyはこの後の手順で使用します。最後にendpointのURLを確認しておきます。Gateway」の隣のメニューリストから「APIs」を選択。「IoT」APIの「Stage」をクリックします。URL」が表示されます。このURLがendpointです。このURLはこの後の手順で使用します。以上でAWSでの設定は完了です。次は、RaspberryPi側での作業です。5、【RaspberryPi】温度の取得とAPIでのPOSTまずは、下記記事を元に、温度が取得できるようにしてください。上記記事で、実行している「Adafruit_BMP085_example.py」を少し改造します。「Adafruit_BMP085_example.py」が置いてある場所に移動し、コピーを取って編集します。Raspi_Adafruit_BMP085.py一番下の行(33〜35行目)を編集します。tempちなみに、変更後にこのファイルを実行すると、下記のように、気温が数値のみで出力されます。28.20続いては、APIをコールするプログラムを任意の場所に作ります。今回はPython3でやります。httplib2というモジュールを使うので入っていない場合は事前にインストールします。raspi_post.py「raspi_post.py」というファイルを作り、下記の通り編集します。21行目は、「4-5、endpointの確認」で確認したURLに置き換えます。1つ目のパラメータ(param[1])はセンサーの種類の識別子。2つ目のパラメータ(param[2])はセンサーの値。保存したら、実行権限を付けます。raspi_post.py最後に、「Raspi_Adafruit_BMP085.py」で取得した温度を「raspi_post.py」でPOSTするためのシェルを作ります。$RESULT保存したら、実行権限を付けて、試しに実行してみましょう。b'{}'AWSのコンソールを開き「DynamoDB」で「raspi」テーブルから「項目」タブを開きます。下記の通りデータが入っていればOKです。日本時間とは9時間の差があります。6、【RaspberryPi】クーロン化cronで定期的(1時間毎)に気温をPOSTするようにします。/etc/cron.d/post_temperature_cron下記の通り、毎時0分に実行するように編集し保存します。APIも作っています。Methodを使って、API経由でDynamoの保存しているデータを取得します。Piをファミコンのカートリッジに収納してレト..【ニュース記事】数cm四方のスーファミエミュハード。|この記事へのコメントコメントを書くお名前:メールアドレス:ホームページアドレス:コメント:※ブログオーナーが承認したコメントのみ表示されます。Piをファミコンのカートリッジに収納してレトロゲームのエミュレータが完成(09/13)【ニュース記事】数cm四方のスーファミエミュハード。Piをファミコンのカートリッジに収納してレトロゲームのエミュレータが完成(09/13)【ニュース記事】数cm四方のスーファミエミュハード。PiベースSeesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。