Version 8, working version with Alix, sams and ollies code. Displays time, date and sensor info onto terminal, LCD and networking, and saves onto SD card.

Dependencies:   BMP280 ELEC350-Practicals-FZ429 TextLCD BME280 ntp-client

Committer:
Alix955
Date:
Thu Dec 13 15:24:22 2018 +0000
Revision:
10:eea19f8e6122
Parent:
9:f5eae5211225
Child:
11:42b0c567cc8c
Alix & Sams versions combined;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alix955 9:f5eae5211225 1 #ifndef _NETWORK_
Alix955 9:f5eae5211225 2
Alix955 9:f5eae5211225 3 #define _NETWORK_
Alix955 9:f5eae5211225 4
Alix955 9:f5eae5211225 5 #include "mbed.h"
Alix955 9:f5eae5211225 6
Alix955 9:f5eae5211225 7 #include "FATFileSystem.h"
Alix955 9:f5eae5211225 8
Alix955 9:f5eae5211225 9 #include "sample_hardware.hpp"
Alix955 9:f5eae5211225 10
Alix955 9:f5eae5211225 11 #include "EthernetInterface.h"
Alix955 9:f5eae5211225 12
Alix955 9:f5eae5211225 13 #include "TCPServer.h"
Alix955 9:f5eae5211225 14
Alix955 9:f5eae5211225 15 //#include "messageStruct.hpp"
Alix955 9:f5eae5211225 16
Alix955 10:eea19f8e6122 17 //#include "LCD.hpp"
Alix955 10:eea19f8e6122 18
Alix955 9:f5eae5211225 19 #include "TCPSocket.h"
Alix955 9:f5eae5211225 20
Alix955 9:f5eae5211225 21 #include <iostream>
Alix955 9:f5eae5211225 22
Alix955 9:f5eae5211225 23 #include <string>
Alix955 9:f5eae5211225 24
Alix955 9:f5eae5211225 25 #include "ntp-client/NTPClient.h"
Alix955 9:f5eae5211225 26
Alix955 9:f5eae5211225 27
Alix955 9:f5eae5211225 28
Alix955 9:f5eae5211225 29
Alix955 9:f5eae5211225 30 #define HTTP_STATUS_LINE "HTTP/1.0 200 OK"
Alix955 9:f5eae5211225 31
Alix955 9:f5eae5211225 32 #define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8"
Alix955 9:f5eae5211225 33
Alix955 10:eea19f8e6122 34 #define HTTP_MESSAGE_BODY1 "" \
Alix955 10:eea19f8e6122 35 "<html>" "\r\n" \
Alix955 10:eea19f8e6122 36 " <body style=\"display:flex;text-align:center\">" "\r\n" \
Alix955 10:eea19f8e6122 37 " <div style=\"margin:auto\">" "\r\n" \
Alix955 10:eea19f8e6122 38 " <h1>Alright sunshine</h1>" "\r\n" \
Alix955 9:f5eae5211225 39 " <p>The LDR value is "
Alix955 9:f5eae5211225 40
Alix955 10:eea19f8e6122 41 #define HTTP_MESSAGE_BODY2 "" \
Alix955 10:eea19f8e6122 42 "</p>" "\r\n" \
Alix955 10:eea19f8e6122 43 " </div>" "\r\n" \
Alix955 10:eea19f8e6122 44 " </body>" "\r\n" \
Alix955 9:f5eae5211225 45 "</html>"
Alix955 9:f5eae5211225 46
Alix955 10:eea19f8e6122 47 #define HTTP_MESSAGE_BODY3 "" \
Alix955 10:eea19f8e6122 48 "<html>" "\r\n" \
Alix955 10:eea19f8e6122 49 " <body style=\"display:flex;text-align:center\">" "\r\n" \
Alix955 10:eea19f8e6122 50 " <div style=\"margin:auto\">" "\r\n" \
Alix955 10:eea19f8e6122 51 " <p>The Temperature value is "
Alix955 9:f5eae5211225 52
Alix955 10:eea19f8e6122 53 #define HTTP_MESSAGE_BODY4 "" \
Alix955 10:eea19f8e6122 54 "</p>" "\r\n" \
Alix955 10:eea19f8e6122 55 " </div>" "\r\n" \
Alix955 10:eea19f8e6122 56 " </body>" "\r\n" \
Alix955 10:eea19f8e6122 57 "</html>"
Alix955 9:f5eae5211225 58
Alix955 10:eea19f8e6122 59 #define HTTP_MESSAGE_BODY5 "" \
Alix955 10:eea19f8e6122 60 "<html>" "\r\n" \
Alix955 10:eea19f8e6122 61 " <body style=\"display:flex;text-align:center\">" "\r\n" \
Alix955 10:eea19f8e6122 62 " <div style=\"margin:auto\">" "\r\n" \
Alix955 10:eea19f8e6122 63 " <p>The Pressure value is "
Alix955 9:f5eae5211225 64
Alix955 10:eea19f8e6122 65 #define HTTP_MESSAGE_BODY6 "" \
Alix955 10:eea19f8e6122 66 "</p>" "\r\n" \
Alix955 10:eea19f8e6122 67 " </div>" "\r\n" \
Alix955 10:eea19f8e6122 68 " </body>" "\r\n" \
Alix955 10:eea19f8e6122 69 "</html>"
Alix955 9:f5eae5211225 70
Alix955 10:eea19f8e6122 71 #define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n" \
Alix955 10:eea19f8e6122 72 HTTP_HEADER_FIELDS "\r\n" \
Alix955 10:eea19f8e6122 73 "\r\n" \
Alix955 10:eea19f8e6122 74 HTTP_MESSAGE_BODY "\r\n"
Alix955 9:f5eae5211225 75
Alix955 9:f5eae5211225 76
Alix955 9:f5eae5211225 77
Alix955 10:eea19f8e6122 78 #define IP "10.0.0.10"
Alix955 9:f5eae5211225 79
Alix955 10:eea19f8e6122 80 #define NETMASK "255.0.0.0"
Alix955 9:f5eae5211225 81
Alix955 10:eea19f8e6122 82 #define GATEWAY "10.0.0.2"
Alix955 9:f5eae5211225 83
Alix955 9:f5eae5211225 84 EthernetInterface eth;
Alix955 9:f5eae5211225 85
Alix955 9:f5eae5211225 86 NTPClient ntp(&eth);
Alix955 9:f5eae5211225 87
Alix955 9:f5eae5211225 88
Alix955 9:f5eae5211225 89
Alix955 9:f5eae5211225 90
Alix955 9:f5eae5211225 91 class Network
Alix955 9:f5eae5211225 92 {
Alix955 10:eea19f8e6122 93 //friend class LCD_Data;
Alix955 9:f5eae5211225 94 private:
Alix955 9:f5eae5211225 95 float temp; //current temperature of sensor
Alix955 9:f5eae5211225 96 float pressure; //current pressure of sensor
Alix955 9:f5eae5211225 97 float fLDR; //current light level from LDR
Alix955 10:eea19f8e6122 98 string time;
Alix955 9:f5eae5211225 99
Alix955 9:f5eae5211225 100 void update_temp(double t) //use this function to update the current temperature value
Alix955 9:f5eae5211225 101 {
Alix955 9:f5eae5211225 102 temp = 5;
Alix955 9:f5eae5211225 103 }
Alix955 9:f5eae5211225 104
Alix955 9:f5eae5211225 105 void update_pressure(double p) //use this function to update the current pressure value
Alix955 9:f5eae5211225 106 {
Alix955 9:f5eae5211225 107 pressure = 4;
Alix955 9:f5eae5211225 108 }
Alix955 9:f5eae5211225 109
Alix955 9:f5eae5211225 110 void update_LDR(double L)
Alix955 9:f5eae5211225 111 {
Alix955 9:f5eae5211225 112 fLDR = 3;
Alix955 9:f5eae5211225 113 }
Alix955 9:f5eae5211225 114
Alix955 9:f5eae5211225 115
Alix955 9:f5eae5211225 116 public:
Alix955 9:f5eae5211225 117 EventQueue Network_Queue;
Alix955 9:f5eae5211225 118
Alix955 9:f5eae5211225 119
Alix955 9:f5eae5211225 120
Alix955 9:f5eae5211225 121 Network(){ //constructor
Alix955 9:f5eae5211225 122
Alix955 9:f5eae5211225 123 //Configure an ethernet connection
Alix955 9:f5eae5211225 124 eth.set_network(IP, NETMASK, GATEWAY);
Alix955 9:f5eae5211225 125 eth.connect();
Alix955 9:f5eae5211225 126
Alix955 9:f5eae5211225 127 }
Alix955 9:f5eae5211225 128
Alix955 9:f5eae5211225 129
Alix955 9:f5eae5211225 130 ~Network(){ //deconstructor
Alix955 9:f5eae5211225 131
Alix955 9:f5eae5211225 132 }
Alix955 9:f5eae5211225 133
Alix955 9:f5eae5211225 134
Alix955 9:f5eae5211225 135
Alix955 9:f5eae5211225 136
Alix955 9:f5eae5211225 137
Alix955 9:f5eae5211225 138 void update_sensor_info(sample_message msg) //updates all current sensor information, this is called by a ticker every 5 seconds to read from the mailbox
Alix955 9:f5eae5211225 139
Alix955 9:f5eae5211225 140 {
Alix955 9:f5eae5211225 141 update_temp(msg.temp); // Include message class passing of data
Alix955 9:f5eae5211225 142 update_pressure(msg.pressure);
Alix955 9:f5eae5211225 143 update_LDR(msg.ldr);
Alix955 9:f5eae5211225 144 }
Alix955 9:f5eae5211225 145
Alix955 9:f5eae5211225 146
Alix955 10:eea19f8e6122 147 void update_Time(string tm)
Alix955 10:eea19f8e6122 148 {
Alix955 10:eea19f8e6122 149 time = tm;
Alix955 10:eea19f8e6122 150 }
Alix955 9:f5eae5211225 151
Alix955 9:f5eae5211225 152
Alix955 9:f5eae5211225 153 void NetPush(){
Alix955 9:f5eae5211225 154
Alix955 9:f5eae5211225 155
Alix955 9:f5eae5211225 156 //Now setup a web server
Alix955 9:f5eae5211225 157
Alix955 9:f5eae5211225 158 TCPServer srv; //TCP/IP Server
Alix955 9:f5eae5211225 159 TCPSocket clt_sock; //Socket for communication
Alix955 9:f5eae5211225 160 SocketAddress clt_addr; //Address of incoming connection
Alix955 9:f5eae5211225 161
Alix955 9:f5eae5211225 162
Alix955 9:f5eae5211225 163
Alix955 9:f5eae5211225 164
Alix955 9:f5eae5211225 165 /* Open the server on ethernet stack */
Alix955 9:f5eae5211225 166 srv.open(&eth);
Alix955 9:f5eae5211225 167
Alix955 9:f5eae5211225 168
Alix955 9:f5eae5211225 169 /* Bind the HTTP port (TCP 80) to the server */
Alix955 9:f5eae5211225 170 srv.bind(eth.get_ip_address(), 80);
Alix955 9:f5eae5211225 171
Alix955 9:f5eae5211225 172
Alix955 9:f5eae5211225 173 /* Can handle 5 simultaneous connections */
Alix955 9:f5eae5211225 174 srv.listen(5);
Alix955 9:f5eae5211225 175
Alix955 9:f5eae5211225 176 //Block and wait on an incoming connection
Alix955 9:f5eae5211225 177
Alix955 9:f5eae5211225 178 srv.accept(&clt_sock, &clt_addr);
Alix955 9:f5eae5211225 179
Alix955 9:f5eae5211225 180 printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
Alix955 9:f5eae5211225 181
Alix955 9:f5eae5211225 182
Alix955 9:f5eae5211225 183
Alix955 9:f5eae5211225 184 //Uses a C++ string to make it easier to concatinate
Alix955 9:f5eae5211225 185
Alix955 9:f5eae5211225 186 string response;
Alix955 9:f5eae5211225 187
Alix955 9:f5eae5211225 188
Alix955 9:f5eae5211225 189
Alix955 9:f5eae5211225 190 //This is a C string
Alix955 9:f5eae5211225 191
Alix955 9:f5eae5211225 192 char ldr_str[64];
Alix955 9:f5eae5211225 193
Alix955 9:f5eae5211225 194 char temp_str[64];
Alix955 9:f5eae5211225 195
Alix955 9:f5eae5211225 196 char pressure_str[64];
Alix955 9:f5eae5211225 197
Alix955 9:f5eae5211225 198
Alix955 9:f5eae5211225 199
Alix955 9:f5eae5211225 200
Alix955 9:f5eae5211225 201
Alix955 9:f5eae5211225 202 //Convert to a C String
Alix955 9:f5eae5211225 203
Alix955 9:f5eae5211225 204 sprintf(ldr_str, "%5.3f", fLDR );
Alix955 9:f5eae5211225 205
Alix955 9:f5eae5211225 206 sprintf(temp_str, "%5.3f", temp );
Alix955 9:f5eae5211225 207
Alix955 9:f5eae5211225 208 sprintf(pressure_str, "%5.3f", pressure );
Alix955 9:f5eae5211225 209
Alix955 9:f5eae5211225 210
Alix955 9:f5eae5211225 211
Alix955 9:f5eae5211225 212
Alix955 9:f5eae5211225 213
Alix955 9:f5eae5211225 214 //Build the C++ string response
Alix955 9:f5eae5211225 215
Alix955 9:f5eae5211225 216 response = HTTP_MESSAGE_BODY1;
Alix955 9:f5eae5211225 217
Alix955 9:f5eae5211225 218 response += ldr_str;
Alix955 9:f5eae5211225 219
Alix955 9:f5eae5211225 220 response += HTTP_MESSAGE_BODY2;
Alix955 9:f5eae5211225 221
Alix955 9:f5eae5211225 222
Alix955 9:f5eae5211225 223
Alix955 9:f5eae5211225 224 response = HTTP_MESSAGE_BODY3;
Alix955 9:f5eae5211225 225
Alix955 9:f5eae5211225 226 response += temp_str;
Alix955 9:f5eae5211225 227
Alix955 9:f5eae5211225 228 response += HTTP_MESSAGE_BODY4;
Alix955 9:f5eae5211225 229
Alix955 9:f5eae5211225 230
Alix955 9:f5eae5211225 231
Alix955 9:f5eae5211225 232 response += HTTP_MESSAGE_BODY5;
Alix955 9:f5eae5211225 233
Alix955 10:eea19f8e6122 234 //response += pressure_str;
Alix955 9:f5eae5211225 235
Alix955 10:eea19f8e6122 236 response += time;
Alix955 10:eea19f8e6122 237
Alix955 10:eea19f8e6122 238
Alix955 9:f5eae5211225 239 response += HTTP_MESSAGE_BODY6;
Alix955 9:f5eae5211225 240
Alix955 9:f5eae5211225 241
Alix955 9:f5eae5211225 242
Alix955 9:f5eae5211225 243
Alix955 9:f5eae5211225 244
Alix955 9:f5eae5211225 245
Alix955 9:f5eae5211225 246
Alix955 9:f5eae5211225 247 //Send static HTML response (as a C string)
Alix955 9:f5eae5211225 248
Alix955 9:f5eae5211225 249 clt_sock.send(response.c_str(), response.size()+6);
Alix955 9:f5eae5211225 250
Alix955 9:f5eae5211225 251
Alix955 9:f5eae5211225 252
Alix955 9:f5eae5211225 253
Alix955 9:f5eae5211225 254
Alix955 9:f5eae5211225 255 }
Alix955 9:f5eae5211225 256
Alix955 9:f5eae5211225 257 };
Alix955 9:f5eae5211225 258
Alix955 9:f5eae5211225 259
Alix955 9:f5eae5211225 260
Alix955 9:f5eae5211225 261
Alix955 9:f5eae5211225 262
Alix955 9:f5eae5211225 263 Network m_oNet;
Alix955 9:f5eae5211225 264
Alix955 9:f5eae5211225 265 #endif