Intel® Edison and Grove IoT Starter Kit Powered by AWS
Main articles: Start here Grove IoT Starter Kits Powered by AWS , Intel Edison
Designed for expert makers, entrepreneurs, and industrial IoT companies, the Intel Edison module provides easier prototyping with a fully open source hardware and software development environment. It supports Wi-Fi and BLE 4.0 connectivity. This kit contains eleven selective Grove sensors and actuators for you to track indoor environment as well as to create smart-house applications.
Included in the Box¶
Features¶
-
Out-of-the-box, plug and play, no breadboard or soldering work required.
-
Fully compliant with AWS's services and AWS's practices.
-
Step-by-step tutorials for developers and makers for quicker prototyping.
Getting Started¶
Configure Your AWS IoT Service¶
Visit amazone AWS console, register and logon your account.
- Goto the dashboard, click Service --> AWS IoT
- Click Get started
- Create a new user
- Save user name and download Security Credentials
- Seeting Attach Policy with AdministratorAccess
- Create a thing
At this section you can also refer to the Beagle Bone wiki for another way to create a thing and finish the left tasks. The difference is Beagle Bone didn’t use AWS CLI tool to Get Certifications.
Setting up AW IoT device SDK on the intel edison board¶
Before you begin
-
Make sure you have run the configure_edison --setup command to set up your board
-
Make sure your Intel® Edison board is online via your local Wi-Fi network (should occur during configure_edison setup)
-
Login ediosn console with ssh(Use putty or Xshell).
**Install AWS CLI **
The AWS CLI is a way to manage your AWS services from your board. You need this first in order to download the SDK.
1.First, you need to install pip (Python package manager):
curl https://bootstrap.pypa.io/ez_setup.py -o - | python easy_install pip
2.Next, install the AWS CLI with pip:
pip install awscli
Note: In order to view the help files ("aws iot help") you need to install Groff and a non-BusyBox version of less.
3.For 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 ~
4.For Less: First rename the old version of less
mv /usr/bin/less /usr/bin/less-OLD Then install the new version of less wget http://www.greenwoodsoftware.com/less/less-458.zip unzip less-458.zip cd less-458 chmod 777 * ./configure make make install cd ~
5.To make sure everything has installed correctly, run the iot help file:
aws iot help
Get AWS credentials:
At this point, you should have AWS CLI installed. And the Access ID and Key you have download before, configure AWS and enter the ID and Key with:
aws configure
1.First create a folder to store your certificates in:
$ mkdir aws_certs $ cd aws_certs
2.Generate a private key with open ssl:
openssl genrsa -out privateKey.pem 2048 openssl req -new -key privateKey.pem -out cert.csr
3.Fill out the fields with your info.
4.Run the following to activate the certificate:
aws iot create-certificate-from-csr --certificate-signing-request file://cert.csr --set-as-active > certOutput.txt
5.Run the following to save the certificate into a cert.pem file:
aws iot describe-certificate --certificate-id <certificate ID> --output text --query certificateDescription.certificatePem > cert.pem
NOTE: Replace <certificate ID> with the ID stored in the "certificateId" field in certOutput.txt. To view the file enter: more certOutput.txt
6.Create a Json policy document for AWS IoT SDK:
-
Copy the following text (ctrl-c):
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:"], "Resource": [""] }] }
-
Enter vi policy.doc hit a and right click to paste the text
- Hit escape and type in :wq to save and quit
7.First enter:
aws iot create-policy --policy-name PubSubToAnyTopic --policy-document file://policy.doc
Notice:The policy name can be anything.
8.After that a policy and a certificate can be shown on your AWS console.
9.Then attach the policy to the certificate with:
aws iot attach-principal-policy --principal <principal arn> --policy-name "PubSubToAnyTopic"
NOTE: replace <principal arn> with the value stored in "certifcateArn" in the outputCert.txt file.
10.You should see your certificate has attach to your policy.
Use MQTT to subscribe and publish to AWS
- Now that the certificates are in order we can use MQTT to subscribe and publish to the cloud.
- First get the root CA pem file:
curl https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem > rootCA.pem
Coding your application with nodejs¶
1.Create a nodejs project
cd ~ mkdir aws_nodejs && cd aws_nodejs npm init npm install --save aws-iot-device-sdk touch main.js
2.Copy and save demo code to main.js
vi main.js
// Plug Grove - Relay to base shield port D2 // Plug Grove - Temperature&Huminity(High quality) to i2c port var sensor1 = require('jsupm_th02'); var th02 = new sensor1.TH02(); var sensor2 = require('jsupm_grove'); var relay = new sensor2.GroveRelay(2); // Simulate device value var temp = 24.00; var humi = 50; var relayState = false; var reported_state = {"Temperature":temp, "Humidity": humi, "RelayState": relayState}; // // Client token value returned from thingShadows.update() operation//app deps const thingShadow = require('./node_modules/aws-iot-device-sdk/thing');// Plug Grove - Relay to base shield port D2 // Plug Grove - Temperature&Huminity(High quality) to i2c port var sensor1 = require('jsupm_th02'); var th02 = new sensor1.TH02(); var sensor2 = require('jsupm_grove'); var relay = new sensor2.GroveRelay(2); 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' }); // Simulate device value var temp = 24.00; var humi = 50; var relayState = false; // // Client token value returned from thingShadows.update() operation // var clientTokenUpdate; var thingName = "EdisonDemo"; thingShadows.on('connect', function() { thingShadows.register(thingName); console.log(thingName + ' registering...'); setInterval(function(){ readSensor(sendData); }, 5000); }); thingShadows.on('status', function(thingName, stat, clientToken, stateObject) { console.log(' received '+stat+' on '+thingName+': '+ JSON.stringify(stateObject)); // // These events report the status of update(), get(), and delete() // calls. The clientToken value associated with the event will have // the same value which was returned in an earlier call to get(), // update(), or delete(). Use status events to keep track of the // status of shadow operations. // }); thingShadows.on('delta', function(thingName, stateObject) { console.log(' received delta on '+thingName+': '+ JSON.stringify(stateObject)); if(stateObject.state.RelayState == true){ relay.on(); console.log('Relay is on.'); } else if(stateObject.state.RelayState == false) { relay.off(); console.log('Relay is off.'); } }); thingShadows.on('timeout', function(thingName, clientToken) { console.log(' received timeout on '+thingName + ' with token: '+ clientToken); // // In the event that a shadow operation times out, you'll receive // one of these events. The clientToken value associated with the // event will have the same value which was returned in an earlier // call to get(), update(), or 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}}; // Use desired attribute can receive delta // More info refer to 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('update shadow failed, operation still in progress'); } };
3.start nodejs application
-
Plug Grove sensors just like below
-
Relay - D2
-
Temperature sensor - i2c port
node main.js
4.Watch data on AWS console
5.Update shadow to change relay state
6.If uploading succeed Grove - Relay will turn on.
Resources¶
Tech Support¶
Please submit any technical issue into our forum or drop mail to techsupport@seeed.cc.