aaa

Dependencies:   BMP280 LGLCDv2

Fork of 0NicksCoursework-lg by Liam Grazier

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?

UserRevisionLine numberNew 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(&eth);
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 }