All sensors sending to server via http

Dependencies:   C12832 CCS811 MMA7660 Sht31 TSL2561 mbed-http vl53l0x_api

Fork of HTTP-Python-Demo by Cambridge Hackathon

Committer:
lwc24
Date:
Sat Nov 25 20:53:09 2017 +0000
Revision:
3:409108394e75
Parent:
2:b91140c3c3f6
Child:
4:061755016e24
Working sensor readings sending to server

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenny Plunkett 0:c5b042cf8162 1 //----------------------------------------------------------------------------
Jenny Plunkett 0:c5b042cf8162 2 // The confidential and proprietary information contained in this file may
Jenny Plunkett 0:c5b042cf8162 3 // only be used by a person authorised under and to the extent permitted
Jenny Plunkett 0:c5b042cf8162 4 // by a subsisting licensing agreement from ARM Limited or its affiliates.
Jenny Plunkett 0:c5b042cf8162 5 //
Jenny Plunkett 0:c5b042cf8162 6 // (C) COPYRIGHT 2016 ARM Limited or its affiliates.
Jenny Plunkett 0:c5b042cf8162 7 // ALL RIGHTS RESERVED
Jenny Plunkett 0:c5b042cf8162 8 //
Jenny Plunkett 0:c5b042cf8162 9 // This entire notice must be reproduced on all copies of this file
Jenny Plunkett 0:c5b042cf8162 10 // and copies of this file may only be made by a person if such person is
Jenny Plunkett 0:c5b042cf8162 11 // permitted to do so under the terms of a subsisting license agreement
Jenny Plunkett 0:c5b042cf8162 12 // from ARM Limited or its affiliates.
Jenny Plunkett 0:c5b042cf8162 13 //----------------------------------------------------------------------------
lwc24 3:409108394e75 14 #include <sstream>
lwc24 3:409108394e75 15 #include <string>
lwc24 3:409108394e75 16
Jenny Plunkett 0:c5b042cf8162 17 #include "mbed.h"
Jenny Plunkett 0:c5b042cf8162 18 #include "OdinWiFiInterface.h"
Jenny Plunkett 0:c5b042cf8162 19 #include "http_request.h"
Jenny Plunkett 0:c5b042cf8162 20
lwc24 3:409108394e75 21 #include "C12832.h"
lwc24 3:409108394e75 22 #include "CCS811.h"
lwc24 3:409108394e75 23 #include "Sht31.h"
lwc24 3:409108394e75 24 #include "TSL2561.h"
lwc24 3:409108394e75 25 #include "MMA7660.h"
lwc24 3:409108394e75 26
lwc24 3:409108394e75 27 #include "vl53l0x_api.h"
lwc24 3:409108394e75 28 #include "vl53l0x_platform.h"
lwc24 3:409108394e75 29 #include "vl53l0x_i2c_platform.h"
lwc24 3:409108394e75 30
lwc24 3:409108394e75 31 #define USE_I2C_2V8
lwc24 3:409108394e75 32
lwc24 3:409108394e75 33 struct vector {
lwc24 3:409108394e75 34 public:
lwc24 3:409108394e75 35 double x, y, z;
lwc24 3:409108394e75 36 vector (double xval, double yval, double zval) : x(xval), y(yval), z(zval) {};
lwc24 3:409108394e75 37 };
lwc24 3:409108394e75 38
Jenny Plunkett 0:c5b042cf8162 39 // GLOBAL VARIABLES HERE
lwc24 3:409108394e75 40 C12832 lcd(PE_14, PE_12, PD_12, PD_11, PE_9);
lwc24 3:409108394e75 41 DigitalOut led(PB_6, 1);
lwc24 3:409108394e75 42 Sht31 temp_sensor(PF_0, PF_1);
lwc24 3:409108394e75 43 CCS811 air_sensor(PF_0, PF_1);
lwc24 3:409108394e75 44 TSL2561 light_sensor(PF_0, PF_1, TSL2561_ADDR_HIGH);
lwc24 3:409108394e75 45 MMA7660 accel(PF_0, PF_1);
lwc24 3:409108394e75 46
lwc24 3:409108394e75 47 OdinWiFiInterface wifi;
lwc24 3:409108394e75 48
lwc24 3:409108394e75 49 InterruptIn post_button(PF_2);
lwc24 3:409108394e75 50 InterruptIn get_put_button(PG_4);
lwc24 3:409108394e75 51 volatile bool post_clicked = false;
lwc24 3:409108394e75 52 volatile bool get_clicked = false;
lwc24 3:409108394e75 53 volatile bool put_clicked = false;
lwc24 3:409108394e75 54
lwc24 3:409108394e75 55 // FUNCTION DEFINITIONS HERE
lwc24 3:409108394e75 56 void lcd_print(const char* message) {
lwc24 3:409108394e75 57 lcd.cls();
lwc24 3:409108394e75 58 lcd.locate(0, 3);
lwc24 3:409108394e75 59 lcd.printf(message);
lwc24 3:409108394e75 60 }
Jenny Plunkett 0:c5b042cf8162 61
Jenny Plunkett 0:c5b042cf8162 62
lwc24 3:409108394e75 63 float * read_temp() {
lwc24 3:409108394e75 64 float t = temp_sensor.readTemperature();
lwc24 3:409108394e75 65 float h = temp_sensor.readHumidity();
lwc24 3:409108394e75 66 //char val[32];
lwc24 3:409108394e75 67 //sprintf(val, "TEMP: %3.2fC, HUM: %3.2f%%", t, h);
lwc24 3:409108394e75 68 //lcd_print(val);
lwc24 3:409108394e75 69 static float out[2];
lwc24 3:409108394e75 70 out[0] = t;
lwc24 3:409108394e75 71 out[1] = h;
lwc24 3:409108394e75 72 return out;
lwc24 3:409108394e75 73 }
lwc24 3:409108394e75 74
lwc24 3:409108394e75 75 uint16_t * read_air() {
lwc24 3:409108394e75 76 air_sensor.init();
lwc24 3:409108394e75 77 uint16_t eco2, tvoc;
lwc24 3:409108394e75 78 air_sensor.readData(&eco2, &tvoc);
lwc24 3:409108394e75 79 //char val[32];
lwc24 3:409108394e75 80 //sprintf(val, "eCO2: %dppm, TVOC: %dppb", eco2, tvoc);
lwc24 3:409108394e75 81 //lcd_print(val);
lwc24 3:409108394e75 82 static uint16_t out[2];
lwc24 3:409108394e75 83 out[0] = eco2;
lwc24 3:409108394e75 84 out[1] = tvoc;
lwc24 3:409108394e75 85 return out;
lwc24 3:409108394e75 86 }
lwc24 3:409108394e75 87
lwc24 3:409108394e75 88 int * read_light() {
lwc24 3:409108394e75 89 int vis = light_sensor.getLuminosity(TSL2561_VISIBLE);
lwc24 3:409108394e75 90 int infr = light_sensor.getLuminosity(TSL2561_INFRARED);
lwc24 3:409108394e75 91 //char val[32];
lwc24 3:409108394e75 92 //sprintf(val, "VIS: %d, INFR: %d ", vis, infr);
lwc24 3:409108394e75 93 //lcd_print(val);
lwc24 3:409108394e75 94 static int out[2];
lwc24 3:409108394e75 95 out[0] = vis;
lwc24 3:409108394e75 96 out[1] = infr;
lwc24 3:409108394e75 97 return out;
lwc24 3:409108394e75 98 }
lwc24 3:409108394e75 99
lwc24 3:409108394e75 100
lwc24 3:409108394e75 101 double * read_accel() {
lwc24 3:409108394e75 102 double x = accel.x();
lwc24 3:409108394e75 103 double y = accel.y();
lwc24 3:409108394e75 104 double z = accel.z();
lwc24 3:409108394e75 105 //char val[32];
lwc24 3:409108394e75 106 //sprintf(val, "x=%.2f y=%.2f z=%.2f", x, y, z);
lwc24 3:409108394e75 107 //lcd_print(val);
lwc24 3:409108394e75 108 static double out[3];
lwc24 3:409108394e75 109 out[0] = x;
lwc24 3:409108394e75 110 out[1] = y;
lwc24 3:409108394e75 111 out[2] = z;
lwc24 3:409108394e75 112 return out;
lwc24 3:409108394e75 113 }
lwc24 3:409108394e75 114
lwc24 3:409108394e75 115
Jenny Plunkett 0:c5b042cf8162 116
lwc24 3:409108394e75 117 VL53L0X_Error WaitMeasurementDataReady(VL53L0X_DEV Dev) {
lwc24 3:409108394e75 118 VL53L0X_Error Status = VL53L0X_ERROR_NONE;
lwc24 3:409108394e75 119 uint8_t NewDatReady=0;
lwc24 3:409108394e75 120 uint32_t LoopNb;
lwc24 3:409108394e75 121
lwc24 3:409108394e75 122 if (Status == VL53L0X_ERROR_NONE) {
lwc24 3:409108394e75 123 LoopNb = 0;
lwc24 3:409108394e75 124 do {
lwc24 3:409108394e75 125 Status = VL53L0X_GetMeasurementDataReady(Dev, &NewDatReady);
lwc24 3:409108394e75 126 if ((NewDatReady == 0x01) || Status != VL53L0X_ERROR_NONE) {
lwc24 3:409108394e75 127 break;
lwc24 3:409108394e75 128 }
lwc24 3:409108394e75 129 LoopNb = LoopNb + 1;
lwc24 3:409108394e75 130 VL53L0X_PollingDelay(Dev);
lwc24 3:409108394e75 131 } while (LoopNb < VL53L0X_DEFAULT_MAX_LOOP);
lwc24 3:409108394e75 132
lwc24 3:409108394e75 133 if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) {
lwc24 3:409108394e75 134 Status = VL53L0X_ERROR_TIME_OUT;
lwc24 3:409108394e75 135 }
lwc24 3:409108394e75 136 }
lwc24 3:409108394e75 137
lwc24 3:409108394e75 138 return Status;
lwc24 3:409108394e75 139 }
lwc24 3:409108394e75 140
lwc24 3:409108394e75 141 VL53L0X_Error WaitStopCompleted(VL53L0X_DEV Dev) {
lwc24 3:409108394e75 142 VL53L0X_Error Status = VL53L0X_ERROR_NONE;
lwc24 3:409108394e75 143 uint32_t StopCompleted=0;
lwc24 3:409108394e75 144 uint32_t LoopNb;
lwc24 3:409108394e75 145
lwc24 3:409108394e75 146 if (Status == VL53L0X_ERROR_NONE) {
lwc24 3:409108394e75 147 LoopNb = 0;
lwc24 3:409108394e75 148 do {
lwc24 3:409108394e75 149 Status = VL53L0X_GetStopCompletedStatus(Dev, &StopCompleted);
lwc24 3:409108394e75 150 if ((StopCompleted == 0x00) || Status != VL53L0X_ERROR_NONE) {
lwc24 3:409108394e75 151 break;
lwc24 3:409108394e75 152 }
lwc24 3:409108394e75 153 LoopNb = LoopNb + 1;
lwc24 3:409108394e75 154 VL53L0X_PollingDelay(Dev);
lwc24 3:409108394e75 155 } while (LoopNb < VL53L0X_DEFAULT_MAX_LOOP);
lwc24 3:409108394e75 156
lwc24 3:409108394e75 157 if (LoopNb >= VL53L0X_DEFAULT_MAX_LOOP) {
lwc24 3:409108394e75 158 Status = VL53L0X_ERROR_TIME_OUT;
lwc24 3:409108394e75 159 }
lwc24 3:409108394e75 160
lwc24 3:409108394e75 161 }
lwc24 3:409108394e75 162
lwc24 3:409108394e75 163 return Status;
lwc24 3:409108394e75 164 }
lwc24 3:409108394e75 165
lwc24 3:409108394e75 166 void send_post() {
lwc24 3:409108394e75 167 post_clicked = true;
lwc24 3:409108394e75 168 }
lwc24 3:409108394e75 169
lwc24 3:409108394e75 170 void send_put() {
lwc24 3:409108394e75 171 put_clicked = true;
lwc24 3:409108394e75 172 }
Jenny Plunkett 0:c5b042cf8162 173
Jenny Plunkett 0:c5b042cf8162 174 int main() {
Jenny Plunkett 0:c5b042cf8162 175
lwc24 3:409108394e75 176 // Initialize reading variables
lwc24 3:409108394e75 177 int var=1, measure=0;
lwc24 3:409108394e75 178 int ave=0, sum=0;
lwc24 3:409108394e75 179 double * acc;
lwc24 3:409108394e75 180 int * light;
lwc24 3:409108394e75 181 uint16_t * air;
lwc24 3:409108394e75 182 float * temp;
lwc24 3:409108394e75 183
lwc24 3:409108394e75 184 // Setup Laser
lwc24 3:409108394e75 185 VL53L0X_Dev_t MyDevice;
lwc24 3:409108394e75 186 VL53L0X_Dev_t *pMyDevice = &MyDevice;
lwc24 3:409108394e75 187 VL53L0X_RangingMeasurementData_t RangingMeasurementData;
lwc24 3:409108394e75 188 VL53L0X_RangingMeasurementData_t *pRangingMeasurementData = &RangingMeasurementData;
lwc24 3:409108394e75 189
lwc24 3:409108394e75 190 // Initialize Comms laster
lwc24 3:409108394e75 191 pMyDevice->I2cDevAddr = 0x52;
lwc24 3:409108394e75 192 pMyDevice->comms_type = 1;
lwc24 3:409108394e75 193 pMyDevice->comms_speed_khz = 400;
lwc24 3:409108394e75 194
lwc24 3:409108394e75 195
lwc24 3:409108394e75 196 VL53L0X_RdWord(&MyDevice, VL53L0X_REG_OSC_CALIBRATE_VAL,0);
lwc24 3:409108394e75 197 VL53L0X_DataInit(&MyDevice);
lwc24 3:409108394e75 198 uint32_t refSpadCount;
lwc24 3:409108394e75 199 uint8_t isApertureSpads;
lwc24 3:409108394e75 200 uint8_t VhvSettings;
lwc24 3:409108394e75 201 uint8_t PhaseCal;
lwc24 3:409108394e75 202
lwc24 3:409108394e75 203 VL53L0X_StaticInit(pMyDevice);
lwc24 3:409108394e75 204 VL53L0X_PerformRefSpadManagement(pMyDevice, &refSpadCount, &isApertureSpads); // Device Initialization
lwc24 3:409108394e75 205 VL53L0X_PerformRefCalibration(pMyDevice, &VhvSettings, &PhaseCal); // Device Initialization
lwc24 3:409108394e75 206 VL53L0X_SetDeviceMode(pMyDevice, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING); // Setup in single ranging mode
lwc24 3:409108394e75 207 VL53L0X_SetLimitCheckValue(pMyDevice, VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE, (FixPoint1616_t)(0.25*65536)); //High Accuracy mode, see API PDF
lwc24 3:409108394e75 208 VL53L0X_SetLimitCheckValue(pMyDevice, VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE, (FixPoint1616_t)(18*65536)); //High Accuracy mode, see API PDF
lwc24 3:409108394e75 209 VL53L0X_SetMeasurementTimingBudgetMicroSeconds(pMyDevice, 200000); //High Accuracy mode, see API PDF
lwc24 3:409108394e75 210 VL53L0X_StartMeasurement(pMyDevice);
Jenny Plunkett 0:c5b042cf8162 211
lwc24 3:409108394e75 212 // Setup wifi
lwc24 3:409108394e75 213 lcd_print("Connecting...");
lwc24 3:409108394e75 214 int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
lwc24 3:409108394e75 215 if (ret != 0) {
lwc24 3:409108394e75 216 lcd_print("Connection error.");
lwc24 3:409108394e75 217 return -1;
lwc24 3:409108394e75 218 }
lwc24 3:409108394e75 219 lcd_print("Successfully connected!");
lwc24 3:409108394e75 220 //char ipaddress[] = "http://10.25.1.118:5000";
lwc24 3:409108394e75 221
lwc24 3:409108394e75 222 post_button.rise(&send_post);
lwc24 3:409108394e75 223 get_put_button.rise(&send_put);
lwc24 3:409108394e75 224 while (true) {
lwc24 3:409108394e75 225
lwc24 3:409108394e75 226 // Get laser measurement
lwc24 3:409108394e75 227 while(var<=4){
lwc24 3:409108394e75 228 WaitMeasurementDataReady(pMyDevice);
lwc24 3:409108394e75 229 VL53L0X_GetRangingMeasurementData(pMyDevice, pRangingMeasurementData);
lwc24 3:409108394e75 230 measure=pRangingMeasurementData->RangeMilliMeter;
lwc24 3:409108394e75 231 sum=sum+measure;
lwc24 3:409108394e75 232 VL53L0X_ClearInterruptMask(pMyDevice, VL53L0X_REG_SYSTEM_INTERRUPT_GPIO_NEW_SAMPLE_READY);
lwc24 3:409108394e75 233 VL53L0X_PollingDelay(pMyDevice);
lwc24 3:409108394e75 234 var++;
lwc24 3:409108394e75 235 }
lwc24 3:409108394e75 236 ave=sum/var; // This is the measurement value
lwc24 3:409108394e75 237 var=1;
lwc24 3:409108394e75 238 sum=0;
lwc24 3:409108394e75 239
lwc24 3:409108394e75 240 // Get accelerometer measurement
lwc24 3:409108394e75 241 acc = read_accel();
lwc24 3:409108394e75 242
lwc24 3:409108394e75 243 light = read_light();
lwc24 3:409108394e75 244
lwc24 3:409108394e75 245 //temp = read_temp();
lwc24 3:409108394e75 246 temp[0] = 0;
lwc24 3:409108394e75 247 temp[1] = 1;
lwc24 3:409108394e75 248
lwc24 3:409108394e75 249 //air = read_air();
lwc24 3:409108394e75 250 air[0] = 0;
lwc24 3:409108394e75 251 air[1] = 0;
lwc24 3:409108394e75 252
lwc24 3:409108394e75 253 if (post_clicked) {
lwc24 3:409108394e75 254 //post_clicked = false;
lwc24 3:409108394e75 255 NetworkInterface* net = &wifi;
lwc24 3:409108394e75 256 HttpRequest* request = new HttpRequest(net, HTTP_POST, "http://10.25.1.118:5000");
lwc24 3:409108394e75 257 request->set_header("Content-Type", "application/json");
lwc24 3:409108394e75 258 //const char body[] = "{\"post\":\"request\" , \"message\" : \"hello\" }";
lwc24 3:409108394e75 259 std::ostringstream datastr;
lwc24 3:409108394e75 260 datastr << "{ \"dist\" : " << ave <<
lwc24 3:409108394e75 261 ", \"acceleration\" : { \"x\" : " << acc[0] << ", \"y\" : " << acc[1] << ", \"z\": " << acc[2] << "}" << \
lwc24 3:409108394e75 262 ", \"co2\" : " << air[0] << ", \"voc\" : " << air[1] << \
lwc24 3:409108394e75 263 ", \"visible\" : " << light[0] << ", \"infared\" : " << light[1] << \
lwc24 3:409108394e75 264 ", \"temperature\" : " << temp[0] << ", \"humidity\" : " << temp[1] << " }";
lwc24 3:409108394e75 265 std::string dstr = datastr.str();
lwc24 3:409108394e75 266 //const char body[] = dstr.c_str();
lwc24 3:409108394e75 267 HttpResponse* response = request->send(dstr.c_str(), strlen(dstr.c_str()));
lwc24 3:409108394e75 268 lcd_print(response->get_body_as_string().c_str());
lwc24 3:409108394e75 269 delete request;
lwc24 3:409108394e75 270 }
lwc24 3:409108394e75 271
lwc24 3:409108394e75 272 if (put_clicked) {
lwc24 3:409108394e75 273 put_clicked = false;
lwc24 3:409108394e75 274 post_clicked = false;
lwc24 3:409108394e75 275 NetworkInterface* net = &wifi;
lwc24 3:409108394e75 276 HttpRequest* request = new HttpRequest(net, HTTP_PUT, "http://IP_ADDRESS_HERE:8080");
lwc24 3:409108394e75 277 request->set_header("Content-Type", "application/json");
lwc24 3:409108394e75 278 const char body[] = "{\"put\":\"request\"}";
lwc24 3:409108394e75 279 HttpResponse* response = request->send(body, strlen(body));
lwc24 3:409108394e75 280 lcd_print(response->get_body_as_string().c_str());
lwc24 3:409108394e75 281 delete request;
lwc24 3:409108394e75 282 }
lwc24 3:409108394e75 283
lwc24 3:409108394e75 284 //wait_ms(10);
lwc24 3:409108394e75 285
lwc24 3:409108394e75 286 }
Jenny Plunkett 0:c5b042cf8162 287
Jenny Plunkett 0:c5b042cf8162 288 }