AWSIoTを使用したプラント監視システム
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
| |||
| ||||
| ||||
| ||||
| ||||
|
このプロジェクトについて
これを想像してみてください。あなたは1週間ほど休暇を取り、家の観葉植物について心配しています。休暇に出かける前に1週間かかる素晴らしいプロジェクトです。
次の機能を使用して、プラントの監視および通知システムを自分で構築します
- dweet.ioを使用して、温度、光の値、土壌水分の値を監視します
- または、新しいAmazonIoTサービスを使用してデータを AWS-DynamoDB に記録します
- AWS -SNS通知を使用して、自分宛てにメールを送信します。これにより、いとこや近所の人に、植物にすばやく水をやったり、自宅のサーモスタットを確認したりできるようになります。
さらに、Arduino Yun、グローブシールド、センサーを収納する3Dプリントのエンクロージャーを設計しました。
私の植物がここでどのように機能しているかを確認したい場合は、リンクをご覧ください
http://dweet.io/follow/PlantMonitorTorontoON
ビルドを完了するために実行する必要がある手順は次のとおりです
#1回路を構築する Groveコネクタシールドを使用する プロジェクトの概略セクションに示されているように、基本的には
を接続します- A0への温度センサー
- A1への土壌水分センサー
- A2への光センサー
- そして、220オームの抵抗を使用してLEDをピン#2に接続します
#2 STLファイルを3Dプリントします、 に添付 カスタムパーツとエンクロージャセクション、 ここでは、印刷する3つのSTLファイルがあり、スライシングソフトウェアを層の高さ0.3mm に設定します。 充填密度は少なくとも25% 以上
3D印刷には約2時間かかるため、以下の他の手順を完了する間、STLファイルをダウンロードして3Dプリンターを完成させてください
<図>
#3土壌水分値の決定
以下に添付されているコード(土壌水分値)をArduino Yunにアップロードし、以下のコードでtooDryValueを決定します。基本的に、土壌水分値がtooDryValueを下回る場合は、植物に水をやる必要があります(この値は、 AWS-SNS条件でメールを送信するために使用します)
これは、私があまりにも乾燥した値を決定するために使用した方法を示すビデオです
#4 ArduinoコードをYunにアップロードして、dweet.ioにデータを投稿します
toodryvalueを決定したら、ArduinoYunDweetIO.inoファイルをYunにアップロードします。また、コードの一部として、「PlantMonitorTorontoON」をより意味のあるものに置き換えます。
これは、dweet.ioへのセンサーデータのアップロードをテストするビデオです
#5コンピューターでのAWSCLIのセットアップ (ここではMacを使用しています)
DyanamoDBでAWSIoTを使用してデータをログに記録するには、https://aws.amazon.com/freeでアカウントを作成する必要があります。ここでは、クレジットカードの詳細も提供する必要がありますが、以下のチュートリアルでは、費用が発生します(これもAWSセットアップの地域によって異なります)
完了したら、「 AWS 」フォルダを作成します "Macで、以下のリンクをたどってAWSCLIをダウンロードしてインストールします
http://docs.aws.amazon.com/iot/latest/developerguide/installing-aws-cli.html
私はMacを使用しています。これが私が従った指示です
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" $ unzip awscli-bundle.zip $ sudo ./awscli -bundle / install -i / usr / local / aws -b / usr / local / bin / aws
注:ターミナルでは、作成したAWSフォルダーにいる必要があります
<図>#6 AWSIoTコンソールに表示されるCLIを使用してモノを作成する
次に、次のコマンドを使用してAWSIoTでモノを作成します
aws iot create-thing --thing-name "plantSystem"
<図> 詳細については、リンクを参照してください
http://docs.aws.amazon.com/iot/latest/developerguide/create-thing.html
#7証明書の作成
必要な証明書を作成してアクティブ化するには、次のコマンドを実行します
aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --public-key-outfile publicKey.pem --private-key-outfile privateKey .pem
このコマンドは、以下のスクリーンショットに示すように、AWSフォルダーに証明書(3つのpemファイル)を作成します
<図>
#8 AWSIoTポリシーを作成して証明書に添付する
まず、お気に入りのテキストエディターを使用してAWSフォルダーにjsonファイルを作成します(私は崇高なテキスト2を好みます)-ファイルにpolicy.jsonという名前を付けます
{"Version": "2012-10-17"、 "Statement":[{"Effect": "Allow"、 "Action":["iot:*"]、 "Resource":[ "*"]}]}
次に、次のコマンドをテキストエディタにコピーして貼り付けます
aws iot create-policy --policy-name "PubSub" --policy-document file://./policy.json
#9ポリシーを証明書に添付してから、証明書をデバイスに添付する
以下のコマンドを次々に実行してください
$ aws iot attach-principal-policy --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx" --policy-name "PubSub" $ aws iot attach-thing-principal --thing-name "PlantSystem" --principal "arn:aws:iot:xxxxxxxxxxxxxxxxxxxxxxxx"
ここで、証明書を書き留めていない場合に証明書を取得する簡単な方法は、AWS IoTコンソールに移動して証明書をクリックし、画面の右側にある詳細に移動することです。ここから、arnをターミナルにコピーして貼り付けることができます
<図>
詳細については、
のドキュメントを参照してください。http://docs.aws.amazon.com/iot/latest/developerguide/secure-communication.html
#10コンピューターでのセットアップの確認/テストとMQTT.fxを使用したテスト
コンピューターでセットアップが完了したと主張するには、以下のリンクからMQTT.fxをダウンロードしてインストールし、セットアップが機能しているかどうかをテストします。AWSIoTを介してデータを公開およびサブスクライブできます
http://mqttfx.jfx4ee.org/index.php/download
セットアップ情報の詳細とルート証明書のダウンロードについては、以下のリンクを使用してください
http://docs.aws.amazon.com/iot/latest/developerguide/verify-pub-sub.html
-ここMQTT.fxでは、接続プロファイルを設定する必要があります
-上記の手順の一部としてダウンロードした証明書をリンクします
これは、コンピューター(私の場合はMQTT.fxツールを使用したMAC)でセットアップをテストする方法を示す簡単なビデオです。
セットアップが正常であることを完了してテストしたら、以下の手順に従って、証明書をArduinoYunにアップロードします
#11 AWSIoTクラウドと通信するためのArduinoYunのセットアップ
githubからArduinoYun SDKの最新バージョンをダウンロードし、Arduinoの「ライブラリ」フォルダに解凍します。
https://github.com/aws/aws-iot-device-sdk-arduino-yun
Arduino Yunを初めて使用する場合は、
のセットアップ手順に従ってください。https://www.arduino.cc/en/Guide/ArduinoYun
基本的にリンクを使用して、自宅のWiFiネットワークに接続するようにArduinoYunを設定する方法を学習します。
次に、プロセス例のスケッチArduino IDEをYUNにロードします([ファイル]-> [例]-> [ブリッジ]-> [プロセス])。これにより、Yunがインターネットにアクセスできることが確認されます。
以下のスクリーンショットに示すように、rootCAファイル、秘密鍵、および証明書をcertsフォルダーに配置します
<図>
次に、 codebase_upload.sh を変更します および environment_setup.sh [your_boards_IP]をボードのIPアドレスに置き換え、[your_boards_IP]をパスワードに置き換えます
ターミナルで次のコマンドを実行して.shファイルに権限を付与します。これには、約5〜10分かかります。これにより、証明書が移動し、Yunにdistribute、python-openssl、pip、paho-mqttがインストールされます。これらは、YunからAWSクラウドと通信するために必要なパッケージです(この場合はPlantSystemと呼ばれます)
$ chmod 755 codebase_upload.sh $ ./ codebase_upload.sh $ chmod 755 environment_setup.sh $ ./ environment_setup.sh
Linux / Windowsにインストールするには、
のリンクをたどってください。https://github.com/aws/aws-iot-device-sdk-arduino-yun#installation
AWS CLIを使用する次のカップルの一環として、センサーデータを投稿するためにDynamoDBにテーブルを作成します
#12IAMロールの作成と権限の付与
基本的に、次のステップの一部として作成するDynamoDBセンサーテーブルにデータを入力するには、AWSが受信したMQTTメッセージに基づいて動作するIoTルールを作成する必要があります。これには、ロールを作成して付与する必要があります。必要な許可
jsonファイルrolePolicy.jsonを作成します
{"Version": "2012-10-17"、 "Statement":[{"Sid": ""、 "Effect": "Allow"、 "Principal":{"Service": " iot.amazonaws.com "}、"アクション ":" sts:AssumeRole "}]}
役割を作成するには、ターミナルで次のコマンドを実行します
aws iam create-role --role-name iot-actions-role --assume-role-policy-document file://./rolePolicy.json
別のjsonファイルpolicy.jsonを作成します
{"Version": "2012-10-17"、 "Statement":[{"Effect": "Allow"、 "Action":["dynamodb:*"、 "lambda:InvokeFunction"] 、 "リソース":["*"]}]}
次に、create-policyを呼び出して、IAMポリシードキュメントを指定します
aws iam create-policy --policy-name iot-actions-policy --policy-document file://./policy.json
最後に、次のコマンドを使用してポリシーをロールに添付します-前の手順の一部として受け取ったARNにポリシーARNを変更します
aws iam attach-role-policy --role-name iot-actions-role --policy-arn "arn:aws:xxxxxxxxxxxxx:policy / iot-action-policy"
http://docs.aws.amazon.com/iot/latest/developerguide/config-and-test-rules.html
#13AWSコンソールのDynamoDBでテーブルを設定する
このステップの一環として、AWSコンソールでDynamoDBを作成します
テーブル名:plantSensor
パーティションキー:キー
ソートキー:タイムスタンプ
また、読み取り容量の単位と書き込み容量を1に設定します。
<図>#14PlantSensorテーブルにデータを挿入するルールを作成する
jsonファイルを作成します--plantdatarule.json(ここでは、以下のセクションでroleArn値を変更し、IAM-> Roles-> iot-action-roleに移動してarnを取得します)
{"sql": "SELECT * FROM'topic / plantdata '"、 "ruleDisabled":false、 "actions":[{"dynamoDB":{"tableName": "plantSensor"、 "hashKeyField" : "key"、 "hashKeyValue": "$ {topic(2)}"、 "rangeKeyField": "timestamp"、 "rangeKeyValue": "$ {timestamp()}"、 "roleArn": "arn:aws:iam ::XXXXXXXXXXXX:role / iot-actions-role "}}]}
次に、端末で次のコマンドを実行します
aws iot create-topic-rule --rule-name plantDataToDynamoDB --topic-rule-payload file://./plantdatarule.json
これで、AWS IoTコンソールに移動すると、以下のスクリーンショットに示すように、「PlantDataToDynamoDB」と呼ばれる作成されたルールが表示されます(「これは以下の手順の一部として提供されるメール送信ルールを無視してください)。
<図>MQTT.FXを使用してクイックテストを実行し、作成されたテーブルにレコードが作成されているかどうかを確認します。
<図>
#15 Arduinoスケッチをアップロードして、YunからAWSIoTにデータを公開します
ここでは、まずgithubからArduinoJSONライブラリをダウンロードします
。https://github.com/bblanchon/ArduinoJson
次に、以下のコードセクションからYunAWSIoTDynamoDB、inoおよびaws_iot_config.hファイルをダウンロードし、Yunにアップロードします。
シリアルモニターを開くと、DynamoDBに投稿された温度、ライトバリュー、土壌水分値が表示されます。
AWSを利用したことがある場合は、Lambda関数を設定し、データキネシスを投稿することで、あらゆる種類のすばらしいことを実行できます...
<図>注: これを永続的な設定にする場合は、ループの最後で遅延を増やすことを忘れないでください。これにより、DynamoDBへの投稿の時間間隔が長くなり、追加のコストが発生しなくなります。価格設定の詳細については、https://aws.amazon.com/iot/pricing/
を参照してください。
#16土壌水分値がしきい値を下回った場合に受信してメールで送信するAWS-IoTSNSルールを設定します。
基本的に、このステップには、AWSIoTルールに基づいたシンプルなSNS通知ベースの設定が含まれます。
まず、IAMコンソールで前の手順で作成したAWSロール(iot-action-role)に次のポリシーを割り当てます
-AmazonSNSRole
-AmazonSNSFullAccess
SNSコンソールで完了したら、 sendMail というトピックを作成します サブスクリプションを作成し、土壌水分値が低いときに通知を受け取るように電話でメールを設定します。
次に、AWS IoTコンソールに戻り、[+リソースの作成]ボタンを使用して、Eメール送信と呼ばれるルールを作成し、次の情報を提供します
- 名前:EmailSend
- 属性:mositValue(これは、Arduinoコードのトピックの一部として投稿しているjson値と一致する必要があります)
- トピックフィルター:topic / plantdata
- 条件:湿った状態<250(これはチュートリアルの最初の数ステップで決定した値です)
- アクションの選択:プッシュ通知SNSとしてメッセージを送信します
- SNSターゲット:sendEmail
- 役割:iot-action-role
完了すると、コンソールは以下のスクリーンショットのようになります
<図>これは、コップ一杯の水から土壌水分センサーを取り外したときに受け取ったメールのサンプルです
AWS-SNSの詳細を読むには
https://aws.amazon.com/sns/faqs/
#15 3D印刷されたパーツを組み合わせて、ポットに追加します。
黒土ポーカーの3DプリントパーツをArduinoYunのベースパーツに取り付けるには、4x40のネジとナットが必要です
<図>上部はぴったりとはまります。ここでは、上部の開口部を窓の方に向けて、ポットの土壌水分を突くことを忘れないでください。そして、マイクロUSBケーブルプラグでユンに電源を入れて壁のコンセントに接続します。
<図>私はまだAWSの素晴らしい世界を探索して学習しており、AWSコンソールの機能に畏敬の念を抱いています。そのため、AWSをかなり長い間使用している場合は、機能に関するコメントや提案を投稿してください。植物モニタリングプロジェクトを見て/適用できるのが好きでした。ありがとう..
コード
- SoilMoistureValue
- ArduinoYunDweetio
- ArduinoYunAWSIoTDynamodb
- aws_iot_config.h
SoilMoistureValue Arduino
観葉植物の理想的な土壌水分値を決定するためのArduinoスケッチ// @ CarmelitoA-観葉植物モニタリングプロジェクトによる土壌水分値の決定constintmoisturePin =A1; // GroveShieldconstのA1に接続されたGroveMoistureセンサーintledPin =2; int moisturValue =0; int tooDryValue =250; //思いついたものに基づいてこの値を変更しますvoidsetup(){Serial.begin(9600); pinMode(ledPin、OUTPUT); digitalWrite(ledPin、LOW);} void loop(){moisturValue =analogRead(moisturePin); Serial.print( "Moisture Sensor ="); Serial.println(moisturValue); //乾いた砂で、次に湿った砂で値を確認しますif(moisturValueArduinoYunDweetio Arduino
ArduinoYunを使用してセンサーデータをdweet.ioに投稿する//観葉植物モニタリングプロジェクトのために@CarmelitoAによって作成されました-データをdweet.ioにアップロードします。 (CC BY-SA https://creativecommons.org/licenses/by-sa/4.0/)#include#include #define SITE_URL "www.dweet.io" #include
カスタムパーツとエンクロージャー
回路図
センサーをGroveスターターキットに接続します。 -A0への温度センサー
-A1への土壌水分センサー
-A2への光センサー
さらに、220オームの抵抗を使用してLEDをピン#2に接続します。 接続する
A0への温度センサー
A1への土壌水分センサー
A2への光センサー
そして、220オームの抵抗を使用してLEDをピン#2に接続します
製造プロセス
- C# を使用して
- RaspberryPiを使用した天気のリモートモニタリング
- モーションコントロールされたAWSIoTボタン
- タンク監視IoTテクノロジーを使用してよりスマートな運用を構築する方法
- デュアルパーパスIoT森林管理システム
- IoTベースのリモートオイルおよびディーゼルタンク監視システム
- IoTベースの車両重量監視システムの8つの利点
- O&G業界でIoT対応の資産監視を使用することの重要性
- IoTのピンチでミルク貯蔵を改善する:ミルクレベル監視システム
- 効率的な水管理のためのIoTを活用した河川レベル監視システムの使用
- システムは、スマートスピーカーを使用して心臓リズムの非接触モニタリングを可能にします