Simple IoT demo over Ethernet using the legacy network libraries

Dependencies:   EthernetNetIf mbed DNSResolver

main.cpp

Committer:
emilmont
Date:
2012-02-23
Revision:
0:db53174490c3

File content as of revision 0:db53174490c3:

#include "mbed.h"
#include "Websocket.h"
#define MEAN_VALUE_MIC 32500

Serial pc(USBTX, USBRX);
Timer tmr;

Websocket ws("ws://sockets.mbed.org/ws/sensors/wo");

AnalogIn light_pin(p19);
AnalogIn mic_pin(p18);

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
void notify(int a, int b, int c) {
    led1 = a;
    led2 = b;
    led3 = c;
}

int main() {
    notify(1, 0, 0);
    
    //unsigned short light;
    char json_str[100];
    int press;
    double temp;
    int light;
    unsigned short mic_mean;
    unsigned short mic = 0;

    char recv[128];
    while (1) {

        while (!ws.connect()) {
            pc.printf("cannot connect websocket, retrying in one second\r\n");
            wait(1.0);
        }
        notify(0, 0, 1);

        pc.printf("Connected\r\n");

        tmr.start();
        while (1) {

            if (tmr.read() > 0.5) {

                //pressure
                //press = scp1000.readPressure();
                press = 10;

                //temperature
                //temp = scp1000.readTemperature();
                temp = 10.1;

                //light
                light = light_pin.read_u16()/480;

                //microphone
                mic_mean = 0;
                for (double i = 0; i < 200; i++) {
                    mic = mic_pin.read_u16();
                    mic = (mic > MEAN_VALUE_MIC) ? mic : MEAN_VALUE_MIC + (MEAN_VALUE_MIC - mic);
                    mic_mean = (mic_mean*i + mic)/(i+1);
                }
                pc.putc('!');
                
                sprintf(json_str, "{\"id\":\"eth_env\",\"p\":\"%d\",\"t\":\"%d\",\"l\":\"%d\",\"m\":\"%d\"}", (int)press, (int)temp, (int)(140 - light), mic_mean);
                ws.send(json_str);
                
                led4 = !led4;
                
                if (ws.read(recv)) {
                    pc.printf(".");
                    pc.printf("recv: %s\r\n", recv);
                }

                tmr.start();
            }

            Net::poll();
        }
    }
}