Description:
This project shows how to connect IoT platform to Cloud service and how to display sensing data for graphical analysis.
Components:
- Platform: WIZwiki-W7500
- YwRobot easy module shield v1(DHT11)
- cloud data logger: data.sparkfun.com (Phant.io)
- cloud chart: analog.io
- IDE; Web-Compiler(mbed.com)
- HTTP Query
data.sparkfun.com
- What is Phant?
- Phant is an open source cloud server platform by powered Sparkfun Electronics.
- Sparkfun created data.spartfun.com, which is a free cloud service running phant.
- To collect data from your device to cloud service, you just need to register a new stream.
- After register, you get two keys for accessing the data; one is q private key is required to update that stream, other is a public key grants access to any other stream on the service.
- All communication with Phant is carried out over HTTP. So, your device should be acted as HTTP Client.
http://data.sparkfun.com/input/[publicKey]?private_key=[privateKey]&[field1]=[value]&[field2]=[value]
- Phant: Phant.io
Phant is a modular node.js based data logging tool for collecting data from the Internet of Things. It is the open source software that powers data.sparkfun.com and is actively maintained by SparkFun Electronics. Phant is short for elephant. Elephants are known for their remarkable recall ability, so it seemed appropriate to name a data logging project in honour of an animal that never forgets.
analog.io
- 3rd party of data.sparkfun.com
- Graphing front end
analog.io is a full stack IoT web service and hardware platforms where people can create connected devices and share them with the world. It is designed to solve all kinds of world problems from air pollution, improving farm output or studying the bee population. It is really only limited by the user’s imagination. (for more detail)
Registrations
- data.sparkfun.com
To create a data stream, head over to data.sparkfun.com, and click “CREATE”.- Create a Data Stream
* Fields – This comma-separated list of words defines data stream to post a list of unique values.
* Stream Alias – This textbox defines domain name for you Data Stream
- New Stream example: After creating a data Stream, you will confirm URL, Keys for accessing your data stream
Software
Used Lib
- WIZnetInterface Lib. : for Ethernet connectivity of W7500
- DHT Lib. : for DHT11 sensor
Codes flow
- mbed.org repositories: https://developer.mbed.org/users/embeddist/code/Data_Sparkfun_io/
- Configuration Arduino’s I/O pins
/*
*Input Pins, Misc
* D4 – Temp. and Hum. Sensor
* D3 – Push buttom
*/
DHT sensor(D4, DHT11);
DigitalIn triggerPin(D3);
- Configuration Phat Stuff
/*
* Phant Stuffs
* Insert your publicKey
* Insert your privateKey
* Generat Fileds; ‘Files name shoud be same “field name” in Create Stream form’
*/
char publicKey[] = “insert_your_publicKey”;
char privateKey[] = “insert_your_privateKey”;
uint8_t NUM_FIELDS = 2;
char fieldNames1[] = “hum”;
char fieldNames2[] = “temp”;
- Network Configuration : DHCP Client
// Enter a MAC address for your controller below.
uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
printf(“initializing Ethernet\r\n”);
// initializing MAC address
eth.init(mac_addr);
// Check Ethenret Link
if(eth.link() == true) printf(“- Ethernet PHY Link-Done \r\n”);
else printf(“- Ethernet PHY Link- Fail\r\n”);
// Start Ethernet connecting: Trying to get an IP address using DHCP
if (eth.connect()<0) printf(“Fail – Ethernet Connecing”);
// Print your local IP address:
printf(“IP=%s\n\r”,eth.getIPAddress());
printf(“MASK=%s\n\r”,eth.getNetworkMask());
printf(“GW=%s\n\r”,eth.getGateway());
- HTTP Client
/*
* – If the trigger pin (3) goes low, send the data.
* – Get sensing datas by using analogread()
* – Call postData
* – Open socket as TCP Client
* – Try to connet TCP server (data.sparkfun.com); if needs, do DNS clinet for getting IP address of server
* – Make query string based on Phant frame
* – Send query
* – Check for a response from the server, and route it out the serial port.
*/
while(1)
{
if(triggerPin ==0)
{
sensor.readData();
c = sensor.ReadTemperature(CELCIUS);
h = sensor.ReadHumidity();
printf(“Temperature in Celcius: %4.2f”, c);
printf(“Humidity is %4.2f\n”, h, dp, dpf);
- Make Query string over HTTP
http://data.sparkfun.com/input/[publicKey]?private_key=[privateKey]&hum=[value]&temp=[value]
snprintf(http_cmd, http_cmd_sz, “GET /input/%s?private_key=%s&%s=%2.2f&%s=%3.3f HTTP/1.1\r\nHost: data.sparkfun.com\r\nConection: close\r\n\r\n”, publicKey, privateKey, fieldNames1, h, fieldNames2, c);
sock.send_all(http_cmd, http_cmd_sz-1);
Demo
Serial Monitor
- DHCP Clinet message
- Press the button to send query to server.
- Confirm the response message on serial terminal and data.spark.com/your_stream
initializing Ethernet
– Ethernet PHY Link-Done
IP=192.168.11.224
MASK=255.255.255.0
GW=192.168.11.1
Temperature in Celcius: 27.00Humidity is 55.00
Received 299 chars from server:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE
Access-Control-Allow-Headers: X-Requested-With, Phant-Private-Key
Content-Type: text/plain
X-Rate-Limit-Limit: 300
X-Rate-Limit-Remaining: 298
X-Rate-Limit-Reset: 1441353380.898
Date: Fri, 04 Sep 20
Received 299 chars from server:
15 07:46:03 GMT
Transfer-Encoding: chunked
Set-Cookie: SERVERID=phantworker2; path=/
Cache-control: private
https://data.sparkfun.com/office_monitoring
analog.io: import stream from data.sparkfun.com/your_stream
- How to Import Stream
- Click ‘+Import Stream’ button on menu
- Select ‘Sparkfun’ on Host drop box and input Public key of data.sparkfun.com
3.Confirm your Stream
CODE:
/*
*Input Pins, Misc
* D4 – Temp. and Hum. Sensor
* D3 – Push buttom
*/
DHT sensor(D4, DHT11);
DigitalIn triggerPin(D3);
Author: Soohwan Kim
For more Information:
https://www.hackster.io/embeddist/how-to-collect-and-analyze-sensing-data-of-iot-platform-98f6af
COMMENTS