SEND

Fork of Final351CW_FINAL by Liam Grazier

Committer:
liam_grazier
Date:
Tue Jan 09 11:59:10 2018 +0000
Revision:
11:ce2a977dcab0
Parent:
10:098c2fa0a1a6
NEW NON LIB;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
liam_grazier 10:098c2fa0a1a6 1 /* ELEC351 COURSEWORK 2018
liam_grazier 10:098c2fa0a1a6 2 DESIGNED USING MBED ONLINE COMPILER IMPORTED TO KEIL
liam_grazier 10:098c2fa0a1a6 3 LIAM GRAZIER // DOUG TILLEY // ALEX BARON
liam_grazier 10:098c2fa0a1a6 4 */
liam_grazier 8:582ac4c5a524 5 #if !FEATURE_LWIP
liam_grazier 8:582ac4c5a524 6 #error [NOT_SUPPORTED] LWIP not supported for this target
liam_grazier 8:582ac4c5a524 7 #endif
liam_grazier 8:582ac4c5a524 8 #include "mbed.h"
liam_grazier 8:582ac4c5a524 9 #include "EthernetInterface.h"
liam_grazier 8:582ac4c5a524 10 #include "TCPServer.h"
liam_grazier 8:582ac4c5a524 11 #include "TCPSocket.h"
liam_grazier 10:098c2fa0a1a6 12 char realtime[32]; //char for storing the RTC
liam_grazier 8:582ac4c5a524 13 #include <iostream>
liam_grazier 8:582ac4c5a524 14 #include <string>
liam_grazier 8:582ac4c5a524 15 #include "BMP280.h"
liam_grazier 8:582ac4c5a524 16 #include "components.hpp"
liam_grazier 8:582ac4c5a524 17 #include "network.hpp"
liam_grazier 10:098c2fa0a1a6 18 Mutex Net; //mutex lock for the network.
liam_grazier 8:582ac4c5a524 19 #define HTTP_STATUS_LINE "HTTP/1.0 200 OK"
liam_grazier 8:582ac4c5a524 20 #define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8"
liam_grazier 8:582ac4c5a524 21 #define HTTP_MESSAGE_BODY1 "" \
liam_grazier 8:582ac4c5a524 22 "<html>" "\r\n" \
liam_grazier 8:582ac4c5a524 23 " <body style=\"display:flex;text-align:center\">" "\r\n" \
liam_grazier 8:582ac4c5a524 24 " <div style=\"margin:auto\">" "\r\n" \
liam_grazier 8:582ac4c5a524 25 " <h1>Sensor Data</h1>" "\r\n" \
liam_grazier 8:582ac4c5a524 26 " <p>Light Level LDR value: " "\r\n"
liam_grazier 8:582ac4c5a524 27
liam_grazier 8:582ac4c5a524 28 #define HTTP_Pressure1 "" \
liam_grazier 8:582ac4c5a524 29 "<html>" "\r\n" \
liam_grazier 8:582ac4c5a524 30 " <body style=\"display:flex;text-align:center\">" "\r\n" \
liam_grazier 8:582ac4c5a524 31 " <div style=\"margin:auto\">" "\r\n" \
liam_grazier 8:582ac4c5a524 32 " <h1> </h1>" "\r\n" \
liam_grazier 8:582ac4c5a524 33 " <p>Pressure(mbar): " "\r\n"
liam_grazier 8:582ac4c5a524 34
liam_grazier 8:582ac4c5a524 35 #define HTTP_Pressure2 "" \
liam_grazier 8:582ac4c5a524 36 "</p>" "\r\n" \
liam_grazier 8:582ac4c5a524 37 " </div>" "\r\n" \
liam_grazier 8:582ac4c5a524 38 " </body>" "\r\n" \
liam_grazier 8:582ac4c5a524 39 "</html>"
liam_grazier 8:582ac4c5a524 40 #define HTTP_TIME "" \
liam_grazier 8:582ac4c5a524 41 "<html>" "\r\n" \
liam_grazier 8:582ac4c5a524 42 " <body style=\"display:flex;text-align:center\">" "\r\n" \
liam_grazier 8:582ac4c5a524 43 " <div style=\"margin:auto\">" "\r\n" \
liam_grazier 8:582ac4c5a524 44 " <h1> </h1>" "\r\n" \
liam_grazier 8:582ac4c5a524 45 " <p>Time: " "\r\n"
liam_grazier 8:582ac4c5a524 46
liam_grazier 8:582ac4c5a524 47 #define HTTP_Temperature1 "" \
liam_grazier 8:582ac4c5a524 48 "<html>" "\r\n" \
liam_grazier 8:582ac4c5a524 49 " <body style=\"display:flex;text-align:center\">" "\r\n" \
liam_grazier 8:582ac4c5a524 50 " <div style=\"margin:auto\">" "\r\n" \
liam_grazier 8:582ac4c5a524 51 " <h1> </h1>" "\r\n" \
liam_grazier 8:582ac4c5a524 52 " <p>Temperature(Degrees Celcius): " "\r\n"
liam_grazier 8:582ac4c5a524 53
liam_grazier 8:582ac4c5a524 54 #define HTTP_Temperature2 "" \
liam_grazier 8:582ac4c5a524 55 "</p>" "\r\n" \
liam_grazier 8:582ac4c5a524 56 " </div>" "\r\n" \
liam_grazier 8:582ac4c5a524 57 " </body>" "\r\n" \
liam_grazier 8:582ac4c5a524 58 "</html>"
liam_grazier 8:582ac4c5a524 59 #define HTTP_MESSAGE_TIME "" \
liam_grazier 8:582ac4c5a524 60 "</p>" "\r\n" \
liam_grazier 8:582ac4c5a524 61 " </div>" "\r\n" \
liam_grazier 8:582ac4c5a524 62 " </body>" "\r\n" \
liam_grazier 8:582ac4c5a524 63 "</html>"
liam_grazier 8:582ac4c5a524 64 #define HTTP_MESSAGE_BODY2 "" \
liam_grazier 8:582ac4c5a524 65 "</p>" "\r\n" \
liam_grazier 8:582ac4c5a524 66 " </div>" "\r\n" \
liam_grazier 8:582ac4c5a524 67 " </body>" "\r\n" \
liam_grazier 8:582ac4c5a524 68 "</html>"
liam_grazier 8:582ac4c5a524 69
liam_grazier 8:582ac4c5a524 70
liam_grazier 8:582ac4c5a524 71 #define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n" \
liam_grazier 8:582ac4c5a524 72 HTTP_HEADER_FIELDS "\r\n" \
liam_grazier 8:582ac4c5a524 73 "\r\n" \
liam_grazier 8:582ac4c5a524 74 HTTP_MESSAGE_BODY "\r\n"
liam_grazier 8:582ac4c5a524 75
liam_grazier 10:098c2fa0a1a6 76 #define IP "10.0.0.10" //ipaddress
liam_grazier 10:098c2fa0a1a6 77 #define NETMASK "255.0.0.0" //subnetmask
liam_grazier 10:098c2fa0a1a6 78 #define GATEWAY "10.0.0.1" //defaultgateway
liam_grazier 10:098c2fa0a1a6 79 void dispstralltime() //function for getting time from the RTC
liam_grazier 10:098c2fa0a1a6 80 {
liam_grazier 8:582ac4c5a524 81 time_t seconds = time(NULL);
liam_grazier 10:098c2fa0a1a6 82 strftime(realtime, 32, "%c\n\r", localtime(&seconds)); //realtime value = yyyy/mm/dd/hh/mm/ss
liam_grazier 10:098c2fa0a1a6 83 }
liam_grazier 8:582ac4c5a524 84 void networksend(void)
liam_grazier 8:582ac4c5a524 85 {
liam_grazier 8:582ac4c5a524 86 // interrupt routine setup
liam_grazier 8:582ac4c5a524 87 Net.lock();
liam_grazier 10:098c2fa0a1a6 88 printf("Network Enabled\n\r");//here to show the user in terminal network is initalised
liam_grazier 8:582ac4c5a524 89 //Configure an ethernet connection
liam_grazier 8:582ac4c5a524 90 EthernetInterface eth;
liam_grazier 8:582ac4c5a524 91 eth.set_network(IP, NETMASK, GATEWAY);
liam_grazier 8:582ac4c5a524 92 eth.connect();
liam_grazier 8:582ac4c5a524 93 Net.unlock();
liam_grazier 8:582ac4c5a524 94 //Now setup a web server
liam_grazier 8:582ac4c5a524 95 TCPServer srv; //TCP/IP Server
liam_grazier 8:582ac4c5a524 96 TCPSocket clt_sock; //Socket for communication
liam_grazier 8:582ac4c5a524 97 SocketAddress clt_addr; //Address of incoming connection
liam_grazier 8:582ac4c5a524 98 /* Open the server on ethernet stack */
liam_grazier 8:582ac4c5a524 99 srv.open(&eth);
liam_grazier 8:582ac4c5a524 100 /* Bind the HTTP port (TCP 80) to the server */
liam_grazier 8:582ac4c5a524 101 srv.bind(eth.get_ip_address(), 80);
liam_grazier 8:582ac4c5a524 102 /* Can handle 5 simultaneous connections */
liam_grazier 10:098c2fa0a1a6 103 srv.listen(5);
liam_grazier 10:098c2fa0a1a6 104 while (true)
liam_grazier 10:098c2fa0a1a6 105 {
liam_grazier 8:582ac4c5a524 106 Net.lock();
liam_grazier 8:582ac4c5a524 107 using namespace std;
liam_grazier 8:582ac4c5a524 108 //Block and wait on an incoming connection
liam_grazier 8:582ac4c5a524 109 srv.accept(&clt_sock, &clt_addr);
liam_grazier 10:098c2fa0a1a6 110 //printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
liam_grazier 8:582ac4c5a524 111 double temp = sensor.getTemperature();
liam_grazier 8:582ac4c5a524 112 double pres = sensor.getPressure();
liam_grazier 8:582ac4c5a524 113 //Uses a C++ string to make it easier to concatinate
liam_grazier 8:582ac4c5a524 114 string response;
liam_grazier 10:098c2fa0a1a6 115 //Chars for storing the variables
liam_grazier 8:582ac4c5a524 116 char adcIn_str[64];
liam_grazier 8:582ac4c5a524 117 char pres_str[64];
liam_grazier 8:582ac4c5a524 118 char temp_str[64];
liam_grazier 10:098c2fa0a1a6 119 dispstralltime(); //calltime
liam_grazier 8:582ac4c5a524 120 //Read the LDR value
liam_grazier 10:098c2fa0a1a6 121 //declairing floats for storing data
liam_grazier 8:582ac4c5a524 122 float u = adcIn;
liam_grazier 8:582ac4c5a524 123 float b = pres;
liam_grazier 8:582ac4c5a524 124 float a = temp;
liam_grazier 10:098c2fa0a1a6 125 //Converterting the floats to chars ready for print
liam_grazier 8:582ac4c5a524 126 sprintf(adcIn_str, "%5.3f", u );
liam_grazier 8:582ac4c5a524 127 sprintf(pres_str, "%4.2f", b);
liam_grazier 8:582ac4c5a524 128 sprintf(temp_str, "%3.1f", a);
liam_grazier 8:582ac4c5a524 129 //Build the C++ string response
liam_grazier 8:582ac4c5a524 130 response += HTTP_TIME;
liam_grazier 10:098c2fa0a1a6 131 response += realtime; //write time
liam_grazier 8:582ac4c5a524 132 response += HTTP_MESSAGE_BODY1;
liam_grazier 10:098c2fa0a1a6 133 response += adcIn_str; //writeadc
liam_grazier 8:582ac4c5a524 134 response += HTTP_Temperature1;
liam_grazier 10:098c2fa0a1a6 135 response += temp_str; //writetemp
liam_grazier 8:582ac4c5a524 136 response += HTTP_Temperature2;
liam_grazier 8:582ac4c5a524 137 response += HTTP_Pressure1;
liam_grazier 10:098c2fa0a1a6 138 response += pres_str; //writepressure
liam_grazier 8:582ac4c5a524 139 response += HTTP_Pressure2;
liam_grazier 8:582ac4c5a524 140 response += HTTP_MESSAGE_TIME;
liam_grazier 8:582ac4c5a524 141 response += HTTP_MESSAGE_BODY2;
liam_grazier 8:582ac4c5a524 142 //Send static HTML response (as a C string)
liam_grazier 8:582ac4c5a524 143 clt_sock.send(response.c_str(), response.size()+6);
liam_grazier 8:582ac4c5a524 144 Net.unlock();
liam_grazier 10:098c2fa0a1a6 145 Thread::signal_wait(SIG_NET);//thead signal triggered by ticket in main.
liam_grazier 8:582ac4c5a524 146 }
liam_grazier 8:582ac4c5a524 147 }