All sensors sending to server via http
Dependencies: C12832 CCS811 MMA7660 Sht31 TSL2561 mbed-http vl53l0x_api
Fork of HTTP-Python-Demo by
Diff: main.cpp
- Revision:
- 4:061755016e24
- Parent:
- 3:409108394e75
--- a/main.cpp Sat Nov 25 20:53:09 2017 +0000
+++ b/main.cpp Sun Nov 26 02:23:40 2017 +0000
@@ -13,6 +13,7 @@
//----------------------------------------------------------------------------
#include <sstream>
#include <string>
+#include <time.h>
#include "mbed.h"
#include "OdinWiFiInterface.h"
@@ -30,12 +31,6 @@
#define USE_I2C_2V8
-struct vector {
- public:
- double x, y, z;
- vector (double xval, double yval, double zval) : x(xval), y(yval), z(zval) {};
-};
-
// GLOBAL VARIABLES HERE
C12832 lcd(PE_14, PE_12, PD_12, PD_11, PE_9);
DigitalOut led(PB_6, 1);
@@ -173,14 +168,6 @@
int main() {
- // Initialize reading variables
- int var=1, measure=0;
- int ave=0, sum=0;
- double * acc;
- int * light;
- uint16_t * air;
- float * temp;
-
// Setup Laser
VL53L0X_Dev_t MyDevice;
VL53L0X_Dev_t *pMyDevice = &MyDevice;
@@ -192,7 +179,6 @@
pMyDevice->comms_type = 1;
pMyDevice->comms_speed_khz = 400;
-
VL53L0X_RdWord(&MyDevice, VL53L0X_REG_OSC_CALIBRATE_VAL,0);
VL53L0X_DataInit(&MyDevice);
uint32_t refSpadCount;
@@ -217,14 +203,36 @@
return -1;
}
lcd_print("Successfully connected!");
- //char ipaddress[] = "http://10.25.1.118:5000";
+
+ // Initialize reading variables
+ int var=1, measure=0;
+ int ave=0, sum=0;
+ double * acc;
+ int * light;
+ uint16_t * air;
+ float * temp;
+ //auto time0 = chrono::steady_clock::now();
+
+ int counter = 0;
+ int buffer_size = 10;
+ int buffer_time[buffer_size];
+ double buffer_acc[buffer_size][3];
+ int buffer_dist[buffer_size];
+ int buffer_light[buffer_size][2];
+ uint16_t buffer_air[buffer_size][2];
+ float buffer_temp[buffer_size][2];
post_button.rise(&send_post);
get_put_button.rise(&send_put);
+
+ Timer t;
+
+ t.start();
+
while (true) {
// Get laser measurement
- while(var<=4){
+ while(var<=2){
WaitMeasurementDataReady(pMyDevice);
VL53L0X_GetRangingMeasurementData(pMyDevice, pRangingMeasurementData);
measure=pRangingMeasurementData->RangeMilliMeter;
@@ -236,49 +244,117 @@
ave=sum/var; // This is the measurement value
var=1;
sum=0;
+
+ // TIMINGS
+ int now_time = t.read_ms();
+ std::ostringstream timestr;
+ timestr << "Elapsed time: " << now_time/1000 << "\n Press SW1 to send data";
+ std::string tstr = timestr.str();
+
+ //std::ostringstream timestr;
+ //timestr << counter;
+ //std:string tstr = timestr.str();
+ //lcd_print(tstr.c_str());
+
+ //buffer is sent via http when it is full
+ buffer_time[counter] = now_time;
+ //buffer_time[counter] = 0;
+ buffer_dist[counter] = ave;
// Get accelerometer measurement
acc = read_accel();
-
+ buffer_acc[counter][0] = acc[0];
+ buffer_acc[counter][1] = acc[1];
+ buffer_acc[counter][2] = acc[2];
light = read_light();
-
+ buffer_light[counter][0] = light[0];
+ buffer_light[counter][1] = light[1];
//temp = read_temp();
- temp[0] = 0;
- temp[1] = 1;
+ //buffer_temp[counter][0] = temp[0];
+ //buffer_temp[counter][0] = temp[1];
+ //air = read_air();
+ //buffer_air[counter][0] = air[0];
+ //buffer_air[counter][0] = air[1];
- //air = read_air();
- air[0] = 0;
- air[1] = 0;
+ counter += 1;
+
+ if (counter >= buffer_size) {
+ counter = 0;
+ lcd_print(tstr.c_str());
- if (post_clicked) {
- //post_clicked = false;
- NetworkInterface* net = &wifi;
- HttpRequest* request = new HttpRequest(net, HTTP_POST, "http://10.25.1.118:5000");
- request->set_header("Content-Type", "application/json");
- //const char body[] = "{\"post\":\"request\" , \"message\" : \"hello\" }";
- std::ostringstream datastr;
- datastr << "{ \"dist\" : " << ave <<
- ", \"acceleration\" : { \"x\" : " << acc[0] << ", \"y\" : " << acc[1] << ", \"z\": " << acc[2] << "}" << \
- ", \"co2\" : " << air[0] << ", \"voc\" : " << air[1] << \
- ", \"visible\" : " << light[0] << ", \"infared\" : " << light[1] << \
- ", \"temperature\" : " << temp[0] << ", \"humidity\" : " << temp[1] << " }";
- std::string dstr = datastr.str();
- //const char body[] = dstr.c_str();
- HttpResponse* response = request->send(dstr.c_str(), strlen(dstr.c_str()));
- lcd_print(response->get_body_as_string().c_str());
- delete request;
+ if (post_clicked) {
+ lcd_print("Sending Data... \nPress SW2 to stop.");
+ //post_clicked = false;
+ NetworkInterface* net = &wifi;
+ HttpRequest* request = new HttpRequest(net, HTTP_POST, "http://10.25.1.118:5000");
+ request->set_header("Content-Type", "application/json");
+ std::ostringstream datastr;
+
+ datastr << "{ \"time\" : [ " << buffer_time[0];
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", " << buffer_time[i];
+ }
+ datastr << " ], ";
+
+ datastr << " \"dist\" : [ " << buffer_dist[0];
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", " << buffer_dist[i];
+ }
+ datastr << " ], ";
+
+ datastr << " \"acc\" : [ ";
+ datastr << "{ \"x\" : " << buffer_acc[0][0] << ", \"y\" : " << buffer_acc[0][1] << ", \"z\": " << buffer_acc[0][2] << "}" ;
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", { \"x\" : " << buffer_acc[i][0] << ", \"y\" : " << buffer_acc[i][1] << ", \"z\": " << buffer_acc[i][2] << "}" ;
+ }
+
+ // Light
+ datastr << "], ";
+ datastr << " \"visible\" : [ " << buffer_light[0][0];
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", " << buffer_light[i][0];
+ }
+ datastr << " ], ";
+ datastr << " \"infared\" : [ " << buffer_light[0][1];
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", " << buffer_light[i][1];
+ }
+ datastr << " ] ";
+
+ /*
+ // Temperature
+ datastr << " ], ";
+ datastr << " \"temp\" : [ ";
+ datastr << "{ \"temperature\" : " << buffer_temp[0][0] << ", \"humidity\" : " << buffer_temp[0][1] << "}" ;
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", { \"visible\" : " << buffer_temp[i][0] << ", \"infared\" : " << buffer_temp[i][1] << "}" ;
+ }
+
+ // Air
+ datastr << " ], ";
+ datastr << " \"air\" : [ ";
+ datastr << "{ \"eco2\" : " << buffer_air[0][0] << ", \"tvoc\" : " << buffer_air[0][1] << "}" ;
+ for(int i=1; i<buffer_size; i++){
+ datastr << ", { \"eco2\" : " << buffer_air[i][0] << ", \"tvoc\" : " << buffer_air[i][1] << "}" ;
+ }
+ */
+
+ datastr << "}";
+
+ std::string dstr = datastr.str();
+ HttpResponse* response = request->send(dstr.c_str(), strlen(dstr.c_str()));
+
+ //const char body[] = "{ \"key1\" : \"value1\" }";
+ //HttpResponse* response = request->send(body, strlen(body));
+ //lcd_print(response->get_body_as_string().c_str());
+ delete request;
+ }
}
if (put_clicked) {
+ lcd_print("Stopped Sending Data...");
put_clicked = false;
post_clicked = false;
- NetworkInterface* net = &wifi;
- HttpRequest* request = new HttpRequest(net, HTTP_PUT, "http://IP_ADDRESS_HERE:8080");
- request->set_header("Content-Type", "application/json");
- const char body[] = "{\"put\":\"request\"}";
- HttpResponse* response = request->send(body, strlen(body));
- lcd_print(response->get_body_as_string().c_str());
- delete request;
}
//wait_ms(10);
