Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of AvnetATT_shape_hackathon by
Diff: main.cpp
- Revision:
- 35:4a5d307b9692
- Parent:
- 34:029e07b67a41
- Child:
- 36:515021fabf15
diff -r 029e07b67a41 -r 4a5d307b9692 main.cpp
--- a/main.cpp Sat Jul 23 01:10:53 2016 +0000
+++ b/main.cpp Tue Oct 10 13:21:06 2017 +0000
@@ -6,7 +6,6 @@
#include "config_me.h"
#include "wnc_control.h"
#include "sensors.h"
-
#include "hardware.h"
I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used
@@ -39,7 +38,7 @@
int mdm_dbgmask = MDM_DBG_OFF;
Serial pc(USBTX, USBRX);
-SerialBuffered mdm(PTD3, PTD2, 128);
+SerialBuffered mdm(PTD3, PTD2, 512);
DigitalOut led_green(LED_GREEN);
DigitalOut led_red(LED_RED);
DigitalOut led_blue(LED_BLUE);
@@ -61,7 +60,13 @@
#define MDM_OK 0
#define MDM_ERR_TIMEOUT -1
-#define MAX_AT_RSP_LEN 255
+#define MAX_AT_RSP_LEN 511
+
+//Periodic timer
+Ticker OneMsTicker;
+volatile bool bTimerExpiredFlag = false;
+int OneMsTicks = 0;
+int iTimer1Interval_ms = SENSOR_UPDATE_INTERVAL_MS;
ssize_t mdm_getline(char *buff, size_t size, int timeout_ms) {
int cin = -1;
@@ -275,39 +280,38 @@
.Humidity_Si7020 = "0"
};
-void GenerateModemString(char * modem_string)
+void GenerateModemString(char * modem_string0, char * modem_string1, char * modem_string2, char * modem_string3)
{
switch(iSensorsToReport)
{
case TEMP_HUMIDITY_ONLY:
{
- sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, FLOW_URL_TYPE, MY_SERVER_URL);
+ int mimo_length;
+ sprintf(modem_string0, "POST %s%s?db=iot_weather%s%s:%s\r\nAccept: */*\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_URL_TYPE, MY_SERVER_URL, MY_PORT_STR);
+ sprintf(modem_string2, "Content-Type: application/x-www-form-urlencoded\r\n\r\n");
+ mimo_length = sprintf(modem_string3, "datapoints,device=%s temperature=%s,humidity=%s", FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity);
+ sprintf(modem_string1, "Content-Length: %d\r\n", mimo_length);
break;
}
case TEMP_HUMIDITY_ACCELEROMETER:
{
- sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, FLOW_URL_TYPE, MY_SERVER_URL);
+ sprintf(modem_string0, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, FLOW_URL_TYPE, MY_SERVER_URL);
break;
}
case TEMP_HUMIDITY_ACCELEROMETER_PMODSENSORS:
{
- sprintf(modem_string, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s&proximity=%s&light_uv=%s&light_vis=%s&light_ir=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, SENSOR_DATA.Proximity, SENSOR_DATA.UVindex, SENSOR_DATA.AmbientLightVis, SENSOR_DATA.AmbientLightIr, FLOW_URL_TYPE, MY_SERVER_URL);
+ sprintf(modem_string0, "GET %s%s?serial=%s&temp=%s&humidity=%s&accelX=%s&accelY=%s&accelZ=%s&proximity=%s&light_uv=%s&light_vis=%s&light_ir=%s %s%s\r\n\r\n", FLOW_BASE_URL, FLOW_INPUT_NAME, FLOW_DEVICE_NAME, SENSOR_DATA.Temperature, SENSOR_DATA.Humidity, SENSOR_DATA.AccelX,SENSOR_DATA.AccelY,SENSOR_DATA.AccelZ, SENSOR_DATA.Proximity, SENSOR_DATA.UVindex, SENSOR_DATA.AmbientLightVis, SENSOR_DATA.AmbientLightIr, FLOW_URL_TYPE, MY_SERVER_URL);
break;
}
default:
{
- sprintf(modem_string, "Invalid sensor selected\r\n\r\n");
+ sprintf(modem_string0, "Invalid sensor selected\r\n\r\n");
break;
}
} //switch(iSensorsToReport)
} //GenerateModemString
-//Periodic timer
-Ticker OneMsTicker;
-volatile bool bTimerExpiredFlag = false;
-int OneMsTicks = 0;
-int iTimer1Interval_ms = 1000;
//********************************************************************************************************************************************
//* Periodic 1ms timer tick
//********************************************************************************************************************************************
@@ -473,8 +477,6 @@
//Create a 1ms timer tick function:
OneMsTicker.attach(OneMsFunction, 0.001f) ;
- iTimer1Interval_ms = SENSOR_UPDATE_INTERVAL_MS;
-
// Open the socket (connect to the server)
sockopen_mdm();
@@ -490,10 +492,19 @@
sprintf(SENSOR_DATA.Temperature, "%0.2f", CTOF(hts221.readTemperature()));
sprintf(SENSOR_DATA.Humidity, "%02d", hts221.readHumidity());
read_sensors(); //read available external sensors from a PMOD and the on-board motion sensor
- char modem_string[512];
- GenerateModemString(&modem_string[0]);
- printf(BLU "Sending to modem : %s" DEF "\n", modem_string);
- sockwrite_mdm(modem_string);
+ char msg_part0[64];
+ char msg_part1[64];
+ char msg_part2[64];
+ char msg_part3[64];
+ GenerateModemString(&msg_part0[0],&msg_part1[0],&msg_part2[0],&msg_part3[0]);
+ char * httprequest = new char[256];
+ std::strcpy(httprequest,msg_part0);
+ std::strcat(httprequest,msg_part1);
+ std::strcat(httprequest,msg_part2);
+ std::strcat(httprequest,msg_part3);
+ sockwrite_mdm(httprequest);
+ printf(BLU "Sending to modem : %s" DEF "\n", httprequest);
+ delete [] httprequest;
sockread_mdm(&MySocketData, 1024, 20);
// If any non-zero response from server, make it GREEN one-time
