M2X demo using the Freescale FRDM-KL46Z and Multitech Socketmodem MTSMS-H5

Dependencies:   M2XStreamClient MMA8451Q SocketModem jsonlite mbed

Fork of MTS_M2x_Example by Multi-Hackers

Committer:
jb8414
Date:
Tue Apr 29 21:15:00 2014 +0000
Revision:
8:54f32950dab2
Parent:
6:0dbcf434679b
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfiore 0:032beb056844 1 #include "mbed.h"
jb8414 8:54f32950dab2 2 #include "MMA8451Q.h"
mfiore 0:032beb056844 3 #include "M2XStreamClient.h"
mfiore 0:032beb056844 4 #include "include_me.h"
mfiore 0:032beb056844 5
jb8414 8:54f32950dab2 6
jb8414 8:54f32950dab2 7 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
jb8414 8:54f32950dab2 8 PinName const SDA = PTE25;
jb8414 8:54f32950dab2 9 PinName const SCL = PTE24;
jb8414 8:54f32950dab2 10 #elif defined (TARGET_KL05Z)
jb8414 8:54f32950dab2 11 PinName const SDA = PTB4;
jb8414 8:54f32950dab2 12 PinName const SCL = PTB3;
jb8414 8:54f32950dab2 13 #else
jb8414 8:54f32950dab2 14 #error TARGET NOT DEFINED
jb8414 8:54f32950dab2 15 #endif
jb8414 8:54f32950dab2 16
jb8414 8:54f32950dab2 17 #define MMA8451_I2C_ADDRESS (0x1d<<1)
jb8414 8:54f32950dab2 18
mfiore 0:032beb056844 19 using namespace mts;
mfiore 0:032beb056844 20
sam_grove 3:d24e8bec5610 21 const char key[] = ""; // enter your m2x user account master key
sam_grove 3:d24e8bec5610 22 const char feed[] = ""; // enter your blueprint feed id
jb8414 8:54f32950dab2 23 const char* names[] = { "x", "y", "z" }; // user will need to create these Streams manually in the Dev Portal
jb8414 8:54f32950dab2 24 int counts[] = { 1, 1, 1 };
jb8414 8:54f32950dab2 25
jb8414 8:54f32950dab2 26
mfiore 0:032beb056844 27
mfiore 1:b12a128aae0e 28 // set to 1 for cellular shield board
mfiore 1:b12a128aae0e 29 // set to 0 for wifi shield board
sam_grove 3:d24e8bec5610 30 #define CELL_SHIELD 1
sam_grove 2:76e0d5968991 31
sam_grove 3:d24e8bec5610 32 // ssid and phrase for wifi
sam_grove 2:76e0d5968991 33 std::string ssid = "belkin54g";
sam_grove 3:d24e8bec5610 34 std::string phrase = "hackathon";
mfiore 5:d4a4e2577be3 35 Wifi::SecurityType security_type = Wifi::WPA;
mfiore 1:b12a128aae0e 36
sam_grove 3:d24e8bec5610 37 int main()
sam_grove 3:d24e8bec5610 38 {
mfiore 1:b12a128aae0e 39 #if CELL_SHIELD
mfiore 0:032beb056844 40 MTSSerialFlowControl* serial = new MTSSerialFlowControl(PTD3, PTD2, PTA12, PTC8);
mfiore 0:032beb056844 41 serial->baud(115200);
mfiore 1:b12a128aae0e 42 Transport::setTransport(Transport::CELLULAR);
mfiore 0:032beb056844 43 Cellular* cell = Cellular::getInstance();
sam_grove 2:76e0d5968991 44 cell->init(serial, PTA4, PTC9); //DCD and DTR pins for KL46Z
mfiore 0:032beb056844 45
mfiore 0:032beb056844 46 int max_tries = 5;
mfiore 0:032beb056844 47 int i;
jb8414 8:54f32950dab2 48 std::string apn = "m2m.com.attz";
sam_grove 3:d24e8bec5610 49
mfiore 0:032beb056844 50 i = 0;
mfiore 0:032beb056844 51 while (i++ < max_tries) {
mfiore 0:032beb056844 52 if (cell->getRegistration() == Cellular::REGISTERED) {
mfiore 0:032beb056844 53 printf("registered with tower\n\r");
mfiore 0:032beb056844 54 break;
mfiore 0:032beb056844 55 } else if (i >= max_tries) {
mfiore 0:032beb056844 56 printf("failed to register with tower\n\r");
mfiore 0:032beb056844 57 } else {
mfiore 0:032beb056844 58 wait(3);
mfiore 0:032beb056844 59 }
mfiore 0:032beb056844 60 }
sam_grove 3:d24e8bec5610 61
mfiore 1:b12a128aae0e 62 printf("signal strength: %d\n\r", cell->getSignalStrength());
mfiore 1:b12a128aae0e 63
mfiore 0:032beb056844 64 i = 0;
mfiore 1:b12a128aae0e 65 printf("setting APN to %s\n\r", apn.c_str());
mfiore 0:032beb056844 66 while (i++ < max_tries) {
mfiore 0:032beb056844 67 if (cell->setApn(apn) == SUCCESS) {
mfiore 0:032beb056844 68 printf("successfully set APN\n\r");
mfiore 0:032beb056844 69 break;
mfiore 0:032beb056844 70 } else if (i >= max_tries) {
mfiore 0:032beb056844 71 printf("failed to set APN\n\r");
mfiore 0:032beb056844 72 } else {
mfiore 0:032beb056844 73 wait(1);
mfiore 0:032beb056844 74 }
mfiore 0:032beb056844 75 }
sam_grove 3:d24e8bec5610 76
mfiore 0:032beb056844 77 i = 0;
mfiore 1:b12a128aae0e 78 printf("bringing up PPP link\n\r");
mfiore 0:032beb056844 79 while (i++ < max_tries) {
mfiore 0:032beb056844 80 if (cell->connect()) {
mfiore 0:032beb056844 81 printf("PPP link is up\n\r");
mfiore 0:032beb056844 82 break;
mfiore 0:032beb056844 83 } else if (i >= max_tries) {
mfiore 0:032beb056844 84 printf("failed to bring PPP link up\n\r");
mfiore 0:032beb056844 85 } else {
mfiore 0:032beb056844 86 wait(1);
mfiore 0:032beb056844 87 }
mfiore 0:032beb056844 88 }
mfiore 1:b12a128aae0e 89 #else
mfiore 1:b12a128aae0e 90 for (int i = 6; i >= 0; i = i - 2) {
mfiore 1:b12a128aae0e 91 wait(2);
mfiore 1:b12a128aae0e 92 printf("Waiting %d seconds...\n\r", i);
mfiore 0:032beb056844 93 }
mfiore 0:032beb056844 94 MTSSerial* serial = new MTSSerial(PTD3, PTD2, 256, 256);
mfiore 0:032beb056844 95 serial->baud(9600);
mfiore 0:032beb056844 96 Transport::setTransport(Transport::WIFI);
mfiore 0:032beb056844 97 Wifi* wifi = Wifi::getInstance();
mfiore 0:032beb056844 98 printf("Init: %s\n\r", wifi->init(serial) ? "SUCCESS" : "FAILURE");
mfiore 5:d4a4e2577be3 99 printf("Set Network: %s\n\r", getCodeNames(wifi->setNetwork(ssid, security_type, phrase)).c_str());
mfiore 0:032beb056844 100 printf("Set DHCP: %s\n\r", getCodeNames(wifi->setDeviceIP("DHCP")).c_str());
mfiore 0:032beb056844 101 printf("Signal Strnegth (dBm): %d\n\r", wifi->getSignalStrength());
mfiore 0:032beb056844 102 printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
mfiore 0:032beb056844 103 printf("Connect: %s\n\r", wifi->connect() ? "Success" : "Failure");
mfiore 0:032beb056844 104 printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
mfiore 1:b12a128aae0e 105 #endif
sam_grove 3:d24e8bec5610 106
mfiore 0:032beb056844 107 /* send some data */
mfiore 1:b12a128aae0e 108 Client client;
mfiore 1:b12a128aae0e 109 M2XStreamClient m2xClient(&client, key);
mfiore 0:032beb056844 110 int ret;
jb8414 8:54f32950dab2 111 int streamNum = 3;
jb8414 8:54f32950dab2 112
jb8414 8:54f32950dab2 113 MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
jb8414 8:54f32950dab2 114 PwmOut rled(LED1);
jb8414 8:54f32950dab2 115 PwmOut gled(LED2);
jb8414 8:54f32950dab2 116 PwmOut bled(LED3);
jb8414 8:54f32950dab2 117
jb8414 8:54f32950dab2 118 printf("MMA8451 ID: %d\n", acc.getWhoAmI());
jb8414 8:54f32950dab2 119
mfiore 0:032beb056844 120 while (true) {
jb8414 8:54f32950dab2 121 float x, y, z;
jb8414 8:54f32950dab2 122 x = rled = 1.0 - abs(acc.getAccX());
jb8414 8:54f32950dab2 123 y = gled = 1.0 - abs(acc.getAccY());
jb8414 8:54f32950dab2 124 z = bled = 1.0 - abs(acc.getAccZ());
jb8414 8:54f32950dab2 125 printf("Sending X: %1.2f, Y: %1.2f, Z: %1.2f\n\r", x, y, z);
jb8414 8:54f32950dab2 126 double values[] = { x, y, z };
jb8414 8:54f32950dab2 127 ret = m2xClient.postMultiple(feed, streamNum, names, counts, NULL, values);
mfiore 0:032beb056844 128 printf("send() returned %d\r\n", ret);
mfiore 0:032beb056844 129 wait(5);
mfiore 0:032beb056844 130 }
jb8414 8:54f32950dab2 131
jb8414 8:54f32950dab2 132
mfiore 0:032beb056844 133 }