sujana t / Mbed 2 deprecated embedded_webserver

Dependencies:   mbed

Committer:
suji
Date:
Fri Sep 14 07:57:04 2012 +0000
Revision:
0:ce142971b8b9
webserver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suji 0:ce142971b8b9 1 #include "mbed.h"
suji 0:ce142971b8b9 2
suji 0:ce142971b8b9 3 //#define SD_FS
suji 0:ce142971b8b9 4
suji 0:ce142971b8b9 5 #include "EthernetNetIf.h"
suji 0:ce142971b8b9 6 #include "HTTPServer.h"
suji 0:ce142971b8b9 7 #include "HTTPClient.h"
suji 0:ce142971b8b9 8 #ifdef SD_FS
suji 0:ce142971b8b9 9 #include "SDFileSystem.h"
suji 0:ce142971b8b9 10 #endif
suji 0:ce142971b8b9 11 #include "GPS.h"
suji 0:ce142971b8b9 12 #include "NTPClient.h"
suji 0:ce142971b8b9 13
suji 0:ce142971b8b9 14 #include "SCP1000.h"
suji 0:ce142971b8b9 15 #include "PachubeClient.h"
suji 0:ce142971b8b9 16 #include "main.h"
suji 0:ce142971b8b9 17
suji 0:ce142971b8b9 18 /***********
suji 0:ce142971b8b9 19 * I/O *
suji 0:ce142971b8b9 20 ***********/
suji 0:ce142971b8b9 21 DigitalOut listenStatus(LED1); // Blink when HTTP server is listening
suji 0:ce142971b8b9 22 DigitalOut ipStatus(LED2); // Set when IP address acquired
suji 0:ce142971b8b9 23 DigitalOut pollStatus(LED3); // Reserved
suji 0:ce142971b8b9 24 DigitalOut errorStatus(LED4); // Blink when error condition occurs; read other LEDs for code.
suji 0:ce142971b8b9 25
suji 0:ce142971b8b9 26 AnalogIn humiditySensor(p17); //
suji 0:ce142971b8b9 27 //AnalogIn tempSensor(p16); // Temp sensor.
suji 0:ce142971b8b9 28
suji 0:ce142971b8b9 29 SCP1000 scp1000(p5,p6,p7,p8); // Temp & pressure.
suji 0:ce142971b8b9 30
suji 0:ce142971b8b9 31
suji 0:ce142971b8b9 32 GPS gps(p9, p10);
suji 0:ce142971b8b9 33
suji 0:ce142971b8b9 34 #ifdef SD_FS
suji 0:ce142971b8b9 35 SDFileSystem sd(p5, p6, p7, p8, "fs"); // the pinout on the mbed Cool Components workshop board
suji 0:ce142971b8b9 36 #else
suji 0:ce142971b8b9 37 LocalFileSystem local("fs");
suji 0:ce142971b8b9 38 #endif
suji 0:ce142971b8b9 39
suji 0:ce142971b8b9 40 NTPClient ntp;
suji 0:ce142971b8b9 41
suji 0:ce142971b8b9 42 /**
suji 0:ce142971b8b9 43 * Blink the error LED and place the error code on the other LEDs.
suji 0:ce142971b8b9 44 * WARNING: Never returns!
suji 0:ce142971b8b9 45 *
suji 0:ce142971b8b9 46 */
suji 0:ce142971b8b9 47 void ledError(ErrorCode code) {
suji 0:ce142971b8b9 48 listenStatus = code & 1;
suji 0:ce142971b8b9 49 ipStatus = (code >> 1) & 1;
suji 0:ce142971b8b9 50 pollStatus = (code >> 2) & 1;
suji 0:ce142971b8b9 51
suji 0:ce142971b8b9 52 while (true) {
suji 0:ce142971b8b9 53 errorStatus = !errorStatus;
suji 0:ce142971b8b9 54 wait(BLINK_RATE);
suji 0:ce142971b8b9 55 }
suji 0:ce142971b8b9 56 }
suji 0:ce142971b8b9 57
suji 0:ce142971b8b9 58 /**
suji 0:ce142971b8b9 59 * Read sensor data and write it to file.
suji 0:ce142971b8b9 60 */
suji 0:ce142971b8b9 61 void pollSensors() {
suji 0:ce142971b8b9 62 int locked = 0;
suji 0:ce142971b8b9 63 float temp = 0;
suji 0:ce142971b8b9 64 //float tempB = 0;
suji 0:ce142971b8b9 65
suji 0:ce142971b8b9 66 float lat = 0;
suji 0:ce142971b8b9 67 float lng = 0;
suji 0:ce142971b8b9 68 float pressure = 0;
suji 0:ce142971b8b9 69 float humidity = 0;
suji 0:ce142971b8b9 70
suji 0:ce142971b8b9 71 char * timeStr;
suji 0:ce142971b8b9 72 time_t ctTime;
suji 0:ce142971b8b9 73
suji 0:ce142971b8b9 74 pollStatus = !pollStatus;
suji 0:ce142971b8b9 75
suji 0:ce142971b8b9 76 FILE* fp = fopen("/fs/sensors.htm", "w");
suji 0:ce142971b8b9 77 if (fp == NULL) {
suji 0:ce142971b8b9 78 ledError(ERR_FILE);
suji 0:ce142971b8b9 79 }
suji 0:ce142971b8b9 80
suji 0:ce142971b8b9 81 // Temp
suji 0:ce142971b8b9 82 // (SensorValue/4) - 50
suji 0:ce142971b8b9 83 //temp = tempSensor * 160 - 50; // Analog to deg C
suji 0:ce142971b8b9 84 //temp = 1.8 * temp + 32; // deg C to F.
suji 0:ce142971b8b9 85
suji 0:ce142971b8b9 86 temp = scp1000.readTemperature();
suji 0:ce142971b8b9 87 temp = 1.8 * temp + 32; // deg C to F
suji 0:ce142971b8b9 88
suji 0:ce142971b8b9 89 // Pressure
suji 0:ce142971b8b9 90 unsigned long ulPressure = scp1000.readPressure();
suji 0:ce142971b8b9 91 pressure = ((float) ulPressure) / 1000.0; // Pa to kPa
suji 0:ce142971b8b9 92
suji 0:ce142971b8b9 93 // Humidity
suji 0:ce142971b8b9 94 // RH (%) = (SensorValue x 0.1906) - 40.2
suji 0:ce142971b8b9 95
suji 0:ce142971b8b9 96 // This might be wrong.
suji 0:ce142971b8b9 97 humidity = (1000 * humiditySensor * 0.1906) - 40.2;
suji 0:ce142971b8b9 98
suji 0:ce142971b8b9 99 ctTime = time(NULL);
suji 0:ce142971b8b9 100 ctTime -= 60 * 60 * 4; // Account for timezone offset.
suji 0:ce142971b8b9 101 timeStr = ctime(&ctTime);
suji 0:ce142971b8b9 102
suji 0:ce142971b8b9 103 int i = 0;
suji 0:ce142971b8b9 104 while (timeStr[i] != '\0') {
suji 0:ce142971b8b9 105 if (timeStr[i] == '\n') {
suji 0:ce142971b8b9 106 timeStr[i] = ' ';
suji 0:ce142971b8b9 107 }
suji 0:ce142971b8b9 108 i++;
suji 0:ce142971b8b9 109 }
suji 0:ce142971b8b9 110
suji 0:ce142971b8b9 111
suji 0:ce142971b8b9 112 // True if GPS is locked.
suji 0:ce142971b8b9 113 //if (gps.sample()) {
suji 0:ce142971b8b9 114 //locked = 1;
suji 0:ce142971b8b9 115 //lat = gps.latitude;
suji 0:ce142971b8b9 116 //lng = gps.longitude;
suji 0:ce142971b8b9 117 //}
suji 0:ce142971b8b9 118
suji 0:ce142971b8b9 119 fprintf(fp, "{\n\t\"gpsLocked\": %d,\n", locked);
suji 0:ce142971b8b9 120 fprintf(fp, "\t\"latitude\": %f,\n", lat);
suji 0:ce142971b8b9 121 fprintf(fp, "\t\"longitude\": %f,\n", lng);
suji 0:ce142971b8b9 122 fprintf(fp, "\t\"temperature\": %4.2f,\n", temp);
suji 0:ce142971b8b9 123 fprintf(fp, "\t\"pressure\": %5.2f,\n", pressure);
suji 0:ce142971b8b9 124 fprintf(fp, "\t\"time\": \"%s ET\",\n", timeStr);
suji 0:ce142971b8b9 125 fprintf(fp, "\t\"humidity\": %5.2f\n}", humidity);
suji 0:ce142971b8b9 126
suji 0:ce142971b8b9 127 //postFeed(pressure, humidity, temp);
suji 0:ce142971b8b9 128
suji 0:ce142971b8b9 129 fclose(fp);
suji 0:ce142971b8b9 130 }
suji 0:ce142971b8b9 131
suji 0:ce142971b8b9 132 /**
suji 0:ce142971b8b9 133 * Flip listening status LED.
suji 0:ce142971b8b9 134 */
suji 0:ce142971b8b9 135 void flipLed() {
suji 0:ce142971b8b9 136 listenStatus = !listenStatus;
suji 0:ce142971b8b9 137 }
suji 0:ce142971b8b9 138
suji 0:ce142971b8b9 139 /**
suji 0:ce142971b8b9 140 * Entry point
suji 0:ce142971b8b9 141 */
suji 0:ce142971b8b9 142 int main() {
suji 0:ce142971b8b9 143 EthernetNetIf eth;
suji 0:ce142971b8b9 144 HTTPServer server;
suji 0:ce142971b8b9 145
suji 0:ce142971b8b9 146 ipStatus = 0;
suji 0:ce142971b8b9 147 listenStatus = 0;
suji 0:ce142971b8b9 148 pollStatus = 0;
suji 0:ce142971b8b9 149
suji 0:ce142971b8b9 150 EthernetErr ethErr = eth.setup();
suji 0:ce142971b8b9 151 if(ethErr) {
suji 0:ce142971b8b9 152 ledError(ERR_ETHERNET);
suji 0:ce142971b8b9 153 }
suji 0:ce142971b8b9 154
suji 0:ce142971b8b9 155 Host ntpServer(IpAddr(), 123, "nist1.columbiacountyga.gov");
suji 0:ce142971b8b9 156 ntp.setTime(ntpServer);
suji 0:ce142971b8b9 157
suji 0:ce142971b8b9 158 ipStatus = 1;
suji 0:ce142971b8b9 159
suji 0:ce142971b8b9 160 // Web root directory
suji 0:ce142971b8b9 161 FSHandler::mount("/fs", "/");
suji 0:ce142971b8b9 162
suji 0:ce142971b8b9 163 // Bind the filesystem handler for all requests
suji 0:ce142971b8b9 164 server.addHandler("/"); // "/" matches every URL
suji 0:ce142971b8b9 165 server.bind(80); // listen port
suji 0:ce142971b8b9 166
suji 0:ce142971b8b9 167 Ticker ledTicker;
suji 0:ce142971b8b9 168 ledTicker.attach(&flipLed, BLINK_RATE);
suji 0:ce142971b8b9 169
suji 0:ce142971b8b9 170 pollSensors();
suji 0:ce142971b8b9 171
suji 0:ce142971b8b9 172 Ticker pollTicker;
suji 0:ce142971b8b9 173 pollTicker.attach(&pollSensors, SENSOR_POLL_RATE);
suji 0:ce142971b8b9 174
suji 0:ce142971b8b9 175 // Listen indefinitely
suji 0:ce142971b8b9 176 while(true)
suji 0:ce142971b8b9 177 {
suji 0:ce142971b8b9 178 Net::poll();
suji 0:ce142971b8b9 179 }
suji 0:ce142971b8b9 180
suji 0:ce142971b8b9 181 return 0;
suji 0:ce142971b8b9 182 }