Xively Demo - WIZ550io, W5500 (WIZnet) + Temperature Sensor (DS18B20) EthernetInterfaceW5500 + LPC11U68 Xpresso v2 used

Dependencies:   DS18B20_1wire W5500Interface libxively mbed

Fork of WIZ550io_Xively_Demo by Bongjun Hur

Xively Demo

Board Pic

LPC11U68 + WIZ550io (WIZnet) + DS18B20 Temp Sensor https://31.media.tumblr.com/d63982be5ee62cb7889cde9e685ee757/tumblr_n8s27sY62b1sama12o1_500.jpg

PC Screenshot

/media/uploads/Bongjun/img135.png

main.cpp

Committer:
Bongjun
Date:
2014-09-01
Revision:
13:ab5db87a253a
Parent:
10:6497effa1a26
Child:
14:5a9ba3d8c9ca

File content as of revision 13:ab5db87a253a:

#include "mbed.h"
//#include "WiflyInterface.h"
#include "EthernetInterfaceW5500.h"
#include "xively.h"
#include "xi_err.h"

//#define XI_FEED_ID 273104668 // set Xively Feed ID (numerical, no quoutes)
//#define XI_API_KEY "Your API Key" // set Xively API key (double-quoted string)
#define XI_FEED_ID 614972906 // set Xively Feed ID (numerical, no quoutes)
#define XI_API_KEY "Z2CG4NytDaxrk2LRSViyVVvi4kpWPH3bnrHeby24k8JCBZp1" // set Xively API key (double-quoted string)

//Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);
#define _SENSOR

#ifdef _SENSOR // if there is sensor.
#include "DS18B20.h"
//DS18B20Sensor sensor(P1_25);
DS18B20 sensor(P1_25, DS18B20::RES_12_BIT); // Dallas 1-wire
#endif

//#define _DHCP

/* wifly object where:
*     - p9 and p10 are for the serial communication
*     - p25 is for the reset pin
*     - p26 is for the connection status
*     - "mbed" is the ssid of the network
*     - "password" is the password
*     - WPA is the security
*/
//WiflyInterface eth(p9, p10, p25, p26, "ssid", "passwd", WPA);

int main()
{
#if defined(TARGET_LPC1114)
    SPI spi(dp2, dp1, dp6); // mosi, miso, sclk
    EthernetInterfaceW5500 eth(&spi, dp25, dp26); // spi, cs, reset

#elif defined(TARGET_LPC1768)
    SPI spi(p11, p12, p13); // mosi, miso, sclk
    EthernetInterfaceW5500 eth(&spi, p14, p15); // spi, cs, reset

#elif defined(TARGET_LPC11U68)
    SPI spi(P0_9, P0_8, P1_29); // mosi, miso, sclk
//WIZnetInterface eth(&spi, P0_2, P1_25); // spi, cs, reset
//SPI spi(p5, p6, p7); // mosi, miso, sclk
    EthernetInterfaceW5500 eth(&spi, P0_2, P1_28);//, nRESET(p9); // reset pin is dummy, don't affect any pin of WIZ550io
    spi.format(8,0); // 8bit, mode 0
    spi.frequency(7000000); // 7MHz
    wait(1); // 1 second for stable state

#endif
/*
    int s = eth.init(); //Use DHCP

    if( s != NULL ) {
        printf( "Could not initialise. Will halt!\n" );
        exit( 0 );
    }

    s = eth.connect();

    if( s == false ) {
        printf( "Could not connect. Will halt!\n" );
        exit( 0 );
    } else {
        printf( "IP: %s\n", eth.getIPAddress() );
    }
*/

#ifdef _DHCP // didn't test yet in DHCP

    eth.init(); //Use DHCP
    eth.connect();
    //printf("IP Address is %s\n\r", eth.getIPAddress());
    printf("Initialized, MAC: %s\n", eth.getMACAddress());
    printf("Connected, IP: %s, MASK: %s, GW: %s\n",
           eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());

#else
    // as your env. change to real IP address and so on.
    int ret = eth.init("222.98.173.211", "255.255.255.192", "222.98.173.254");
    if (!ret) {
        printf("Initialized, MAC: %s\n", eth.getMACAddress());
        printf("Connected, IP: %s, MASK: %s, GW: %s\n",
               eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
    } else {
        printf("Error eth.init() - ret = %d\n", ret);
        return -1;
    }
#endif

// Sensor variables
#ifdef _SENSOR // if there is sensor.
    char sensorBuf[25];
//    uint8_t result;
//    uint8_t sensor_cnt;
//Before using this sensor, should called sensor.count() once.
//    sensor_cnt = sensor.count();
   printf("DS18B20 Configuration\n\r");
   DS18B20::ROM_Code_t ROM_Code;
   sensor.ReadROM(&ROM_Code);
   printf("Family code: 0x%X\n\r", ROM_Code.BYTES.familyCode);
   printf("Serial Number: ");
   for (unsigned i = 6; i != 0; --i) {
       printf("%02X%s", ROM_Code.BYTES.serialNo[i-1], (i != 1)?":":"\r\n");
   }
   printf("CRC: 0x%X\r\n", ROM_Code.BYTES.CRC);
/*
   printf("\n\rRunning temperature conversion...\n\r");
   while (1) {
       printf("Temperature is: %.4fC\n\r", sensor.GetTemperature());
       wait(10);
   }
*/    
#endif

    xi_feed_t feed;
    memset( &feed, NULL, sizeof( xi_feed_t ) );

    feed.feed_id = XI_FEED_ID;
    feed.datastream_count = 1;

    feed.datastreams[0].datapoint_count = 1;
    xi_datastream_t* orientation_datastream = &feed.datastreams[0];
    strcpy( orientation_datastream->datastream_id, "Channel_Test1" );
    xi_datapoint_t* current_orientation = &orientation_datastream->datapoints[0];

    // 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 ) {
        return -1;
    }

    while(1) {
#ifdef _SENSOR // if there is sensor.
/*
        if (sensor_cnt) {
            result = sensor.startReading(true);     // start sensor readings and wait
            if (result == DS18X20_OK) {
                sensor.getReading(sensorBuf, 0);         // get result into buf
                xi_set_value_str( current_orientation, sensorBuf );
            }
            else
            {
                xi_set_value_str( current_orientation, "0" );
                }
            
        } else {
            printf("No Sensor");
        }
*/
        // use New library for DS18B20
        sprintf(sensorBuf,"%4.2f", sensor.GetTemperature());
        xi_set_value_str( current_orientation, sensorBuf );

#else
        xi_set_value_str( current_orientation, "27" );
#endif

        printf( "update..." );
        // send to xively server
        xi_feed_update( xi_context, &feed );
        printf( "done...\n" );
        wait( 5.0 );
    }
}