Modified to run on Renesas GR Peach board
Dependencies: EthernetInterface HTTP-Server Webpage mbed-rpc mbed-src
Fork of HTTPServer_echoback by
main.cpp@16:5d102be2566c, 2015-10-07 (annotated)
- Committer:
- webOnBoard
- Date:
- Wed Oct 07 20:42:51 2015 +0000
- Revision:
- 16:5d102be2566c
- Parent:
- 15:eae1575da9ca
web based AHRS demo Renesas GR Peach board; Using HTTP Server/RPC Adafruit 10DOF
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donatien | 0:bb128f0e952f | 1 | #include "mbed.h" |
donatien | 0:bb128f0e952f | 2 | #include "EthernetInterface.h" |
webOnBoard | 16:5d102be2566c | 3 | #include "HTTPServer.h" |
hsgw | 13:25ce35614dd1 | 4 | #include <stdio.h> |
hsgw | 13:25ce35614dd1 | 5 | #include <string.h> |
webOnBoard | 16:5d102be2566c | 6 | //#include "webpage.h" |
webOnBoard | 16:5d102be2566c | 7 | |
webOnBoard | 16:5d102be2566c | 8 | |
webOnBoard | 16:5d102be2566c | 9 | #include "Adafruit_Sensor.h" |
webOnBoard | 16:5d102be2566c | 10 | #include "Adafruit_LSM303_U.h" |
webOnBoard | 16:5d102be2566c | 11 | #include "Adafruit_BMP085_U.h" |
webOnBoard | 16:5d102be2566c | 12 | #include "Adafruit_L3GD20_U.h" |
webOnBoard | 16:5d102be2566c | 13 | #include "Adafruit_10DOF.h" |
webOnBoard | 16:5d102be2566c | 14 | |
donatien | 0:bb128f0e952f | 15 | |
hsgw | 13:25ce35614dd1 | 16 | #define PORT 80 |
webOnBoard | 16:5d102be2566c | 17 | #include <string> |
webOnBoard | 16:5d102be2566c | 18 | |
webOnBoard | 16:5d102be2566c | 19 | |
webOnBoard | 16:5d102be2566c | 20 | /* Assign a unique ID to the sensors */ |
webOnBoard | 16:5d102be2566c | 21 | Adafruit_10DOF dof = Adafruit_10DOF(); |
webOnBoard | 16:5d102be2566c | 22 | Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301L); |
webOnBoard | 16:5d102be2566c | 23 | Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(30302L); |
webOnBoard | 16:5d102be2566c | 24 | Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(18001L); |
webOnBoard | 16:5d102be2566c | 25 | Adafruit_L3GD20_Unified gyro = Adafruit_L3GD20_Unified(20L); |
webOnBoard | 16:5d102be2566c | 26 | |
webOnBoard | 16:5d102be2566c | 27 | |
webOnBoard | 16:5d102be2566c | 28 | // Update this with the correct SLP for accurate altitude measurements |
webOnBoard | 16:5d102be2566c | 29 | float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; |
webOnBoard | 16:5d102be2566c | 30 | |
webOnBoard | 16:5d102be2566c | 31 | mbed::I2C* i2c; |
webOnBoard | 16:5d102be2566c | 32 | Timer timer; |
hsgw | 13:25ce35614dd1 | 33 | |
hsgw | 13:25ce35614dd1 | 34 | EthernetInterface eth; |
hsgw | 13:25ce35614dd1 | 35 | |
hsgw | 13:25ce35614dd1 | 36 | TCPSocketServer svr; |
webOnBoard | 16:5d102be2566c | 37 | bool serverIsListening = false; |
hsgw | 13:25ce35614dd1 | 38 | |
hsgw | 13:25ce35614dd1 | 39 | TCPSocketConnection client; |
hsgw | 13:25ce35614dd1 | 40 | bool clientIsConnected = false; |
hsgw | 13:25ce35614dd1 | 41 | |
hsgw | 13:25ce35614dd1 | 42 | DigitalOut led1(LED1); //server listning status |
hsgw | 13:25ce35614dd1 | 43 | DigitalOut led2(LED2); //socket connecting status |
webOnBoard | 16:5d102be2566c | 44 | DigitalOut led3(LED3); //last color |
hsgw | 13:25ce35614dd1 | 45 | |
hsgw | 13:25ce35614dd1 | 46 | Ticker ledTick; |
webOnBoard | 16:5d102be2566c | 47 | HTTPServer create_simple_server() |
webOnBoard | 16:5d102be2566c | 48 | { |
webOnBoard | 16:5d102be2566c | 49 | HTTPServer srv; |
webOnBoard | 16:5d102be2566c | 50 | srv.add_request_handler("DELETE", new DeleteRequestHandler()); |
webOnBoard | 16:5d102be2566c | 51 | srv.add_request_handler("GET", new GetRequestHandler()); |
webOnBoard | 16:5d102be2566c | 52 | srv.add_request_handler("PUT", new PutRequestHandler()); |
webOnBoard | 16:5d102be2566c | 53 | return srv; |
webOnBoard | 16:5d102be2566c | 54 | } |
webOnBoard | 16:5d102be2566c | 55 | HTTPServer create_interactive_server() |
webOnBoard | 16:5d102be2566c | 56 | { |
webOnBoard | 16:5d102be2566c | 57 | HTTPServer srv(new InteractiveHTMLFormatter()); |
webOnBoard | 16:5d102be2566c | 58 | srv.add_request_handler("GET", new ComplexRequestHandler()); |
webOnBoard | 16:5d102be2566c | 59 | return srv; |
webOnBoard | 16:5d102be2566c | 60 | } |
webOnBoard | 16:5d102be2566c | 61 | HTTPServer create_simple_interactive_server() |
webOnBoard | 16:5d102be2566c | 62 | { |
webOnBoard | 16:5d102be2566c | 63 | HTTPServer srv(new InteractiveHTMLFormatter()); |
webOnBoard | 16:5d102be2566c | 64 | srv.add_request_handler("GET", new GetRequestHandler()); |
webOnBoard | 16:5d102be2566c | 65 | return srv; |
webOnBoard | 16:5d102be2566c | 66 | } |
hsgw | 13:25ce35614dd1 | 67 | |
hsgw | 13:25ce35614dd1 | 68 | void ledTickfunc() |
hsgw | 13:25ce35614dd1 | 69 | { |
webOnBoard | 16:5d102be2566c | 70 | if(serverIsListening) { |
hsgw | 13:25ce35614dd1 | 71 | led1 = !led1; |
hsgw | 13:25ce35614dd1 | 72 | } else { |
hsgw | 13:25ce35614dd1 | 73 | led1 = false; |
hsgw | 13:25ce35614dd1 | 74 | } |
hsgw | 13:25ce35614dd1 | 75 | } |
hsgw | 13:25ce35614dd1 | 76 | |
webOnBoard | 16:5d102be2566c | 77 | void setup(void) |
webOnBoard | 16:5d102be2566c | 78 | { |
webOnBoard | 16:5d102be2566c | 79 | |
webOnBoard | 16:5d102be2566c | 80 | printf("Adafruit 10DOF Tester \r\n"); |
webOnBoard | 16:5d102be2566c | 81 | |
webOnBoard | 16:5d102be2566c | 82 | /* Initialise the sensors */ |
webOnBoard | 16:5d102be2566c | 83 | if(!accel.begin()) |
webOnBoard | 16:5d102be2566c | 84 | { |
webOnBoard | 16:5d102be2566c | 85 | /* There was a problem detecting the ADXL345 ... check your connections */ |
webOnBoard | 16:5d102be2566c | 86 | printf("Ooops, no LSM303 detected ... Check your wiring!\r\n"); |
webOnBoard | 16:5d102be2566c | 87 | //while(1); |
webOnBoard | 16:5d102be2566c | 88 | } |
webOnBoard | 16:5d102be2566c | 89 | printf("Adafruit 10DOF Accel setup complete \r\n"); |
webOnBoard | 16:5d102be2566c | 90 | if(!mag.begin()) |
webOnBoard | 16:5d102be2566c | 91 | { |
webOnBoard | 16:5d102be2566c | 92 | /* There was a problem detecting the LSM303 ... check your connections */ |
webOnBoard | 16:5d102be2566c | 93 | printf("Ooops, no LSM303 detected ... Check your wiring!\r\n"); |
webOnBoard | 16:5d102be2566c | 94 | //while(1); |
webOnBoard | 16:5d102be2566c | 95 | } |
webOnBoard | 16:5d102be2566c | 96 | printf("Adafruit 10DOF Mag setup complete \r\n"); |
webOnBoard | 16:5d102be2566c | 97 | if(!gyro.begin()) |
webOnBoard | 16:5d102be2566c | 98 | { |
webOnBoard | 16:5d102be2566c | 99 | /* There was a problem detecting the L3GD20 ... check your connections */ |
webOnBoard | 16:5d102be2566c | 100 | printf("Ooops, no L3GD20 detected ... Check your wiring or I2C ADDR!\r\n"); |
webOnBoard | 16:5d102be2566c | 101 | //while(1); |
webOnBoard | 16:5d102be2566c | 102 | } |
webOnBoard | 16:5d102be2566c | 103 | printf("Adafruit 10DOF Gyro setup complete \r\n"); |
webOnBoard | 16:5d102be2566c | 104 | |
webOnBoard | 16:5d102be2566c | 105 | /* Display some basic information on this sensor */ |
webOnBoard | 16:5d102be2566c | 106 | //displaySensorDetails(); |
webOnBoard | 16:5d102be2566c | 107 | } |
webOnBoard | 16:5d102be2566c | 108 | |
webOnBoard | 16:5d102be2566c | 109 | /**************************************************************************/ |
webOnBoard | 16:5d102be2566c | 110 | /*! |
webOnBoard | 16:5d102be2566c | 111 | @brief Constantly check the roll/pitch/heading/altitude/temperature |
webOnBoard | 16:5d102be2566c | 112 | */ |
webOnBoard | 16:5d102be2566c | 113 | /**************************************************************************/ |
webOnBoard | 16:5d102be2566c | 114 | void loop(void) |
webOnBoard | 16:5d102be2566c | 115 | { |
webOnBoard | 16:5d102be2566c | 116 | sensors_event_t accel_event; |
webOnBoard | 16:5d102be2566c | 117 | sensors_event_t mag_event; |
webOnBoard | 16:5d102be2566c | 118 | sensors_vec_t orientation; |
webOnBoard | 16:5d102be2566c | 119 | |
webOnBoard | 16:5d102be2566c | 120 | |
webOnBoard | 16:5d102be2566c | 121 | /* Calculate pitch and roll from the raw accelerometer data */ |
webOnBoard | 16:5d102be2566c | 122 | accel.getEvent(&accel_event); |
webOnBoard | 16:5d102be2566c | 123 | if (dof.accelGetOrientation(&accel_event, &orientation)) |
webOnBoard | 16:5d102be2566c | 124 | { |
webOnBoard | 16:5d102be2566c | 125 | /* 'orientation' should have valid .roll and .pitch fields */ |
webOnBoard | 16:5d102be2566c | 126 | printf("Roll: %f \n\r",orientation.roll); |
webOnBoard | 16:5d102be2566c | 127 | printf("Pitch: %f \n\r",orientation.pitch); |
webOnBoard | 16:5d102be2566c | 128 | } |
webOnBoard | 16:5d102be2566c | 129 | |
webOnBoard | 16:5d102be2566c | 130 | /* Calculate the heading using the magnetometer */ |
webOnBoard | 16:5d102be2566c | 131 | mag.getEvent(&mag_event); |
webOnBoard | 16:5d102be2566c | 132 | if (dof.magGetOrientation(SENSOR_AXIS_Z, &mag_event, &orientation)) |
webOnBoard | 16:5d102be2566c | 133 | { |
webOnBoard | 16:5d102be2566c | 134 | /* 'orientation' should have valid .heading data now */ |
webOnBoard | 16:5d102be2566c | 135 | printf("Heading: %f\n\r", orientation.heading); |
webOnBoard | 16:5d102be2566c | 136 | } |
webOnBoard | 16:5d102be2566c | 137 | |
webOnBoard | 16:5d102be2566c | 138 | printf("\n\r"); |
webOnBoard | 16:5d102be2566c | 139 | } |
webOnBoard | 16:5d102be2566c | 140 | |
webOnBoard | 16:5d102be2566c | 141 | void getOrientation(char * xmlHeader){ |
webOnBoard | 16:5d102be2566c | 142 | sensors_event_t accel_event; |
webOnBoard | 16:5d102be2566c | 143 | sensors_event_t mag_event; |
webOnBoard | 16:5d102be2566c | 144 | sensors_event_t bmp_event; |
webOnBoard | 16:5d102be2566c | 145 | sensors_vec_t orientation; |
webOnBoard | 16:5d102be2566c | 146 | //float horizontal; |
webOnBoard | 16:5d102be2566c | 147 | //float vertical; |
webOnBoard | 16:5d102be2566c | 148 | uint32_t altitude = 1000;//rand() % 300 +1; |
webOnBoard | 16:5d102be2566c | 149 | uint32_t horizontal = 30;//rand() % 300 +1; |
webOnBoard | 16:5d102be2566c | 150 | uint32_t vertical = 45;//rand() % 300 +1; |
webOnBoard | 16:5d102be2566c | 151 | uint32_t heading = 33;//rand() % 300 +1; |
webOnBoard | 16:5d102be2566c | 152 | uint32_t switch1 = 0;//rand() % 1; |
webOnBoard | 16:5d102be2566c | 153 | uint32_t switch2 = 1;//rand() % 1; |
webOnBoard | 16:5d102be2566c | 154 | //char echoHeader[256] = {}; |
webOnBoard | 16:5d102be2566c | 155 | |
webOnBoard | 16:5d102be2566c | 156 | //accel.getEvent(&accel_event); |
webOnBoard | 16:5d102be2566c | 157 | //if (dof.accelGetOrientation(&accel_event, &orientation)){ |
webOnBoard | 16:5d102be2566c | 158 | // horizontal = (uint32_t) orientation.roll; |
webOnBoard | 16:5d102be2566c | 159 | // vertical = (uint32_t) orientation.pitch; |
webOnBoard | 16:5d102be2566c | 160 | //} |
webOnBoard | 16:5d102be2566c | 161 | sprintf(xmlHeader, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\r"); |
webOnBoard | 16:5d102be2566c | 162 | sprintf(xmlHeader, "<AHRS>\n\r"); |
webOnBoard | 16:5d102be2566c | 163 | sprintf(xmlHeader, " <DATA>\n\r"); |
webOnBoard | 16:5d102be2566c | 164 | sprintf(xmlHeader, " <HORIZONTAL>%d</HORIZONTAL>\n\r",horizontal); |
webOnBoard | 16:5d102be2566c | 165 | sprintf(xmlHeader, " <VERTICAL>%d</VERTICAL>\n\r",vertical); |
webOnBoard | 16:5d102be2566c | 166 | sprintf(xmlHeader, " <HEADING>%d</HEADING>\n\r",heading); |
webOnBoard | 16:5d102be2566c | 167 | sprintf(xmlHeader, " <SWITCH1>%d</SWITCH1>\n\r",switch1); |
webOnBoard | 16:5d102be2566c | 168 | sprintf(xmlHeader, " <SWITCH2>%d</SWITCH2>\n\r",switch2); |
webOnBoard | 16:5d102be2566c | 169 | sprintf(xmlHeader, " <COLOR>purple</COLOR>\n\r"); |
webOnBoard | 16:5d102be2566c | 170 | sprintf(xmlHeader, " </DATA>\n\r"); |
webOnBoard | 16:5d102be2566c | 171 | sprintf(xmlHeader, "</AHRS>\n\r"); |
webOnBoard | 16:5d102be2566c | 172 | sprintf(xmlHeader, "\n\r"); |
webOnBoard | 16:5d102be2566c | 173 | //return echoHeader; |
webOnBoard | 16:5d102be2566c | 174 | |
webOnBoard | 16:5d102be2566c | 175 | } |
webOnBoard | 16:5d102be2566c | 176 | |
hsgw | 13:25ce35614dd1 | 177 | int main (void) |
hsgw | 13:25ce35614dd1 | 178 | { |
hsgw | 13:25ce35614dd1 | 179 | ledTick.attach(&ledTickfunc,0.5); |
hsgw | 13:25ce35614dd1 | 180 | |
webOnBoard | 16:5d102be2566c | 181 | i2c = new mbed::I2C(I2C_SDA, I2C_SCL); |
webOnBoard | 16:5d102be2566c | 182 | |
webOnBoard | 16:5d102be2566c | 183 | setup(); |
webOnBoard | 16:5d102be2566c | 184 | loop(); |
webOnBoard | 16:5d102be2566c | 185 | |
webOnBoard | 16:5d102be2566c | 186 | EthernetInterface eth; |
hsgw | 13:25ce35614dd1 | 187 | //setup ethernet interface |
donatien | 0:bb128f0e952f | 188 | eth.init(); //Use DHCP |
donatien | 0:bb128f0e952f | 189 | eth.connect(); |
webOnBoard | 16:5d102be2566c | 190 | |
hsgw | 13:25ce35614dd1 | 191 | printf("IP Address is %s\n\r", eth.getIPAddress()); |
hsgw | 13:25ce35614dd1 | 192 | |
webOnBoard | 16:5d102be2566c | 193 | HTTPServer srv = create_simple_interactive_server();//create_interactive_server();//create_simple_server(); |
webOnBoard | 16:5d102be2566c | 194 | |
webOnBoard | 16:5d102be2566c | 195 | if(!srv.init(PORT)) |
webOnBoard | 16:5d102be2566c | 196 | { |
webOnBoard | 16:5d102be2566c | 197 | printf("Error while initializing the server\n"); |
webOnBoard | 16:5d102be2566c | 198 | eth.disconnect(); |
hsgw | 13:25ce35614dd1 | 199 | return -1; |
emilmont | 7:65188f4a8c25 | 200 | } |
webOnBoard | 16:5d102be2566c | 201 | srv.run(); |
webOnBoard | 16:5d102be2566c | 202 | |
donatien | 0:bb128f0e952f | 203 | } |