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:
lawliet
Date:
Fri Jan 10 06:01:05 2014 +0000
Parent:
2:427b69ad737c
Child:
4:430799dc43e9
Commit message:
Initial Version

Changed in this revision

GPRS.lib Show annotated file Show diff for this revision Revisions of this file
USBDevice.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GPRS.lib	Fri Jan 10 06:01:05 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/lawliet/code/GPRS/#48ee24a4b0f3
--- a/USBDevice.lib	Wed Dec 25 03:04:09 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/mbed_official/code/USBDevice/#849c0c0f2769
--- a/main.cpp	Wed Dec 25 03:04:09 2013 +0000
+++ b/main.cpp	Fri Jan 10 06:01:05 2014 +0000
@@ -1,46 +1,64 @@
-/**
- * USB to UART Bridge
- */
- 
-#include "mbed.h"
-#include "USBSerial.h"
+#include "gprs.h"
 
-Serial uart(USBTX, USBRX);
-USBSerial pc;
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
+#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 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);
 
-// Called by ISR
-void settingsChanged(int baud, int bits, int parity, int stop)
+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)
 {
-    const Serial::Parity parityTable[] = {Serial::None, Serial::Odd, Serial::Even, Serial::Forced0, Serial::Forced1};
-    
-    
-    led1 = 1;
-    if (stop != 2) {
-        stop = 1;   // stop bit(s) = 1 or 1.5
+    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.connectTCP(IP_ADDRSS,PORT)) {
+        goto STOP;
     }
-    uart.baud(baud);
-    uart.format(bits, parityTable[parity], stop);
-    led1 = 0;
+    wait(5);
+    if(0 != gprs.sendTCPData(head)) {
+        goto STOP;
+    }
+STOP:
+    gprs.closeTCP();
+    return 0;
 }
 
 int main()
 {
-    pc.attach(settingsChanged);
-    
-    while (1) {
-        while (uart.readable()) {
-            led2 = 1;
-            pc.putc(uart.getc());
-            led2 = 0;
-        }
-        
-        while (pc.readable()) {
-            led3 = 1;
-            uart.putc(pc.getc());
-            led3 = 0;
-        }
+    EG10_PowerUp();
+    while(0 != gprs.init()) {
+        wait(2);
+    }
+    while(1) {
+        putDataToXively(10*soundSensor.read());
+        wait(10);
     }
 }