-
Dependencies: EthernetInterfaceWithHostname HygroClip2-LPC mbed-rtos mbed
Fork of TCPSocket_HelloWorld by
main.cpp@21:b3676a4fcf2b, 2016-05-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |