-

Dependencies:   EthernetInterfaceWithHostname HygroClip2-LPC mbed-rtos mbed

Fork of TCPSocket_HelloWorld by mbed official

Committer:
wolfsberger
Date:
Wed May 11 09:25:37 2016 +0000
Revision:
21:b3676a4fcf2b
Parent:
20:526d6c8c2c8d
Fixed the pipeline rupture

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
wolfsberger 17:85a4dfbe02cb 2 #include "rtos.h"
donatien 0:bb128f0e952f 3 #include "EthernetInterface.h"
wolfsberger 17:85a4dfbe02cb 4 #include "HygroClip2.h"
wolfsberger 17:85a4dfbe02cb 5
wolfsberger 17:85a4dfbe02cb 6 EthernetInterface eth;
wolfsberger 17:85a4dfbe02cb 7 DigitalOut led1(LED1);
wolfsberger 17:85a4dfbe02cb 8 DigitalOut led2(LED2);
wolfsberger 17:85a4dfbe02cb 9 DigitalOut led3(LED3);
wolfsberger 17:85a4dfbe02cb 10 DigitalOut led4(LED4);
wolfsberger 17:85a4dfbe02cb 11
wolfsberger 17:85a4dfbe02cb 12 typedef struct {
wolfsberger 17:85a4dfbe02cb 13 float temperature;
wolfsberger 17:85a4dfbe02cb 14 float humidity;
wolfsberger 17:85a4dfbe02cb 15 float dewpoint;
wolfsberger 17:85a4dfbe02cb 16 } SensorData;
wolfsberger 17:85a4dfbe02cb 17
wolfsberger 17:85a4dfbe02cb 18 Mail<SensorData, 32> sensorMailBox;
wolfsberger 17:85a4dfbe02cb 19
wolfsberger 17:85a4dfbe02cb 20 void network(void const * arg)
wolfsberger 17:85a4dfbe02cb 21 {
wolfsberger 17:85a4dfbe02cb 22 while(true)
wolfsberger 17:85a4dfbe02cb 23 {
wolfsberger 17:85a4dfbe02cb 24 osEvent event = sensorMailBox.get();
wolfsberger 17:85a4dfbe02cb 25 if (event.status == osEventMail)
wolfsberger 17:85a4dfbe02cb 26 {
wolfsberger 17:85a4dfbe02cb 27 led3 = 1;
wolfsberger 17:85a4dfbe02cb 28 SensorData * data = static_cast<SensorData*>(event.value.p);
wolfsberger 17:85a4dfbe02cb 29
wolfsberger 17:85a4dfbe02cb 30 TCPSocketConnection sock;
wolfsberger 17:85a4dfbe02cb 31 int connected = sock.connect("192.168.100.100", 1337);
wolfsberger 17:85a4dfbe02cb 32 if (connected == 0)
wolfsberger 20:526d6c8c2c8d 33 {
wolfsberger 19:d49dacbf64de 34 const size_t bufferLenght = 300;
wolfsberger 19:d49dacbf64de 35 char transmissionBuffer[bufferLenght];
wolfsberger 19:d49dacbf64de 36 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);
wolfsberger 17:85a4dfbe02cb 37 printf(transmissionBuffer);
wolfsberger 20:526d6c8c2c8d 38 sock.send_all(transmissionBuffer, lenght);
wolfsberger 21:b3676a4fcf2b 39 wait(0.2f); // To avoid a pipeline rupture
wolfsberger 20:526d6c8c2c8d 40 }
wolfsberger 20:526d6c8c2c8d 41 else
wolfsberger 20:526d6c8c2c8d 42 {
wolfsberger 20:526d6c8c2c8d 43 printf("Failed to connect\n");
wolfsberger 17:85a4dfbe02cb 44 }
wolfsberger 17:85a4dfbe02cb 45 sock.close();
wolfsberger 17:85a4dfbe02cb 46
wolfsberger 17:85a4dfbe02cb 47 sensorMailBox.free(data);
wolfsberger 17:85a4dfbe02cb 48 led3 = 0;
wolfsberger 17:85a4dfbe02cb 49 }
wolfsberger 17:85a4dfbe02cb 50 }
wolfsberger 17:85a4dfbe02cb 51 }
donatien 0:bb128f0e952f 52
emilmont 7:65188f4a8c25 53 int main() {
wolfsberger 17:85a4dfbe02cb 54 // Start ethernet module
wolfsberger 19:d49dacbf64de 55 printf("Connecting... ");
wolfsberger 19:d49dacbf64de 56 int initOK = eth.init("GTSJan");
wolfsberger 17:85a4dfbe02cb 57 if (initOK != 0)
wolfsberger 17:85a4dfbe02cb 58 {
wolfsberger 19:d49dacbf64de 59 printf("INIT FAILED\n");
wolfsberger 19:d49dacbf64de 60 while(true);
wolfsberger 17:85a4dfbe02cb 61 }
wolfsberger 17:85a4dfbe02cb 62
donatien 0:bb128f0e952f 63
wolfsberger 17:85a4dfbe02cb 64 // Connect to network
wolfsberger 17:85a4dfbe02cb 65 int connectOK = eth.connect();
wolfsberger 17:85a4dfbe02cb 66 if (connectOK != 0)
wolfsberger 17:85a4dfbe02cb 67 {
wolfsberger 19:d49dacbf64de 68 printf("CONNECT FAILED\n");
wolfsberger 17:85a4dfbe02cb 69 while(true);
wolfsberger 17:85a4dfbe02cb 70 }
wolfsberger 17:85a4dfbe02cb 71 led1 = 1;
donatien 0:bb128f0e952f 72
wolfsberger 19:d49dacbf64de 73 printf( "Connected: \n"
wolfsberger 19:d49dacbf64de 74 "============================================================\n"
wolfsberger 19:d49dacbf64de 75 "| IP-Address: %s\n"
wolfsberger 19:d49dacbf64de 76 "| Subnet-Mask: %s\n"
wolfsberger 19:d49dacbf64de 77 "| Gateway: %s\n"
wolfsberger 19:d49dacbf64de 78 "| MAC-Address: %s\n"
wolfsberger 19:d49dacbf64de 79 "============================================================\n\n",
wolfsberger 19:d49dacbf64de 80 eth.getIPAddress(),
wolfsberger 19:d49dacbf64de 81 eth.getNetworkMask(),
wolfsberger 19:d49dacbf64de 82 eth.getGateway(),
wolfsberger 19:d49dacbf64de 83 eth.getMACAddress());
wolfsberger 19:d49dacbf64de 84
wolfsberger 17:85a4dfbe02cb 85 // Create and start ethernet task
wolfsberger 17:85a4dfbe02cb 86 Thread transmissionTask(network);
wolfsberger 17:85a4dfbe02cb 87 HygroClip2 sensor(p9,p10);
emilmont 7:65188f4a8c25 88
wolfsberger 19:d49dacbf64de 89 printf("Waiting for HygroClip2... ");
wolfsberger 17:85a4dfbe02cb 90 while(!sensor.isDataValid())
wolfsberger 17:85a4dfbe02cb 91 {
wolfsberger 17:85a4dfbe02cb 92 sensor.update();
wolfsberger 17:85a4dfbe02cb 93 Thread::wait(500);
emilmont 7:65188f4a8c25 94 }
wolfsberger 19:d49dacbf64de 95 printf("OK\n");
wolfsberger 17:85a4dfbe02cb 96 led2 = 1;
donatien 0:bb128f0e952f 97
wolfsberger 17:85a4dfbe02cb 98 while(true)
wolfsberger 17:85a4dfbe02cb 99 {
wolfsberger 17:85a4dfbe02cb 100 led4 = 1;
wolfsberger 17:85a4dfbe02cb 101 if (sensor.isDataValid())
wolfsberger 17:85a4dfbe02cb 102 {
wolfsberger 20:526d6c8c2c8d 103 SensorData * data = sensorMailBox.alloc(1000);
wolfsberger 20:526d6c8c2c8d 104 if (data != NULL)
wolfsberger 20:526d6c8c2c8d 105 {
wolfsberger 20:526d6c8c2c8d 106 data->temperature = sensor.getTemperature();
wolfsberger 20:526d6c8c2c8d 107 data->humidity = sensor.getHumidity();
wolfsberger 20:526d6c8c2c8d 108 data->dewpoint = sensor.getDewPoint();
wolfsberger 20:526d6c8c2c8d 109 sensorMailBox.put(data);
wolfsberger 20:526d6c8c2c8d 110 }
wolfsberger 20:526d6c8c2c8d 111 else
wolfsberger 20:526d6c8c2c8d 112 {
wolfsberger 20:526d6c8c2c8d 113 printf("Mail is full");
wolfsberger 20:526d6c8c2c8d 114 }
wolfsberger 17:85a4dfbe02cb 115 }
wolfsberger 17:85a4dfbe02cb 116 sensor.update();
wolfsberger 17:85a4dfbe02cb 117 Thread::wait(50);
wolfsberger 17:85a4dfbe02cb 118 led4 = 0;
wolfsberger 20:526d6c8c2c8d 119 Thread::wait(19950);
wolfsberger 17:85a4dfbe02cb 120 }
donatien 0:bb128f0e952f 121 }