Sample code for a FRDM-KL46Z device that can read accelerometer data and then post it to the M2X platform. For use with AT&T DevLab.

Dependencies:   M2XStreamClient MMA8451Q SocketModem jsonlite mbed

Files at this revision

API Documentation at this revision

Comitter:
pgruenbaum
Date:
Fri May 02 15:51:44 2014 +0000
Commit message:
Code to be used for AT&T DevLab

Changed in this revision

M2XStreamClient.lib Show annotated file Show diff for this revision Revisions of this file
MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
SocketModem.lib Show annotated file Show diff for this revision Revisions of this file
jsonlite.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r b4f0b744fbc3 M2XStreamClient.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/M2XStreamClient.lib	Fri May 02 15:51:44 2014 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/teams/ATT-M2X-team/code/M2XStreamClient/#f479e4f4db0e
diff -r 000000000000 -r b4f0b744fbc3 MMA8451Q.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Fri May 02 15:51:44 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/JoKer/code/MMA8451Q/#2d14600116fc
diff -r 000000000000 -r b4f0b744fbc3 SocketModem.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SocketModem.lib	Fri May 02 15:51:44 2014 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/teams/Multi-Hackers/code/SocketModem/#efc4db23a564
diff -r 000000000000 -r b4f0b744fbc3 jsonlite.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jsonlite.lib	Fri May 02 15:51:44 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/citrusbyte/code/jsonlite/#807034181e02
diff -r 000000000000 -r b4f0b744fbc3 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri May 02 15:51:44 2014 +0000
@@ -0,0 +1,118 @@
+#include "mbed.h"
+#include "MMA8451Q.h"
+#include "M2XStreamClient.h"
+#include "include_me.h"
+#include "math.h"
+
+#if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
+  PinName const SDA = PTE25;
+  PinName const SCL = PTE24;
+#elif defined (TARGET_KL05Z)
+  PinName const SDA = PTB4;
+  PinName const SCL = PTB3;
+#else
+  #error TARGET NOT DEFINED
+#endif
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+
+using namespace mts;
+
+const char key[] = "<key>";       // Replace with your M2X user account master key
+const char feed[] = "<feed>";     // Replace with your blueprint feed ID
+const char stream[] = "<stream>"; // Replace with your stream name
+
+// set to 1 for cellular shield board
+// set to 0 for wifi shield board
+#define CELL_SHIELD 0
+
+// ssid and phrase for wifi
+std::string ssid = "<ssid>";        // Replace with your Wifi ID (SSID)
+std::string phrase = "<password>";  // Replace with your Wifi phrase (password)
+Wifi::SecurityType security_type = Wifi::WPA; // Replace with your Wifi security type
+
+int main()
+{
+#if CELL_SHIELD
+    MTSSerialFlowControl* serial = new MTSSerialFlowControl(PTD3, PTD2, PTA12, PTC8);
+    serial->baud(115200);
+    Transport::setTransport(Transport::CELLULAR);
+    Cellular* cell = Cellular::getInstance();
+    cell->init(serial, PTA4, PTC9); //DCD and DTR pins for KL46Z
+
+    int max_tries = 5;
+    int i;
+    std::string apn = "m2m.com.attz";
+
+    i = 0;
+    while (i++ < max_tries) {
+        if (cell->getRegistration() == Cellular::REGISTERED) {
+            printf("registered with tower\n\r");
+            break;
+        } else if (i >= max_tries) {
+            printf("failed to register with tower\n\r");
+        } else {
+            wait(3);
+        }
+    }
+
+    printf("signal strength: %d\n\r", cell->getSignalStrength());
+
+    i = 0;
+    printf("setting APN to %s\n\r", apn.c_str());
+    while (i++ < max_tries) {
+        if (cell->setApn(apn) == SUCCESS) {
+            printf("successfully set APN\n\r");
+            break;
+        } else if (i >= max_tries) {
+            printf("failed to set APN\n\r");
+        } else {
+            wait(1);
+        }
+    }
+
+    i = 0;
+    printf("bringing up PPP link\n\r");
+    while (i++ < max_tries) {
+        if (cell->connect()) {
+            printf("PPP link is up\n\r");
+            break;
+        } else if (i >= max_tries) {
+            printf("failed to bring PPP link up\n\r");
+        } else {
+            wait(1);
+        }
+    }
+#else
+    // WiFi shield
+    for (int i = 6; i >= 0; i = i - 2) {
+        wait(2);
+        printf("Waiting %d seconds...\n\r", i);
+    }
+    MTSSerial* serial = new MTSSerial(PTD3, PTD2, 256, 256);
+    serial->baud(9600);
+    Transport::setTransport(Transport::WIFI);
+    Wifi* wifi = Wifi::getInstance();
+    printf("Init: %s\n\r", wifi->init(serial) ? "SUCCESS" : "FAILURE");
+    printf("Set Network: %s\n\r", getCodeNames(wifi->setNetwork(ssid, security_type, phrase)).c_str());
+    printf("Set DHCP: %s\n\r", getCodeNames(wifi->setDeviceIP("DHCP")).c_str());
+    printf("Signal Strnegth (dBm): %d\n\r", wifi->getSignalStrength());
+    printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
+    printf("Connect: %s\n\r", wifi->connect() ? "Success" : "Failure");
+    printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
+#endif
+
+    // Initialize the M2X client
+    Client client;
+    M2XStreamClient m2xClient(&client, key);
+    int ret;
+    
+    // Create an accelerometer instance
+    MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+    
+    printf("MMA8451 ID: %d\n", acc.getWhoAmI());
+
+    // Add code here to read accelerometer data and post to M2X stream
+    // ...
+    
+}
\ No newline at end of file
diff -r 000000000000 -r b4f0b744fbc3 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri May 02 15:51:44 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8a40adfe8776
\ No newline at end of file