Sample code for AT&T IoT Services DevLab with IoT StarterKit.
Dependencies: FXOS8700CQ M2XStreamClient-JMF WNCInterface jsonlite mbed-rtos mbed
Fork of WNCInterface_M2Xdemo by
main.cpp
- Committer:
- jk431j
- Date:
- 2017-04-06
- Revision:
- 7:721eb6bb68d3
- Parent:
- 6:731f412e6571
- Child:
- 8:b82d330e10e9
File content as of revision 7:721eb6bb68d3:
// // This file contains an example implementation of M2X using the HTTP interface as the underlying // transport. // #include "mbed.h" #include "WNCInterface.h" #include "IOTSMS.h" #define MBED_PLATFORM #define M2X_ENABLE_READER #include <jsonlite.h> #include "M2XStreamClient.h" #include "sensors.h" #include "config_me.h" #define CRLF "\n\r" //startup SMS, disabled by default //#define STARTUP_SMS WNCInterface eth; WNCSms sms; Client client; M2XStreamClient m2xClient(&client, m2xKey); TimeService timeService(&m2xClient); I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used Serial pc(USBTX, USBRX); // tx, rx DigitalOut led_green(LED_GREEN); DigitalOut led_red(LED_RED); DigitalOut led_blue(LED_BLUE); K64F_Sensors_t SENSOR_DATA = {}; bool bStop = false; //******************************************************************************************************************************************** //* Set the RGB LED's Color //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue) //******************************************************************************************************************************************** void SetLedColor(unsigned char ucColor) { //Note that when an LED is on, you write a 0 to it: led_red = !(ucColor & 0x1); //bit 0 led_green = !(ucColor & 0x2); //bit 1 led_blue = !(ucColor & 0x4); //bit 2 } //SetLedColor() bool ExecuteCommand(const char* Command) { char cLedColor = *Command; switch(cLedColor) { case 'O': { //Off SetLedColor(0); break; } case 'R': { //Red SetLedColor(1); break; } case 'G': { //Green SetLedColor(2); break; } case 'Y': { //Yellow SetLedColor(3); break; } case 'B': { //Blue SetLedColor(4); break; } case 'M': { //Magenta SetLedColor(5); break; } case 'T': { //Turquoise SetLedColor(6); break; } case 'W': { //White SetLedColor(7); break; } case 'S': { //Stop bStop = true; break; } default: { return false; } } //switch(cLedColor) return true; } void on_data_point_found(const char* at, const char* value, int index, void* context, int type) { pc.printf(">>Found a data point, index: %d type: %d" CRLF, index, type); pc.printf(">>At: %s" CRLF " Value: %s" CRLF, at, value); } void on_fill_data(Print *print, void *context) { // no data to fill } void on_command_found(const char* id, const char* name, int index, void *context) { pc.printf("\t|Found a command, index: %d" CRLF, index); pc.printf("\t|ID: %s" CRLF "\t|Name: %s" CRLF, id, name); ExecuteCommand(name); m2xClient.markCommandProcessed(deviceId, id, on_fill_data, NULL); pc.printf("\t|Command confirmed" CRLF, id, name); } void on_msg_rcvd( WNCSmsMsg& msg ) { pc.printf(YEL "SMS received from %s" CRLF, msg.number.c_str()); pc.printf("|Timestamp: %s %s" CRLF, msg.date.c_str(), msg.time.c_str()); pc.printf("|Text: '%s'" CRLF, msg.msg.c_str()); pc.printf(WHT); ExecuteCommand(msg.msg.c_str()); } int main() { char timestamp[25]; int length = 25; int response; ExecuteCommand("Red"); pc.baud(115200); pc.printf("M2X StarterKit demo: initializing the network" CRLF); response = eth.init(); pc.printf("WNC Module %s initialized (%02X)." CRLF, response?"IS":"IS NOT", response); if( !response ) { pc.printf(" - - - - - - - SYSTEM RESET - - - - - - - " CRLF); NVIC_SystemReset(); while(1); } response = sms.init(1, on_msg_rcvd); pc.printf("SMS interface %s initialized (%02X)." CRLF, response?"IS NOT":"IS", response); if (!response) { pc.printf("SMS number is %s" CRLF , sms.getSMSNbr()); }; response = eth.connect(); pc.printf("IP Address: %s " CRLF CRLF, eth.getIPAddress()); ExecuteCommand("Yellow"); pc.printf("Initialize the sensors" CRLF); sensors_init(); read_sensors(); pc.printf(WHT "initialize the M2X time service" CRLF); if (!m2x_status_is_success(timeService.init())) pc.printf("Cannot initialize time service!" CRLF); else { timeService.getTimestamp(timestamp, &length); pc.printf("Current timestamp: %s" CRLF, timestamp); } ExecuteCommand("Green"); #ifdef STARTUP_SMS response = sms.send("5277", "IoT StarterKit is now running!"); pc.printf("Startup SMS %s sent." CRLF, response ? "was" : "NOT"); #endif pc.printf("Query for pending commands ..." CRLF); response = m2xClient.listCommands(deviceId, on_command_found, NULL, "status=pending"); pc.printf("listCommands response code: %d" CRLF, response); while (!bStop) { // read sensor values read_sensors(); // post the humidity value pc.printf("Post updateStreamValue (humidity = %.2f)..." CRLF, SENSOR_DATA.Humidity); response = m2xClient.updateStreamValue(deviceId, hStreamName, SENSOR_DATA.Humidity); pc.printf("Post response code: %d" CRLF, response); // post the temp value pc.printf("Post updateStreamValue (temp = %.2f)..." CRLF, SENSOR_DATA.Temperature); response = m2xClient.updateStreamValue(deviceId, tStreamName, SENSOR_DATA.Temperature); pc.printf("Post response code: %d" CRLF, response); // post accelerometer values pc.printf("Post postDeviceUpdate (accelerometer)..." CRLF, SENSOR_DATA.Temperature); response = m2xClient.postDeviceUpdate(deviceId, 3, accelStreamNames, (float []){SENSOR_DATA.AccelX, SENSOR_DATA.AccelY, SENSOR_DATA.AccelZ}); pc.printf("Post response code: %d" CRLF, response); timeService.getTimestamp(timestamp, &length); pc.printf("%s waiting for %d seconds... " CRLF , timestamp, commandDelay * commandPolls); // now poll for pending commands for (short idx=0; idx < commandPolls; idx++) { // wait commandDelay seconds delay(commandDelay * 1000); // and then query for commands pc.printf("\tQuery for pending commands ..." CRLF); response = m2xClient.listCommands(deviceId, on_command_found, NULL, "status=pending"); pc.printf("\tlistCommands response code: %d" CRLF, response); } }; pc.printf("Done sending data. Still accepting SMS commands." CRLF); bStop = false; while (!bStop) { delay(1000); }; pc.printf("- - - - - - - THE END - - - - - - - " CRLF); NVIC_SystemReset(); }