Public Repository for IoT demo, leveraging the FRDM-K64F, WNC Cellular Modem, and AT&T M2X platform. Expects GPIO input from a sensor to send a discrete value to M2X.

Dependencies:   ConfigFile M2XStreamClient-JMF PinDetect SDFileSystem WNCInterface jsonlite mbed-rtos mbed

Fork of SVP_IoT_M2X_Cellular by Casey Bleeker

Committer:
geekbleek
Date:
Tue Feb 07 23:41:18 2017 +0000
Revision:
4:b9f2193b27cf
Parent:
2:eb0768c06c1b
Child:
5:f03cda4a4cc9
My Sensor Code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:62feed0f1fd9 1 //
JMF 0:62feed0f1fd9 2 // This file contains an example implementation of M2X using the HTTP interface as the underlying
JMF 0:62feed0f1fd9 3 // transport.
JMF 0:62feed0f1fd9 4 //
JMF 0:62feed0f1fd9 5
JMF 0:62feed0f1fd9 6 #include "mbed.h"
JMF 0:62feed0f1fd9 7 #include "WNCInterface.h"
JMF 0:62feed0f1fd9 8
JMF 0:62feed0f1fd9 9 #define MBED_PLATFORM
JMF 0:62feed0f1fd9 10 #define M2X_ENABLE_READER
JMF 0:62feed0f1fd9 11
JMF 0:62feed0f1fd9 12 #include <jsonlite.h>
JMF 0:62feed0f1fd9 13 #include "M2XStreamClient.h"
JMF 0:62feed0f1fd9 14
JMF 0:62feed0f1fd9 15 #define CRLF "\n\r"
JMF 0:62feed0f1fd9 16
geekbleek 4:b9f2193b27cf 17 char deviceId[] = "3263056a467bc4eacd787bb0af9c1ad6"; // Device you want to post to
geekbleek 4:b9f2193b27cf 18 char m2xKey[] = "0aad274b67c7faa8110769ae9d739033"; // Your M2X API Key or Master API Key
JMF 0:62feed0f1fd9 19
JMF 0:62feed0f1fd9 20 const char *hstreamName = "humidity";
JMF 0:62feed0f1fd9 21 const char *tstreamName = "temperature";
JMF 0:62feed0f1fd9 22 const char *streamNames[] = { tstreamName, hstreamName };
JMF 0:62feed0f1fd9 23 char name[] = "Wake Forest"; // Name of current location of datasource
JMF 0:62feed0f1fd9 24
JMF 0:62feed0f1fd9 25 int counts[] = { 2, 1 };
JMF 0:62feed0f1fd9 26 const char *ats[] = { "2016-09-09T02:05:14.692Z",
JMF 0:62feed0f1fd9 27 "2016-09-09T02:05:14.700Z",
JMF 0:62feed0f1fd9 28 "2016-09-09T02:05:14.692Z" };
JMF 0:62feed0f1fd9 29 double values[] = { 10.9, 11.2, 6.1 };
JMF 0:62feed0f1fd9 30
JMF 0:62feed0f1fd9 31 char fromTime[]= "1969-12-31T19:00:01.000Z"; // yyyy-mm-ddTHH:MM:SS.SSSZ
JMF 0:62feed0f1fd9 32 char endTime[25];
JMF 0:62feed0f1fd9 33
JMF 0:62feed0f1fd9 34 double latitude = 33.007872; // You could read these values from a GPS but
JMF 0:62feed0f1fd9 35 double longitude = -96.751614; // for now, will just hardcode them
JMF 0:62feed0f1fd9 36 double elevation = 697.00;
JMF 0:62feed0f1fd9 37
geekbleek 4:b9f2193b27cf 38 DigitalIn mypin(A2);
geekbleek 4:b9f2193b27cf 39 DigitalOut led_green(LED_GREEN);
geekbleek 4:b9f2193b27cf 40 DigitalOut led_red(LED_RED);
geekbleek 4:b9f2193b27cf 41 DigitalOut led_blue(LED_BLUE);
geekbleek 4:b9f2193b27cf 42
geekbleek 4:b9f2193b27cf 43
JMF 0:62feed0f1fd9 44 WNCInterface eth;
JMF 0:62feed0f1fd9 45 Client client;
JMF 0:62feed0f1fd9 46 M2XStreamClient m2xClient(&client, m2xKey);
JMF 0:62feed0f1fd9 47 TimeService timeService(&m2xClient);
JMF 1:1c840717deea 48 MODSERIAL pc(USBTX,USBRX,256,256);
JMF 0:62feed0f1fd9 49
JMF 0:62feed0f1fd9 50 void on_data_point_found(const char* at, const char* value, int index, void* context, int type) {
JMF 2:eb0768c06c1b 51 pc.printf(">>Found a data point, index: %d type: %d" CRLF, index, type);
JMF 2:eb0768c06c1b 52 pc.printf(">>At: %s" CRLF " Value: %s" CRLF, at, value);
JMF 0:62feed0f1fd9 53 }
JMF 0:62feed0f1fd9 54
JMF 0:62feed0f1fd9 55
JMF 0:62feed0f1fd9 56 void on_command_found(const char* id, const char* name, int index, void *context) {
JMF 2:eb0768c06c1b 57 pc.printf(">>Found a command, index: %d" CRLF, index);
JMF 2:eb0768c06c1b 58 pc.printf(">>ID: %s\n Name: %s" CRLF, id, name);
JMF 0:62feed0f1fd9 59 }
JMF 0:62feed0f1fd9 60
JMF 0:62feed0f1fd9 61 void on_location_found(const char* name,
JMF 0:62feed0f1fd9 62 double latitude,
JMF 0:62feed0f1fd9 63 double longitude,
JMF 0:62feed0f1fd9 64 double elevation,
JMF 0:62feed0f1fd9 65 const char* timestamp,
JMF 0:62feed0f1fd9 66 int index,
JMF 0:62feed0f1fd9 67 void* context) {
JMF 2:eb0768c06c1b 68 pc.printf(">>Found a location, index: %d" CRLF, index);
JMF 2:eb0768c06c1b 69 pc.printf(">>Name: %s" CRLF ">>Latitude: %lf" CRLF ">>Longitude: %lf" CRLF, name, latitude, longitude);
JMF 2:eb0768c06c1b 70 pc.printf(">>Elevation: %lf" CRLF ">>Timestamp: %s" CRLF, elevation, timestamp);
JMF 0:62feed0f1fd9 71 }
JMF 0:62feed0f1fd9 72
geekbleek 4:b9f2193b27cf 73 //********************************************************************************************************************************************
geekbleek 4:b9f2193b27cf 74 //* Set the RGB LED's Color
geekbleek 4:b9f2193b27cf 75 //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue)
geekbleek 4:b9f2193b27cf 76 //********************************************************************************************************************************************
geekbleek 4:b9f2193b27cf 77 void SetLedColor(unsigned char ucColor)
geekbleek 4:b9f2193b27cf 78 {
geekbleek 4:b9f2193b27cf 79 //Note that when an LED is on, you write a 0 to it:
geekbleek 4:b9f2193b27cf 80 led_red = !(ucColor & 0x1); //bit 0
geekbleek 4:b9f2193b27cf 81 led_green = !(ucColor & 0x2); //bit 1
geekbleek 4:b9f2193b27cf 82 led_blue = !(ucColor & 0x4); //bit 2
geekbleek 4:b9f2193b27cf 83 } //SetLedColor()
geekbleek 4:b9f2193b27cf 84
geekbleek 4:b9f2193b27cf 85
geekbleek 4:b9f2193b27cf 86
geekbleek 4:b9f2193b27cf 87
geekbleek 4:b9f2193b27cf 88 //int main() {
geekbleek 4:b9f2193b27cf 89 // char timestamp[25];
geekbleek 4:b9f2193b27cf 90 // int length = 25;
geekbleek 4:b9f2193b27cf 91 // char amb_temp[6];
geekbleek 4:b9f2193b27cf 92 // char amb_humd[6];
geekbleek 4:b9f2193b27cf 93 // int response, cnt=1;
geekbleek 4:b9f2193b27cf 94 // double temp=0.00; //we will just increment these 0.01 each time through the loop
geekbleek 4:b9f2193b27cf 95 // double humid=0.00; //we will just increment these 1 each time through the loop wrapping at 100
geekbleek 4:b9f2193b27cf 96 //
geekbleek 4:b9f2193b27cf 97 // pc.baud(115200);
geekbleek 4:b9f2193b27cf 98 // pc.printf("Start m2x-demo-all by initializng the network" CRLF);
geekbleek 4:b9f2193b27cf 99 // response = eth.init();
geekbleek 4:b9f2193b27cf 100 // pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response);
geekbleek 4:b9f2193b27cf 101 // if( !response ) {
geekbleek 4:b9f2193b27cf 102 // pc.printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
geekbleek 4:b9f2193b27cf 103 // while(1);
geekbleek 4:b9f2193b27cf 104 // }
geekbleek 4:b9f2193b27cf 105 //
geekbleek 4:b9f2193b27cf 106 // response = eth.connect();
geekbleek 4:b9f2193b27cf 107 // pc.printf("IP Address: %s " CRLF CRLF, eth.getIPAddress());
geekbleek 4:b9f2193b27cf 108 //
geekbleek 4:b9f2193b27cf 109 // pc.printf("initialize the M2X time service" CRLF);
geekbleek 4:b9f2193b27cf 110 // if (!m2x_status_is_success(timeService.init()))
geekbleek 4:b9f2193b27cf 111 // pc.printf("Cannot initialize time service!" CRLF);
geekbleek 4:b9f2193b27cf 112 // else {
geekbleek 4:b9f2193b27cf 113 // timeService.getTimestamp(timestamp, &length);
geekbleek 4:b9f2193b27cf 114 // pc.printf("Current timestamp: %s" CRLF, timestamp);
geekbleek 4:b9f2193b27cf 115 // strcpy(endTime,timestamp);
geekbleek 4:b9f2193b27cf 116 // }
geekbleek 4:b9f2193b27cf 117 //
geekbleek 4:b9f2193b27cf 118 //// pc.printf("Now delete all existing values" CRLF);
geekbleek 4:b9f2193b27cf 119 //// // Delete values
geekbleek 4:b9f2193b27cf 120 //// pc.printf("Delete humidity values..." CRLF);
geekbleek 4:b9f2193b27cf 121 //// response = m2xClient.deleteValues(deviceId,hstreamName, fromTime, endTime);
geekbleek 4:b9f2193b27cf 122 //// pc.printf("Delete response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 123 ////
geekbleek 4:b9f2193b27cf 124 //// pc.printf("Delete temp values..." CRLF);
geekbleek 4:b9f2193b27cf 125 //// response = m2xClient.deleteValues(deviceId,tstreamName, fromTime, endTime);
geekbleek 4:b9f2193b27cf 126 //// pc.printf("Delete response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 127 ////
geekbleek 4:b9f2193b27cf 128 //// pc.printf("Delete location values..." CRLF);
geekbleek 4:b9f2193b27cf 129 //// response = m2xClient.deleteLocations(deviceId, fromTime, endTime);
geekbleek 4:b9f2193b27cf 130 //// pc.printf("Delete response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 131 //
geekbleek 4:b9f2193b27cf 132 // pc.printf("Query for possible commands using this device..." CRLF);
geekbleek 4:b9f2193b27cf 133 // response = m2xClient.listCommands(deviceId, on_command_found, NULL);
geekbleek 4:b9f2193b27cf 134 // pc.printf("listCommands response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 135 //
geekbleek 4:b9f2193b27cf 136 //
geekbleek 4:b9f2193b27cf 137 //
geekbleek 4:b9f2193b27cf 138 //
geekbleek 4:b9f2193b27cf 139 // while (true) {
geekbleek 4:b9f2193b27cf 140 // // read temp -- for now, just use a fixed temp, but will need to read the HTS221
geekbleek 4:b9f2193b27cf 141 // // and put it into a 6 byte string formatted as "%0.2f"
geekbleek 4:b9f2193b27cf 142 // sprintf(amb_temp,"%0.2f",temp);
geekbleek 4:b9f2193b27cf 143 // sprintf(amb_humd,"%0.2f",humid);
geekbleek 4:b9f2193b27cf 144 // temp += .01;
geekbleek 4:b9f2193b27cf 145 // humid += 1.0;
geekbleek 4:b9f2193b27cf 146 // humid = fmod(humid,100.0);
geekbleek 4:b9f2193b27cf 147 // pc.printf("cnt=%d\r\n",cnt++);
geekbleek 4:b9f2193b27cf 148 //
geekbleek 4:b9f2193b27cf 149 // // post the temp value
geekbleek 4:b9f2193b27cf 150 // //pc.printf("Post updateStreamValue (temp)..." CRLF);
geekbleek 4:b9f2193b27cf 151 //// response = m2xClient.updateStreamValue(deviceId, "water-sensor", temp);
geekbleek 4:b9f2193b27cf 152 //// pc.printf("Post response code: %d" CRLF, response);
geekbleek 4:b9f2193b27cf 153 //
geekbleek 4:b9f2193b27cf 154 // timeService.getTimestamp(timestamp, &length);
geekbleek 4:b9f2193b27cf 155 // pc.printf("Thats all folks, got to wait 5 seconds... (%s)" CRLF CRLF CRLF, timestamp);
geekbleek 4:b9f2193b27cf 156 //
geekbleek 4:b9f2193b27cf 157 // // wait 5 secs and then loop
geekbleek 4:b9f2193b27cf 158 // delay(5000);
geekbleek 4:b9f2193b27cf 159 //
geekbleek 4:b9f2193b27cf 160 //
geekbleek 4:b9f2193b27cf 161 // }
geekbleek 4:b9f2193b27cf 162 //}
geekbleek 4:b9f2193b27cf 163
geekbleek 4:b9f2193b27cf 164
geekbleek 4:b9f2193b27cf 165
geekbleek 4:b9f2193b27cf 166
JMF 0:62feed0f1fd9 167 int main() {
geekbleek 4:b9f2193b27cf 168 int response, cnt=1;
geekbleek 4:b9f2193b27cf 169 pc.baud(115200);
geekbleek 4:b9f2193b27cf 170 pc.printf("Start m2x-demo-all by initializng the network" CRLF);
geekbleek 4:b9f2193b27cf 171 response = eth.init();
geekbleek 4:b9f2193b27cf 172 pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response);
geekbleek 4:b9f2193b27cf 173 if( !response ) {
JMF 2:eb0768c06c1b 174 pc.printf(" - - - - - - - ALL DONE - - - - - - - " CRLF);
JMF 0:62feed0f1fd9 175 while(1);
geekbleek 4:b9f2193b27cf 176 }
geekbleek 4:b9f2193b27cf 177
geekbleek 4:b9f2193b27cf 178 // check mypin object is initialized and connected to a pin
geekbleek 4:b9f2193b27cf 179 if(mypin.is_connected()) {
geekbleek 4:b9f2193b27cf 180 pc.printf("mypin is connected and initialized! \n\r");
geekbleek 4:b9f2193b27cf 181 }
geekbleek 4:b9f2193b27cf 182
geekbleek 4:b9f2193b27cf 183 // Optional: set mode as PullUp/PullDown/PullNone/OpenDrain
geekbleek 4:b9f2193b27cf 184 mypin.mode(PullUp);
JMF 0:62feed0f1fd9 185
geekbleek 4:b9f2193b27cf 186 while(true) {
geekbleek 4:b9f2193b27cf 187 pc.printf("mypin has value : %d \n\r", mypin.read());
geekbleek 4:b9f2193b27cf 188 if (mypin) {
geekbleek 4:b9f2193b27cf 189 SetLedColor(1)
geekbleek 4:b9f2193b27cf 190 }
geekbleek 4:b9f2193b27cf 191 if (!mypin) {
geekbleek 4:b9f2193b27cf 192 SetLedColor(4)
geekbleek 4:b9f2193b27cf 193 }
geekbleek 4:b9f2193b27cf 194 wait(0.25);
geekbleek 4:b9f2193b27cf 195 }
JMF 0:62feed0f1fd9 196 }
JMF 0:62feed0f1fd9 197