ch8_mbed_websocket_client to sockets.mbed.org

Dependencies:   EthernetInterface HTTPD WebSocketClient mbed-rpc mbed-rtos-for-old mbed

main.cpp

Committer:
mbedschool
Date:
2015-02-04
Revision:
0:a24e2b2f8c8f

File content as of revision 0:a24e2b2f8c8f:

#include "mbed.h"
#include "EthernetInterface.h"
#include "HTTPD.h"
#include "Websocket.h"



EthernetInterface *eth;
HTTPD *httpd;


Serial pc(USBTX, USBRX);
InterruptIn probe(p8);
LocalFileSystem local("local");
DigitalOut led1(LED1), led2(LED2),led3(LED3);
Timer timer;
Ticker ticker;

uint32_t low_time = 0;
//uint32_t low_time = 0;

void down();
void up();

void tick()
{
    pc.printf("%d us, %f %%\r\n", low_time, low_time / (30.0 * 1000000));
    low_time = 0;
   
}
 
void down()
{
    probe.rise(&up);
    led1 = 0;
    timer.start();
}

void up()
{
    led1 = 1;
    timer.stop();
    probe.fall(&down);
    
    low_time += timer.read_us();
    timer.reset();
}

void callback_api(int id) {
    int i, n;
    char low_time_buf[256];
    char buf[256];
    
    sprintf( low_time_buf, "%f", low_time / (30.0 * 1000000));
    strcpy(buf, "{"); 
    strcat(buf, "success: true ,");
    strcat(buf, "data: {");
    strcat(buf, "lowpulseoccupancytime: ");
    strcat(buf, low_time_buf);
    strcat(buf, "}");
    strcat(buf, "}");

    n = strlen(buf);
    i = httpd->receive(id, &buf[n], sizeof(buf) - n);
    if (i < 0) return;
    i += n;
    buf[i] = 0;
    printf("API %d %s\r\n", id, buf);
    httpd->send(id, buf, i, "Content-Type: text/plain\r\n");
}

int main() {
    pc.baud(115200);
    pc.printf("Dust Sensor test\r\n");
    probe.fall(&down);
    ticker.attach(tick, 30);
    
    printf("HTTP Server...\r\n");

    eth = new EthernetInterface;
    eth->init("192.168.21.23", "255.255.255.0", "192.168.21.2" );
   // eth->init();

    if (eth->connect()) return -1;
    led3 = 1;
    
    
    printf("Connected to websocket server. \r\n");
    
    
    printf("IP Address is %s\r\n", eth->getIPAddress());
    httpd = new HTTPD;
    httpd->attach("/1/mbed/lpc1768/sensor/dust/sen12291p", &callback_api);
    httpd->attach("/", "/local/");
    httpd->start(80);
    printf("httpd ready\r\n");
    led2 = 1;
     
    Websocket ws("ws://sockets.mbed.org/ws/mbedschool/viewer");
  // Websocket ws("ws://192.168.21.123:8888");
    
    while (!ws.connect());
   // ws.send("echo-protocol");
    while (1) {

        char low_time_buf[256];
        char buf[256];   
        sprintf( low_time_buf, "%f", low_time / (30.0 * 1000000));

        strcpy(buf, "{"); 
        strcat(buf, "\"lowpulseoccupancytime\":");
        strcat(buf, low_time_buf);
        strcat(buf, "}");
        ws.send(buf);
       
        
        wait(1.0);
    } 
    
}