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.
Dependencies: C027_Support M2XStreamClient Nucleo_Sensor_Shield jsonlite mbed-rtos mbed
Fork of Cellular_m2x-demo-all by
Diff: main.cpp
- Revision:
- 5:df776765d890
- Parent:
- 3:dac7a2335ba5
- Child:
- 6:7a1e717a0d1e
--- a/main.cpp Tue May 27 09:24:03 2014 +0000
+++ b/main.cpp Thu Jun 05 09:13:43 2014 +0000
@@ -3,6 +3,7 @@
#include "mbed.h"
#include "LM75B.h" //I2C Temperature Sensor
+#include "GPS.h" //GPS
//------------------------------------------------------------------------------------
// You need to configure these cellular modem / SIM parameters.
@@ -21,14 +22,15 @@
#define PASSWORD NULL
//------------------------------------------------------------------------------------
-char feedId[] = "<feed id>"; // Feed you want to post to
-char m2xKey[] = "<m2x api key>"; // Your M2X access key
-char streamName[] = "<stream name>"; // Stream you want to post to
+char feedId[] = "81b9fcc5a8585c55ae622488f50d8de0"; // Feed you want to post to
+char m2xKey[] = "1e1133cd475954868602c0f7503d4f22"; // Your M2X access key
+char streamName[] = "amb_temp"; // Stream you want to post to
char name[] = "<location name>"; // Name of current location of datasource
double latitude = 33.007872;
double longitude = -96.751614; // You can also read those values from a GPS
double elevation = 697.00;
+bool location_valid = false;
Client client;
M2XStreamClient m2xClient(&client, m2xKey);
@@ -54,39 +56,67 @@
int main() {
MDMSerial mdm;
+ GPSI2C gps;
//mdm.setDebug(4); // enable this for debugging issues
if (!mdm.connect(SIMPIN, APN,USERNAME,PASSWORD))
return -1;
-
- char amb_temp[6];
-
- while (true) {
+
+ char buf[256];
- // read temp
- sprintf(amb_temp, "%0.2f", tmp.read());
-
- // post temperature
- int response = m2xClient.post(feedId, streamName, amb_temp);
- printf("Post response code: %d\r\n", response);
- if (response == -1) while (true) ;
+ Timer tmr;
+ tmr.reset();
+ tmr.start();
+ while (true) {
+ int ret;
+ // extract the location information from the GPS NMEA data
+ while ((ret = gps.getMessage(buf, sizeof(buf))) > 0) {
+ int len = LENGTH(ret);
+ if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6)) {
+ if (!strncmp("$GPGGA", buf, 6)) {
+ char ch;
+ if (gps.getNmeaAngle(2,buf,len,latitude) &&
+ gps.getNmeaAngle(4,buf,len,longitude) &&
+ gps.getNmeaItem(6,buf,len,ch) &&
+ gps.getNmeaItem(9,buf,len,elevation)) {
+ printf("GPS Location: %.5f %.5f %.1f %c\r\n", latitude, longitude, elevation, ch);
+ location_valid = ch == '1' || ch == '2' || ch == '6';
+ }
+ }
+ }
+ }
- // read temperature
- response = m2xClient.fetchValues(feedId, streamName, on_data_point_found, NULL);
- printf("Fetch response code: %d\r\n", response);
- if (response == -1) while (true) ;
+ if (tmr.read_ms() > 60000) {
+ tmr.reset();
+ tmr.start();
+
+ // read temp
+ sprintf(buf, "%0.2f", tmp.read());
+
+ // post temperature
+ int response = m2xClient.post(feedId, streamName, buf);
+ printf("Post response code: %d\r\n", response);
+ if (response == -1) while (true) ;
+
+ // read temperature
+ response = m2xClient.fetchValues(feedId, streamName, on_data_point_found, NULL);
+ printf("Fetch response code: %d\r\n", response);
+ if (response == -1) while (true) ;
- // update location
- response = m2xClient.updateLocation(feedId, name, latitude, longitude, elevation);
- printf("updateLocation response code: %d\r\n", response);
- if (response == -1) while (true) ;
-
- // read location
- response = m2xClient.readLocation(feedId, on_location_found, NULL);
- printf("readLocation response code: %d\r\n", response);
- if (response == -1) while (true) ;
-
- // wait 60 secs and then loop
- delay(60000);
+ // update location
+ if (location_valid) {
+ response = m2xClient.updateLocation(feedId, name, latitude, longitude, elevation);
+ printf("updateLocation response code: %d\r\n", response);
+ if (response == -1) while (true) ;
+ }
+
+ // read location
+ response = m2xClient.readLocation(feedId, on_location_found, NULL);
+ printf("readLocation response code: %d\r\n", response);
+ if (response == -1) while (true) ;
+ }
+ else {
+ delay(100);
+ }
}
mdm.disconnect();
