Work with nodejs server: https://github.com/bjo3rn/idd-examples/tree/ben-node-demo/web/nodeServerHTTPSocket

Dependencies:   HTTPClient WebSocketClient cc3000_hostdriver_mbedsocket mbed

Fork of CC3000_demo by Ben Zhang

main.cpp

Committer:
nebgnahz
Date:
2014-11-05
Revision:
18:922b1ad5c826
Parent:
17:97c355870263

File content as of revision 18:922b1ad5c826:

/**
 *  \brief CS294-84 demo \author Ben Zhang, Antonio Iannopollo
 *
 * This sampel code illustrates how to connect the mbed KL25Z platform to internet
 * thorugh the CC3000 wifi breakout board (http://www.adafruit.com/product/1469).
 * Connections between the KL25Z and the CC3000 are made according to the
 * guide at https://learn.adafruit.com/adafruit-cc3000-wifi -- KL25Z and arduino
 * UNO are pin to pin compatible --
 *
 * This application uses the following libraries:
 * - cc3000_hostdriver_mbedsocket
 *   (http://developer.mbed.org/users/Kojto/code/cc3000_hostdriver_mbedsocket/)
 * - HTTPClient (http://developer.mbed.org/users/donatien/code/HTTPClient/)
 */

#include <string>

#include "cc3000.h"
#include "mbed.h"
#include "HTTPClient.h"

const string POLLING_URL = "http://universe.eecs.berkeley.edu:8080/value";
const string UPDATE_URL = "http://universe.eecs.berkeley.edu:8080/update?value=";

// KL25Z wifi connection
// we need to define connection pins for:
// - IRQ      => (pin D3)
// - Enable   => (pin D5)
// - SPI CS   => (pin D10)
// - SPI MOSI => (pin D11)
// - SPI MISO => (pin D12)
// - SPI CLK  => (pin D13)
// plus wifi network SSID, password, security level and smart-configuration flag.
mbed_cc3000::cc3000 wifi(D3, D5, D10, SPI(D11, D12, D13),
                         "SSID", "PASSWORD", WPA2, false);

// create an http instance
HTTPClient http;

// str is used to hold the response data
char str[512];
char url[80];

// setup the serial connection, and LEDs
Serial pc(USBTX, USBRX);
DigitalOut led_green(LED_GREEN);
PwmOut led_red(LED_RED);

Ticker reportSensorTicker;
bool shouldReadSensor;
int sensorData;

void readSensor() {
    // avoid doing much work here (in the interrupt).
    // put the actual sensor reading in the main function
    shouldReadSensor = true;
}

int main() {
    pc.printf("CC3000 Nodejs Demo Starts\r\n");
    // by default, we make the LED red
    led_red = 0;
    led_green = 1;

    // reset the readsensor bool to false so we don't read the data.
    shouldReadSensor = false;
    sensorData = 0;
    // Every 5 second, we sample the sensor and report the data.
    reportSensorTicker.attach(&readSensor, 5.0); 
    
    wifi.init();

    while(1) {
        // continuosly check connection status
        if(wifi.is_connected() == false) {
            // try to connect
            if (wifi.connect() == -1) {
                pc.printf("Failed to connect."
                          "Please verify connection details and try again.\r\n");
                continue;
            } else {

                pc.printf("IP address: %s \r\n", wifi.getIPAddress());
                // once connected, turn green LED on and red LED off
                led_red = 1;
                led_green = 0;
            }
        }

        // update the value when shouldReadSensor is true          
        if (shouldReadSensor == true) {
            shouldReadSensor = false;
            sensorData += 10;
            char url[128];
            snprintf(url, sizeof(url), "%s%d", UPDATE_URL.c_str(), sensorData);
            int ret = http.get(url, str, 128);
            if (!ret) {
                pc.printf("sending sensorData %d, response: %s\r\n", sensorData, str);
            } else {
                pc.printf("[PUSH] Error - ret = %d - HTTP %d\r\n", ret, http.getHTTPResponseCode());
            }
        }
        
        // everytime we do HTTP polling
        int ret = http.get(POLLING_URL.c_str(), str, 128);
        if (!ret) {
            int value = atoi(str);
            led_red = 1.0 * value / 255;
        } else {
            pc.printf("[POLL] Error - ret = %d - HTTP %d\r\n", ret, http.getHTTPResponseCode());
        }
        wait(0.1);
    }
}