Intel® EdisonとGrove IoTスターターキット(AWS対応)
この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues
主要記事: まずはこちらから Grove IoTスターターキット(AWS対応), Intel Edison
Intel Edisonモジュールは、専門的なメーカー、起業家、産業IoT企業向けに設計されており、完全にオープンソースのハードウェアおよびソフトウェア開発環境を提供することで、プロトタイピングを容易にします。Wi-FiおよびBLE 4.0接続をサポートしています。このキットには、屋内環境を追跡したりスマートハウスアプリケーションを作成したりするための11種類の選択されたGroveセンサーとアクチュエーターが含まれています。
同梱内容
特徴
箱から出してすぐに使用可能。プラグアンドプレイで、ブレッドボードやはんだ付け作業は不要です。
AWSのサービスおよびAWSの実践に完全準拠。
開発者やメーカー向けのステップバイステップのチュートリアルで、迅速なプロトタイピングを支援。
はじめに
AWS IoTサービスの設定
AWSコンソールにアクセスし、アカウントを登録してログインしてください。
- ダッシュボードに移動し、サービス → AWS IoT をクリックします。
- 「Get started」をクリックします。
- 新しいユーザーを作成します。
- ユーザー名を保存し、セキュリティ資格情報をダウンロードします。
- AdministratorAccessポリシーをアタッチして設定します。
- Thingを作成します。
このセクションでは、Beagle Bone wikiを参照して、Thingを作成し残りのタスクを完了する別の方法を確認することもできます。違いは、Beagle BoneではAWS CLIツールを使用して認証を取得しない点です。
Intel EdisonボードでAWS IoTデバイスSDKを設定する
開始前の準備
ボードをセットアップするために
configure_edison --setup
コマンドを実行したことを確認してください。Intel® EdisonボードがローカルWi-Fiネットワークを介してオンラインであることを確認してください(
configure_edison
セットアップ中に行われるはずです)。SSHを使用してEdisonコンソールにログインします(PuttyまたはXshellを使用)。
AWS CLIのインストール
AWS CLIは、ボードからAWSサービスを管理する方法です。SDKをダウンロードするには、まずこれをインストールする必要があります。
- まず、pip(Pythonパッケージマネージャー)をインストールします:
curl https://bootstrap.pypa.io/ez_setup.py -o - | python
easy_install pip
- 次に、pipを使用してAWS CLIをインストールします:
pip install awscli
注意: ヘルプファイル("aws iot help")を表示するには、GroffとBusyBox以外のバージョンのlessをインストールする必要があります。
- Groffのインストール:
wget http://ftp.gnu.org/gnu/groff/groff-1.22.3.tar.gz
tar -zxvf groff-1.22.3.tar.gz
cd groff-1.22.3
./configure
make
make install
export PATH=$PATH:/usr/local/bin/
cd ~
- Lessのインストール: まず古いバージョンのlessをリネームします。
mv /usr/bin/less /usr/bin/less-OLD
次に新しいバージョンのlessをインストールします。
wget http://www.greenwoodsoftware.com/less/less-458.zip
unzip less-458.zip
cd less-458
chmod 777 *
./configure
make
make install
cd ~
- すべてが正しくインストールされていることを確認するために、iotヘルプファイルを実行します:
aws iot help
AWS資格情報の取得:
この時点で、AWS CLIがインストールされているはずです。そして、以前にダウンロードしたアクセスIDとキーを使用してAWSを設定し、以下を入力します:
aws configure
- まず、証明書を保存するフォルダを作成します:
mkdir aws_certs
cd aws_certs
- OpenSSLを使用して秘密鍵を生成します:
openssl genrsa -out privateKey.pem 2048
openssl req -new -key privateKey.pem -out cert.csr
- フィールドに自分の情報を入力します。
- 次のコマンドを実行して証明書をアクティブ化します:
aws iot create-certificate-from-csr --certificate-signing-request file://cert.csr --set-as-active > certOutput.txt
- 次のコマンドを実行して証明書をcert.pemファイルに保存します:
aws iot describe-certificate --certificate-id <certificate ID> --output text --query certificateDescription.certificatePem > cert.pem
注意: <certificate ID>
をcertOutput.txtの"certificateId"フィールドに保存されているIDに置き換えてください。ファイルを表示するには以下を入力します:more certOutput.txt
- AWS IoT SDK用のJsonポリシードキュメントを作成します:
- 以下のテキストをコピーします(Ctrl+C):
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action":["iot:*"],
"Resource": ["*"]
}]
}
vi policy.doc
を入力し、a
を押して右クリックでテキストを貼り付けます。- Escapeキーを押して
:wq
を入力し、保存して終了します。
- 次のコマンドを入力します:
aws iot create-policy --policy-name PubSubToAnyTopic --policy-document file://policy.doc
注意: ポリシー名は任意の名前にすることができます。
8.その後、ポリシーと証明書がAWSコンソールに表示されます。
9.次に、以下のコマンドを使用してポリシーを証明書にアタッチします:
aws iot attach-principal-policy --principal <principal arn> --policy-name "PubSubToAnyTopic"
注意: <principal arn> を、outputCert.txtファイル内の "certifcateArn" に保存されている値に置き換えてください。
10.証明書がポリシーにアタッチされていることが確認できます。
MQTTを使用してAWSにサブスクライブおよびパブリッシュする
- 証明書が整ったので、MQTTを使用してクラウドにサブスクライブおよびパブリッシュできます。
- まず、ルートCA pemファイルを取得します:
curl https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem > rootCA.pem
Node.jsでアプリケーションをコーディングする
- Node.jsプロジェクトを作成します
cd ~
mkdir aws_nodejs && cd aws_nodejs
npm init
npm install --save aws-iot-device-sdk
touch main.js
- デモコードをmain.jsにコピーして保存します
vi main.js
// Grove - リレーをベースシールドのポートD2に接続
// Grove - 温湿度センサー(高品質)をI2Cポートに接続
var sensor1 = require('jsupm_th02');
var th02 = new sensor1.TH02();
var sensor2 = require('jsupm_grove');
var relay = new sensor2.GroveRelay(2);
// デバイス値をシミュレート
var temp = 24.00;
var humi = 50;
var relayState = false;
var reported_state = {"Temperature":temp, "Humidity": humi, "RelayState": relayState};
//
// thingShadows.update()操作から返されるクライアントトークン値
//
const thingShadow = require('./node_modules/aws-iot-device-sdk/thing');
var awsIot = require('aws-iot-device-sdk');
var thingShadows = awsIot.thingShadow({
keyPath: '/home/root/aws_certs/privateKey.pem',
certPath: '/home/root/aws_certs/cert.pem',
caPath: '/home/root/aws_certs/rootCA.pem',
clientId: 'myAwsClientId',
region: 'us-east-1'
});
// デバイス値をシミュレート
var temp = 24.00;
var humi = 50;
var relayState = false;
//
// thingShadows.update()操作から返されるクライアントトークン値
//
var clientTokenUpdate;
var thingName = "EdisonDemo";
thingShadows.on('connect', function() {
thingShadows.register(thingName);
console.log(thingName + ' 登録中...');
setInterval(function(){
readSensor(sendData);
}, 5000);
});
thingShadows.on('status', function(thingName, stat, clientToken, stateObject) {
console.log(' '+thingName+' で '+stat+' を受信: '+ JSON.stringify(stateObject));
//
// これらのイベントは、update()、get()、delete()呼び出しのステータスを報告します。
// イベントに関連付けられたclientToken値は、以前のget()、update()、delete()呼び出しで返された値と同じです。
// ステータスイベントを使用してシャドウ操作のステータスを追跡します。
//
});
thingShadows.on('delta', function(thingName, stateObject) {
console.log(' '+thingName+' でデルタを受信: '+ JSON.stringify(stateObject));
if(stateObject.state.RelayState == true){
relay.on();
console.log('リレーがオンになりました。');
}
else if(stateObject.state.RelayState == false) {
relay.off();
console.log('リレーがオフになりました。');
}
});
thingShadows.on('timeout', function(thingName, clientToken) {
console.log(' '+thingName+' でタイムアウトを受信、トークン: '+ clientToken);
//
// シャドウ操作がタイムアウトした場合、これらのイベントを受信します。
// イベントに関連付けられたclientToken値は、以前のget()、update()、delete()呼び出しで返された値と同じです。
//
});
function readSensor(callback){
temp = th02.getTemperature();
humi = th02.getHumidity();
relayState = relay.isOn();
callback();
};
function sendData(){
var reported_state = {"Temperature":temp, "Humidity": humi, "RelayState": relayState};
var relayTH02State = {"state":{desired: reported_state}}; // desired属性を使用するとデルタを受信可能
// 詳細は http://docs.aws.amazon.com/iot/latest/developerguide/thing-shadow-mqtt.html#update-pub-sub-message を参照
clientTokenUpdate = thingShadows.update(thingName, relayTH02State);
if (clientTokenUpdate === null)
{
console.log('シャドウの更新に失敗しました。操作はまだ進行中です。');
}
};
- Node.jsアプリケーションを開始します
以下のようにGroveセンサーを接続します
リレー - D2
温度センサー - I2Cポート
node main.js
- AWSコンソールでデータを確認します
- シャドウを更新してリレーの状態を変更します
- アップロードが成功すると、Grove - リレーがオンになります。
リソース
[PDF] AWS IoT 開発者ガイド
技術サポート & 製品ディスカッション
弊社製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。