Test C027 with Xively and Ethernet

Dependencies:   C027 EthernetInterface libxively mbed-rtos mbed HTTPClient

Fork of C027_Xively_Ethernet by Chau Vo

main.cpp

Committer:
olympux
Date:
2014-04-27
Revision:
6:f1477813f212
Parent:
4:0bdab35cb164
Child:
7:b2eb8b943b63

File content as of revision 6:f1477813f212:

#include "mbed.h"
#include "C027.h"
#include "EthernetInterface.h"

#define XI_FEED_ID 607813696 // set Xively Feed ID (numerical, no quoutes)
#define XI_API_KEY "DcO8pnBiF4N0xyT9cPeQLggUHuNu7g8dwYhxH6s1qjZwtZm5" // set Xively API key (double-quoted string)
 
#include "xively.h"
#include "xi_err.h"

//Debug is disabled by default
#if 1
//Enable debug
#include <cstdio>
#define DBG(x, ...) std::printf("[main : DBG]"x"\r\n", ##__VA_ARGS__); 
#define WARN(x, ...) std::printf("[main : WARN]"x"\r\n", ##__VA_ARGS__); 
#define ERR(x, ...) std::printf("[main : ERR]"x"\r\n", ##__VA_ARGS__); 

#else
//Disable debug
#define DBG(x, ...) 
#define WARN(x, ...)
#define ERR(x, ...) 

#endif

void xively_test(void const*) {
    /*
     * Setup Ethernet interface
     */
    EthernetInterface eth;
    eth.init(); //Use DHCP
    eth.connect();
    DBG("IP Address is %s", eth.getIPAddress());
    
    /*
     * Setup Xively parameters
     */
    xi_feed_t feed;
    memset(&feed, NULL, sizeof(xi_feed_t));
    
    // channels
    feed.feed_id = XI_FEED_ID;
    feed.datastream_count = 1; // number of channels
    
    // channel settings
    feed.datastreams[0].datapoint_count = 1;
    xi_datastream_t* counter_datastream = &feed.datastreams[0];
    strcpy(counter_datastream->datastream_id, "counter"); // name of channel
    xi_datapoint_t* counter = &counter_datastream->datapoints[0]; // xively channel variable to set value
 
    // create the cosm library context
    xi_context_t* xi_context = xi_create_context(XI_HTTP, XI_API_KEY, feed.feed_id);
 
    // check if everything works
    if (xi_context == NULL)
    {
        DBG("xi_context = NULL");
    }
    
    long unsigned int c = 0; 
    while(1) {     
      xi_set_value_i32(counter, ++c);
        
      DBG("Updating Xively feed %d: %d", XI_FEED_ID, c);
      xi_feed_update(xi_context, &feed);
      
      wait(5);
    }
}

int main()
{
    Thread testTask(xively_test, NULL, osPriorityNormal, 1024 * 4);
    DigitalOut led(LED); // on rev A you should reasign the signal to A0
    while(1) {
        led=!led;
        Thread::wait(1000);
    }

    return 0;
}