a demo to post your sensor data from ARCH GPRS to Xively

Dependencies:   GPRS mbed

Fork of USB2UART by Yihui Xiong

ARCH GPRS With Xively

IOT Architecture

  • Xively is an on-line database service allowing developers to connect sensor-derived data (e.g. energy and environment data from objects, devices & buildings) to the Web and to build their own applications based on that data,to know more, visit https://xively.com/
  • Here, we use ARCH GPRS to post our sensor data(temperature/light/humidity etc.) to Xively.

ARCH GPRS Introduction

ARCH GPRS

  • Arch GPRS is a wireless network module based on EG-10, it can achive remote data colletion function to communicate with outside world by GPRS network.
  • Arch GPRS has standard Arduino interface and Grove connectors. It’s convenient to connect existing Shields and Grove products to Arch GPRS.
  • You can use the solar panel to charge for battery, and own to its low-power design, so Arch GPRS can work normally in outdoor.
  • For more information, please visit http://www.seeedstudio.com/depot/arch-gprs-p-1657.html?cPath=6_11

Code

  • Description: this demo is used as posting value of sound sensor to Xively every 10 seconds.
  • Attention: you need to replace the PHONE_NUMBER/FEED_ID/SENSOR_ID/XIVELY_KEY with yours.

main.cpp

#include "gprs.h"
 
#define PHONE_NUMBER    "139****7382"
#define IP_ADDRSS       "216.52.233.120" //api.xively.com
#define PORT            "80" //port addr
#define FEED_ID         "your feeed ID"
#define SENSOR_ID       "your sensor ID"
#define XIVELY_KEY      "your Xively Key"
#define REQUEST_LENGTH  36
#define DATA_LENGTH     90
#define HEAD_LEN        270
 
#define NETWORK_APN     "CMNET"  //replace APN in your country
 
#define PINPWR          P1_2    // power on EG 10, low enable
#define PINONOFF        P1_7    // switch of EG10, low enable, low for 2s to turn on EG10
 
DigitalOut eg10_pwr(PINPWR);
DigitalOut eg10_on(PINONOFF);
GPRS gprs(USBTX, USBRX,115200,PHONE_NUMBER);
AnalogIn soundSensor(P0_11);
 
void EG10_PowerUp(void)
{
    eg10_pwr = 1;
    eg10_on  = 1;
    wait(2);
    eg10_pwr = 0;
    eg10_on = 0;
    wait(2);
    eg10_on = 1;
    wait(2);
}
 
int putDataToXively(float sensorValue)
{
    char request[REQUEST_LENGTH];
    char dataStream[DATA_LENGTH];
    char head[HEAD_LEN];
    snprintf(request,REQUEST_LENGTH,"PUT /v2/feeds/%s HTTP/1.1\r\n",FEED_ID);
    snprintf(dataStream,DATA_LENGTH,"{\"version\":\"1.0.0\", \"datastreams\" : [{ \"id\" : \"%s\", \"current_value\" : \"%f\"}]}\r\n",SENSOR_ID,sensorValue);
    int dataLen = strlen(dataStream);
    snprintf(head,HEAD_LEN,"%sHost: api.xively.com\r\nX-ApiKey: %s\r\nUser-Agent: Xively-Arduino-Lib/1.0\r\nContent-Length: %d\r\n\r\n%s",request,XIVELY_KEY,dataLen,dataStream);
    if(0 != gprs.networkInit(NETWORK_APN,NULL,NULL)){ //APN,User,PassWd
        return -1;    
    }
    if(0 != gprs.connectTCP(IP_ADDRSS,PORT)) {
        goto STOP;
    }
    wait(5);
    if(0 != gprs.sendTCPData(head)) {
        goto STOP;
    }
STOP:
    gprs.closeTCP();
    return 0;
}
 
int main()
{
    EG10_PowerUp();
    while(0 != gprs.init()) {
        wait(2);
    }
    while(1) {
        putDataToXively(10*soundSensor.read());
        wait(10);
    }
}

Files at this revision

API Documentation at this revision

Comitter:
yihui
Date:
Wed Dec 04 01:28:54 2013 +0000
Parent:
0:8c4eea221dcf
Child:
2:427b69ad737c
Commit message:
settings changed callback function is merged into official USB lib, switch to use official USB lib

Changed in this revision

USBDevice.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/USBDevice.lib	Wed Oct 30 02:01:50 2013 +0000
+++ b/USBDevice.lib	Wed Dec 04 01:28:54 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/yihui/code/USBDevice/#01040319e35c
+http://mbed.org/users/mbed_official/code/USBDevice/#849c0c0f2769
--- a/main.cpp	Wed Oct 30 02:01:50 2013 +0000
+++ b/main.cpp	Wed Dec 04 01:28:54 2013 +0000
@@ -7,6 +7,7 @@
 
 Serial uart(USBTX, USBRX);
 USBSerial pc;
+DigitalOut led(LED2);
 
 // Called by ISR
 void settingsChanged(int baud, int bits, int parity, int stop)
@@ -23,6 +24,7 @@
 
 int main()
 {
+    led = 1;
     pc.attach(settingsChanged);
     
     while (1) {