Thermometer connected to internet

Dependencies:   BME280 EthernetInterface FXOS8700Q HTTPClient-wolfSSL NTPClient NetworkAPI OAuth4Tw TSL2561_I2C eCompass_FPU_Lib mbed-rtos mbed wolfSSL

Fork of TCP_Server_Example by Roy van Dam

Committer:
zeus3110
Date:
Sun Sep 27 11:04:54 2015 +0000
Revision:
12:12369ee344ab
Network thermometer test program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zeus3110 12:12369ee344ab 1 #include "EnvServer.h"
zeus3110 12:12369ee344ab 2 #include "Sensor.h"
zeus3110 12:12369ee344ab 3
zeus3110 12:12369ee344ab 4 Select select;
zeus3110 12:12369ee344ab 5 tcp::Socket server;
zeus3110 12:12369ee344ab 6 tcp::Socket client[MAX_CLIENTS];
zeus3110 12:12369ee344ab 7 tcp::Socket *socket = NULL;
zeus3110 12:12369ee344ab 8
zeus3110 12:12369ee344ab 9 void EnvServer(void const *arg)
zeus3110 12:12369ee344ab 10 {
zeus3110 12:12369ee344ab 11 int result = 0;
zeus3110 12:12369ee344ab 12 int index = 0;
zeus3110 12:12369ee344ab 13 int num=0;
zeus3110 12:12369ee344ab 14 char SendBuf[16];
zeus3110 12:12369ee344ab 15 network::Buffer buffer(256);
zeus3110 12:12369ee344ab 16 //std::string message("Hello world!");
zeus3110 12:12369ee344ab 17
zeus3110 12:12369ee344ab 18 // Configure the server socket (assume everty thing works)
zeus3110 12:12369ee344ab 19 server.open();
zeus3110 12:12369ee344ab 20 server.bind(WAIT_PORT);
zeus3110 12:12369ee344ab 21 server.listen(MAX_CLIENTS);
zeus3110 12:12369ee344ab 22 printf("Start waiting ...\r\n");
zeus3110 12:12369ee344ab 23
zeus3110 12:12369ee344ab 24 // Add sockets to the select api
zeus3110 12:12369ee344ab 25 select.set(&server, Select::Read);
zeus3110 12:12369ee344ab 26 for (index = 0; index < MAX_CLIENTS; index++) {
zeus3110 12:12369ee344ab 27 select.set(&client[index], Select::Read);
zeus3110 12:12369ee344ab 28 }
zeus3110 12:12369ee344ab 29
zeus3110 12:12369ee344ab 30 do {
zeus3110 12:12369ee344ab 31 // Wait for activity
zeus3110 12:12369ee344ab 32 result = select.wait();
zeus3110 12:12369ee344ab 33 if (result < -1) {
zeus3110 12:12369ee344ab 34 printf("Failed to select\n\r");
zeus3110 12:12369ee344ab 35 break;
zeus3110 12:12369ee344ab 36 }
zeus3110 12:12369ee344ab 37
zeus3110 12:12369ee344ab 38 // Get the first socket
zeus3110 12:12369ee344ab 39 socket = (tcp::Socket *)select.getReadable();
zeus3110 12:12369ee344ab 40
zeus3110 12:12369ee344ab 41 for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
zeus3110 12:12369ee344ab 42 // Check if there was a connection request.
zeus3110 12:12369ee344ab 43 if (socket->getHandle() == server.getHandle()) {
zeus3110 12:12369ee344ab 44 // Find an unused client
zeus3110 12:12369ee344ab 45 for (index = 0; index < MAX_CLIENTS; index++) {
zeus3110 12:12369ee344ab 46 if (client[index].getStatus() == network::Socket::Closed) {
zeus3110 12:12369ee344ab 47 break;
zeus3110 12:12369ee344ab 48 }
zeus3110 12:12369ee344ab 49 }
zeus3110 12:12369ee344ab 50
zeus3110 12:12369ee344ab 51 // Maximum connections reached
zeus3110 12:12369ee344ab 52 if (index == MAX_CLIENTS) {
zeus3110 12:12369ee344ab 53 printf("Maximum connections reached\n\r");
zeus3110 12:12369ee344ab 54 continue;
zeus3110 12:12369ee344ab 55 }
zeus3110 12:12369ee344ab 56
zeus3110 12:12369ee344ab 57 // Accept the client
zeus3110 12:12369ee344ab 58 socket->accept(client[index]);
zeus3110 12:12369ee344ab 59 printf("Client connected %s:%d\n\r",
zeus3110 12:12369ee344ab 60 client[index].getRemoteEndpoint().getAddress().toString().c_str(),
zeus3110 12:12369ee344ab 61 client[index].getRemoteEndpoint().getPort());
zeus3110 12:12369ee344ab 62
zeus3110 12:12369ee344ab 63 // Send a nice message to the client
zeus3110 12:12369ee344ab 64 //client[index].write((void *)message.data(), message.size());
zeus3110 12:12369ee344ab 65 continue;
zeus3110 12:12369ee344ab 66 }
zeus3110 12:12369ee344ab 67
zeus3110 12:12369ee344ab 68 // It was not the server socket, so it must be a client talking to us.
zeus3110 12:12369ee344ab 69 num=socket->read(buffer);
zeus3110 12:12369ee344ab 70 switch (num) {
zeus3110 12:12369ee344ab 71 case 0:
zeus3110 12:12369ee344ab 72 // Remote end disconnected
zeus3110 12:12369ee344ab 73 printf("Client disconnected %s:%d\n\r",
zeus3110 12:12369ee344ab 74 socket->getRemoteEndpoint().getAddress().toString().c_str(),
zeus3110 12:12369ee344ab 75 socket->getRemoteEndpoint().getPort());
zeus3110 12:12369ee344ab 76
zeus3110 12:12369ee344ab 77 // Close socket
zeus3110 12:12369ee344ab 78 socket->close();
zeus3110 12:12369ee344ab 79 break;
zeus3110 12:12369ee344ab 80
zeus3110 12:12369ee344ab 81 case -1:
zeus3110 12:12369ee344ab 82 printf("Error while reading data from socket\n\r");
zeus3110 12:12369ee344ab 83 socket->close();
zeus3110 12:12369ee344ab 84 break;
zeus3110 12:12369ee344ab 85
zeus3110 12:12369ee344ab 86 default:
zeus3110 12:12369ee344ab 87 printf("Message from %s:%d\n\r",
zeus3110 12:12369ee344ab 88 socket->getRemoteEndpoint().getAddress().toString().c_str(),
zeus3110 12:12369ee344ab 89 socket->getRemoteEndpoint().getPort());
zeus3110 12:12369ee344ab 90
zeus3110 12:12369ee344ab 91 //command
zeus3110 12:12369ee344ab 92 if(strcmp((char *)buffer.data(),TEMP_CMD)==0) {
zeus3110 12:12369ee344ab 93 printf("Temperature:\r\n");
zeus3110 12:12369ee344ab 94 sprintf(SendBuf,"%2.2f",pSensor->getTemperature());
zeus3110 12:12369ee344ab 95 } else if(strcmp((char *)buffer.data(),HUMIDITY_CMD)==0) {
zeus3110 12:12369ee344ab 96 printf("Humidity:\r\n");
zeus3110 12:12369ee344ab 97 sprintf(SendBuf,"%3.2f",pSensor->getHumidity());
zeus3110 12:12369ee344ab 98 } else if(strcmp((char *)buffer.data(),PRESSURE_CMD)==0) {
zeus3110 12:12369ee344ab 99 printf("Pressure:\r\n");
zeus3110 12:12369ee344ab 100 sprintf(SendBuf,"%4.2f",pSensor->getPressure());
zeus3110 12:12369ee344ab 101 } else if(strcmp((char *)buffer.data(),ILLUM_CMD)==0) {
zeus3110 12:12369ee344ab 102 printf("Illuminance:\r\n");
zeus3110 12:12369ee344ab 103 sprintf(SendBuf,"%5.2f",pLumSensor->getLux());
zeus3110 12:12369ee344ab 104 } else {
zeus3110 12:12369ee344ab 105 printf("Unknown command:\r\n");
zeus3110 12:12369ee344ab 106 sprintf(SendBuf,"NG");
zeus3110 12:12369ee344ab 107 }
zeus3110 12:12369ee344ab 108
zeus3110 12:12369ee344ab 109 socket->write((void *)SendBuf,strlen(SendBuf));
zeus3110 12:12369ee344ab 110
zeus3110 12:12369ee344ab 111 printf("Command:%s Result:%s\n\r", (char *)buffer.data(),SendBuf);
zeus3110 12:12369ee344ab 112 }
zeus3110 12:12369ee344ab 113 }
zeus3110 12:12369ee344ab 114
zeus3110 12:12369ee344ab 115 } while (server.getStatus() == network::Socket::Listening);
zeus3110 12:12369ee344ab 116 }