
aaa
Fork of 0NicksCoursework-lg by
network.cpp@7:dd303488e55d, 2018-01-07 (annotated)
- Committer:
- liam_grazier
- Date:
- Sun Jan 07 21:29:12 2018 +0000
- Revision:
- 7:dd303488e55d
working LCD, SD, (NON FIFO) , webpage, all threaded
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
liam_grazier | 7:dd303488e55d | 1 | #if !FEATURE_LWIP |
liam_grazier | 7:dd303488e55d | 2 | #error [NOT_SUPPORTED] LWIP not supported for this target |
liam_grazier | 7:dd303488e55d | 3 | #endif |
liam_grazier | 7:dd303488e55d | 4 | |
liam_grazier | 7:dd303488e55d | 5 | #include "mbed.h" |
liam_grazier | 7:dd303488e55d | 6 | #include "EthernetInterface.h" |
liam_grazier | 7:dd303488e55d | 7 | #include "TCPServer.h" |
liam_grazier | 7:dd303488e55d | 8 | #include "TCPSocket.h" |
liam_grazier | 7:dd303488e55d | 9 | #include <iostream> |
liam_grazier | 7:dd303488e55d | 10 | #include <string> |
liam_grazier | 7:dd303488e55d | 11 | #include "BMP280.h" |
liam_grazier | 7:dd303488e55d | 12 | #include "components.hpp" |
liam_grazier | 7:dd303488e55d | 13 | #include "network.hpp" |
liam_grazier | 7:dd303488e55d | 14 | Mutex Net; |
liam_grazier | 7:dd303488e55d | 15 | #define HTTP_STATUS_LINE "HTTP/1.0 200 OK" |
liam_grazier | 7:dd303488e55d | 16 | #define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8" |
liam_grazier | 7:dd303488e55d | 17 | #define HTTP_MESSAGE_BODY1 "" \ |
liam_grazier | 7:dd303488e55d | 18 | "<html>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 19 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 20 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 21 | " <h1>Sensor Data</h1>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 22 | " <p>Light Level LDR value: " "\r\n" |
liam_grazier | 7:dd303488e55d | 23 | |
liam_grazier | 7:dd303488e55d | 24 | #define HTTP_Pressure1 "" \ |
liam_grazier | 7:dd303488e55d | 25 | "<html>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 26 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 27 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 28 | " <h1> </h1>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 29 | " <p>Pressure(mbar): " "\r\n" |
liam_grazier | 7:dd303488e55d | 30 | |
liam_grazier | 7:dd303488e55d | 31 | #define HTTP_Pressure2 "" \ |
liam_grazier | 7:dd303488e55d | 32 | "</p>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 33 | " </div>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 34 | " </body>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 35 | "</html>" |
liam_grazier | 7:dd303488e55d | 36 | |
liam_grazier | 7:dd303488e55d | 37 | |
liam_grazier | 7:dd303488e55d | 38 | #define HTTP_Temperature1 "" \ |
liam_grazier | 7:dd303488e55d | 39 | "<html>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 40 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 41 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 42 | " <h1> </h1>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 43 | " <p>Temperature(Degrees Celcius): " "\r\n" |
liam_grazier | 7:dd303488e55d | 44 | |
liam_grazier | 7:dd303488e55d | 45 | #define HTTP_Temperature2 "" \ |
liam_grazier | 7:dd303488e55d | 46 | "</p>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 47 | " </div>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 48 | " </body>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 49 | "</html>" |
liam_grazier | 7:dd303488e55d | 50 | |
liam_grazier | 7:dd303488e55d | 51 | #define HTTP_MESSAGE_BODY2 "" \ |
liam_grazier | 7:dd303488e55d | 52 | "</p>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 53 | " </div>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 54 | " </body>" "\r\n" \ |
liam_grazier | 7:dd303488e55d | 55 | "</html>" |
liam_grazier | 7:dd303488e55d | 56 | |
liam_grazier | 7:dd303488e55d | 57 | #define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n" \ |
liam_grazier | 7:dd303488e55d | 58 | HTTP_HEADER_FIELDS "\r\n" \ |
liam_grazier | 7:dd303488e55d | 59 | "\r\n" \ |
liam_grazier | 7:dd303488e55d | 60 | HTTP_MESSAGE_BODY "\r\n" |
liam_grazier | 7:dd303488e55d | 61 | |
liam_grazier | 7:dd303488e55d | 62 | #define IP "10.0.0.10" |
liam_grazier | 7:dd303488e55d | 63 | #define NETMASK "255.0.0.0" |
liam_grazier | 7:dd303488e55d | 64 | #define GATEWAY "10.0.0.1" |
liam_grazier | 7:dd303488e55d | 65 | |
liam_grazier | 7:dd303488e55d | 66 | AnalogIn pres(); |
liam_grazier | 7:dd303488e55d | 67 | AnalogIn temp(); |
liam_grazier | 7:dd303488e55d | 68 | |
liam_grazier | 7:dd303488e55d | 69 | void networksend(void) |
liam_grazier | 7:dd303488e55d | 70 | { |
liam_grazier | 7:dd303488e55d | 71 | // interrupt routine setup |
liam_grazier | 7:dd303488e55d | 72 | printf("Basic HTTP server example\n");//n |
liam_grazier | 7:dd303488e55d | 73 | |
liam_grazier | 7:dd303488e55d | 74 | //Configure an ethernet connection |
liam_grazier | 7:dd303488e55d | 75 | EthernetInterface eth; |
liam_grazier | 7:dd303488e55d | 76 | eth.set_network(IP, NETMASK, GATEWAY); |
liam_grazier | 7:dd303488e55d | 77 | eth.connect(); |
liam_grazier | 7:dd303488e55d | 78 | printf("The target IP address is '%s'\n", eth.get_ip_address()); |
liam_grazier | 7:dd303488e55d | 79 | |
liam_grazier | 7:dd303488e55d | 80 | //Now setup a web server |
liam_grazier | 7:dd303488e55d | 81 | TCPServer srv; //TCP/IP Server |
liam_grazier | 7:dd303488e55d | 82 | TCPSocket clt_sock; //Socket for communication |
liam_grazier | 7:dd303488e55d | 83 | SocketAddress clt_addr; //Address of incoming connection |
liam_grazier | 7:dd303488e55d | 84 | |
liam_grazier | 7:dd303488e55d | 85 | /* Open the server on ethernet stack */ |
liam_grazier | 7:dd303488e55d | 86 | srv.open(ð); |
liam_grazier | 7:dd303488e55d | 87 | |
liam_grazier | 7:dd303488e55d | 88 | /* Bind the HTTP port (TCP 80) to the server */ |
liam_grazier | 7:dd303488e55d | 89 | srv.bind(eth.get_ip_address(), 80); |
liam_grazier | 7:dd303488e55d | 90 | |
liam_grazier | 7:dd303488e55d | 91 | /* Can handle 5 simultaneous connections */ |
liam_grazier | 7:dd303488e55d | 92 | srv.listen(5); |
liam_grazier | 7:dd303488e55d | 93 | |
liam_grazier | 7:dd303488e55d | 94 | while (true) { |
liam_grazier | 7:dd303488e55d | 95 | Net.lock(); |
liam_grazier | 7:dd303488e55d | 96 | using namespace std; |
liam_grazier | 7:dd303488e55d | 97 | //Block and wait on an incoming connection |
liam_grazier | 7:dd303488e55d | 98 | srv.accept(&clt_sock, &clt_addr); |
liam_grazier | 7:dd303488e55d | 99 | printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port()); |
liam_grazier | 7:dd303488e55d | 100 | |
liam_grazier | 7:dd303488e55d | 101 | double temp = sensor.getTemperature(); |
liam_grazier | 7:dd303488e55d | 102 | double pres = sensor.getPressure(); |
liam_grazier | 7:dd303488e55d | 103 | //Uses a C++ string to make it easier to concatinate |
liam_grazier | 7:dd303488e55d | 104 | string response; |
liam_grazier | 7:dd303488e55d | 105 | //This is a C string |
liam_grazier | 7:dd303488e55d | 106 | char adcIn_str[64]; |
liam_grazier | 7:dd303488e55d | 107 | char pres_str[64]; |
liam_grazier | 7:dd303488e55d | 108 | char temp_str[64]; |
liam_grazier | 7:dd303488e55d | 109 | |
liam_grazier | 7:dd303488e55d | 110 | //Read the LDR value |
liam_grazier | 7:dd303488e55d | 111 | float u = adcIn; |
liam_grazier | 7:dd303488e55d | 112 | float b = pres; |
liam_grazier | 7:dd303488e55d | 113 | float a = temp; |
liam_grazier | 7:dd303488e55d | 114 | |
liam_grazier | 7:dd303488e55d | 115 | //Convert to a C String |
liam_grazier | 7:dd303488e55d | 116 | sprintf(adcIn_str, "%5.3f", u ); |
liam_grazier | 7:dd303488e55d | 117 | sprintf(pres_str, "%4.2f", b); |
liam_grazier | 7:dd303488e55d | 118 | sprintf(temp_str, "%3.1f", a); |
liam_grazier | 7:dd303488e55d | 119 | printf("LDR: %5.3f\n\r", u); |
liam_grazier | 7:dd303488e55d | 120 | |
liam_grazier | 7:dd303488e55d | 121 | //Build the C++ string response |
liam_grazier | 7:dd303488e55d | 122 | response = HTTP_MESSAGE_BODY1; |
liam_grazier | 7:dd303488e55d | 123 | response += adcIn_str; |
liam_grazier | 7:dd303488e55d | 124 | response += HTTP_Temperature1; |
liam_grazier | 7:dd303488e55d | 125 | response += temp_str; |
liam_grazier | 7:dd303488e55d | 126 | response += HTTP_Temperature2; |
liam_grazier | 7:dd303488e55d | 127 | response += HTTP_Pressure1; |
liam_grazier | 7:dd303488e55d | 128 | response += pres_str; |
liam_grazier | 7:dd303488e55d | 129 | response += HTTP_Pressure2; |
liam_grazier | 7:dd303488e55d | 130 | response += HTTP_MESSAGE_BODY2; |
liam_grazier | 7:dd303488e55d | 131 | //Send static HTML response (as a C string) |
liam_grazier | 7:dd303488e55d | 132 | clt_sock.send(response.c_str(), response.size()+6); |
liam_grazier | 7:dd303488e55d | 133 | Net.unlock(); |
liam_grazier | 7:dd303488e55d | 134 | } |
liam_grazier | 7:dd303488e55d | 135 | } |