-

Dependencies:   EthernetInterfaceWithHostname HygroClip2-LPC mbed-rtos mbed

Fork of TCPSocket_HelloWorld by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "EthernetInterface.h"
00004 #include "HygroClip2.h"
00005 
00006 EthernetInterface eth;
00007 DigitalOut led1(LED1);
00008 DigitalOut led2(LED2);
00009 DigitalOut led3(LED3);
00010 DigitalOut led4(LED4);
00011 
00012 typedef struct {
00013     float temperature;
00014     float humidity;
00015     float dewpoint;
00016 } SensorData;
00017 
00018 Mail<SensorData, 32> sensorMailBox;
00019 
00020 void network(void const * arg)
00021 {
00022     while(true)
00023     {
00024         osEvent event = sensorMailBox.get();
00025         if (event.status == osEventMail)
00026         {
00027             led3 = 1;
00028             SensorData * data = static_cast<SensorData*>(event.value.p);
00029             
00030             TCPSocketConnection sock;
00031             int connected = sock.connect("192.168.100.100", 1337);
00032             if (connected == 0)
00033             {                
00034                 const size_t bufferLenght = 300;
00035                 char transmissionBuffer[bufferLenght];
00036                 int lenght = snprintf(transmissionBuffer, bufferLenght, "GET /relay?temperature=%.2f&humidity=%.2f&dewpoint=%.2f&id=1 HTTP/1.0\n\n", data->temperature, data->humidity,data->dewpoint);
00037                 printf(transmissionBuffer);
00038                 sock.send_all(transmissionBuffer, lenght);
00039                 wait(0.2f); // To avoid a pipeline rupture
00040             }
00041             else
00042             {
00043                 printf("Failed to connect\n");
00044             }
00045             sock.close();
00046             
00047             sensorMailBox.free(data);
00048             led3 = 0;
00049         }        
00050     }
00051 }
00052 
00053 int main() {
00054     // Start ethernet module    
00055     printf("Connecting... ");
00056     int initOK = eth.init("GTSJan");
00057     if (initOK != 0)
00058     {
00059         printf("INIT FAILED\n");
00060         while(true);
00061     }
00062     
00063     
00064     // Connect to network
00065     int connectOK = eth.connect();
00066     if (connectOK != 0)
00067     {
00068         printf("CONNECT FAILED\n");
00069         while(true);   
00070     }
00071     led1 = 1;
00072     
00073     printf( "Connected: \n"
00074             "============================================================\n"
00075             "| IP-Address:    %s\n"
00076             "| Subnet-Mask:   %s\n"            
00077             "| Gateway:       %s\n"
00078             "| MAC-Address:   %s\n"
00079             "============================================================\n\n",
00080             eth.getIPAddress(),
00081             eth.getNetworkMask(),
00082             eth.getGateway(),
00083             eth.getMACAddress());
00084     
00085     // Create and start ethernet task
00086     Thread transmissionTask(network);
00087     HygroClip2 sensor(p9,p10);
00088     
00089     printf("Waiting for HygroClip2... ");
00090     while(!sensor.isDataValid())
00091     {
00092         sensor.update();
00093         Thread::wait(500);
00094     }
00095     printf("OK\n");
00096     led2 = 1;
00097     
00098     while(true)
00099     {
00100         led4 = 1;        
00101         if (sensor.isDataValid())
00102         {
00103             SensorData * data = sensorMailBox.alloc(1000);
00104             if (data != NULL)
00105             {
00106                 data->temperature = sensor.getTemperature();
00107                 data->humidity = sensor.getHumidity();
00108                 data->dewpoint = sensor.getDewPoint();
00109                 sensorMailBox.put(data);
00110             }
00111             else
00112             {
00113                 printf("Mail is full");
00114             }
00115         }
00116         sensor.update();
00117         Thread::wait(50);
00118         led4 = 0;
00119         Thread::wait(19950);
00120     }
00121 }