Modified to run on Renesas GR Peach board

Dependencies:   EthernetInterface HTTP-Server Webpage mbed-rpc mbed-src

Fork of HTTPServer_echoback by Takuya Urakawa

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?

UserRevisionLine numberNew 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 }