Sample project to connect to AT&T M2X from the STM32 Nucleo + MTS WiFi shield

Dependencies:   M2XStreamClient SocketModem jsonlite mbed

Fork of STM32_MTS_Wifi_Connect_M2X by AT&T Developer Summit Hackathon 2016

Revision:
12:676ba8e7bea2
Parent:
11:a9117a40bde7
Child:
13:d8957cc4c88e
--- a/main.cpp	Fri Jul 11 16:53:47 2014 +0000
+++ b/main.cpp	Fri Jul 18 18:53:18 2014 +0000
@@ -1,6 +1,12 @@
 #include "mbed.h"
+#include "M2XStreamClient.h"
 #include "MTSSerial.h"
 #include "Wifi.h"
+#include "include_me.h"
+#include "math.h"
+
+
+
 using namespace mts;
 
 /* This example shows how to do a basic connectivity test using
@@ -8,11 +14,57 @@
 * SSID and security key. You may need to chage the security type.
 */
 
+using namespace mts;
+
+const char key[] = "6f1f72905ab5bede6ff804d58c2e834d";       // Replace with your M2X user account master key
+const char feed[] = "119e6e4c262087ea3c5129576a18ee52";     // Replace with your blueprint feed ID
+const char stream[] = "temperature"; // Replace with your stream name  
+const int thresholdvalue = 10; 
+
+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;
+
+void on_data_point_found(const char* at, const char* value, int index, void* context) {
+  printf("Found a data point, index: %d\r\n", index);
+  printf("At: %s Value: %s\r\n", at, value);
+}
+
+void on_location_found(const char* name,
+                       double latitude,
+                       double longitude,
+                       double elevation,
+                       const char* timestamp,
+                       int index,
+                       void* context) {
+  printf("Found a location, index: %d\r\n", index);
+  printf("Name: %s  Latitude: %lf  Longitude: %lf\r\n", name, latitude, longitude);
+  printf("Elevation: %lf  Timestamp: %s\r\n", elevation, timestamp);
+}
+
 int main()
 {
+    char amb_temp[6];
+    double temp;
+    int a;
+    int sensorValue;
+    int adc_scale = 4095; 
+    int B = 3975;
+    float resistance; 
+    float temperature;
+    float temperature_f;    
+    float test;
+    float Rsensor; //Resistance of sensor in K
+
+    DigitalOut myled(D7);   
+    AnalogIn analogRead(A0);
+    AnalogIn analogLightSensorRead(A1);
+                        
+         
     //Set the network parameters
-    std::string ssid = "your_wifi_ssid";
-    std::string securityKey = "your_wifi_password";
+    std::string ssid =  "Belkin_STM"; 
+    std::string securityKey = "stmicroatx"; 
     Wifi::SecurityType securityType = Wifi::WPA2;
 
     //Wait for wifi module to boot up
@@ -25,6 +77,8 @@
     MTSSerial* serial = new MTSSerial(D8, D2, 256, 256);
     serial->baud(9600);
 
+    Transport::setTransport(Transport::WIFI);
+    
     //Setup Wifi class
     Wifi* wifi = Wifi::getInstance();
     printf("Init: %s\n\r", wifi->init(serial) ? "SUCCESS" : "FAILURE");
@@ -39,9 +93,61 @@
     printf("Connect: Success\r\n");
     printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
     
-    //Ping 
-    while (true) {
-        printf("Ping Server: %s\n\r", wifi->ping("8.8.8.8") ? "Success" : "Failed");
-        wait(3);
+    printf("Ping Server: %s\n\r", wifi->ping("8.8.8.8") ? "Success" : "Failed");
+    wait(1);
+
+    // Initialize the M2X client
+    Client client;    
+    M2XStreamClient m2xClient(&client, key);
+    
+    while(1)    
+    {    
+        a = analogRead.read_u16();
+ 
+               
+        resistance = (float)(adc_scale-a)*10000/a; //get the resistance of the sensor;              
+        temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;        
+        temperature_f = (1.8 * temperature) + 32.0;
+        printf("Temp Sensor Analog Reading is 0x%X = %d   ", a, a);         
+        printf("Current Temperature: %f degC  %f degF \n\r", temperature, temperature_f); 
+
+        sensorValue = analogLightSensorRead.read_u16();               
+        Rsensor=(float)(adc_scale-sensorValue)*10/sensorValue;
+                                                
+        if(Rsensor > thresholdvalue)
+        {
+            myled = 1; // LED is ON
+        }
+        else
+        {
+            myled = 0; // LED is OFF
+        }                        
+
+        printf("Light Sensor Analog Reading is 0x%X = %d   ", sensorValue, sensorValue);        
+        printf("The sensor resistance is %f  \n\n\r", Rsensor);         
+
+        sprintf(amb_temp, "%0.2f", temperature_f);  //write dummy temp value in amb_temp
+                
+        int response = m2xClient.post(feed, stream, amb_temp);
+        printf("Post response code: %d\r\n", response);
+        if (response == -1) while (true) ;           
+        
+        delay(60000);
     }
+
+
+    // Read temperature data and post to M2X stream
+    temp = 78.6;
+    while(1)    
+    {
+        sprintf(amb_temp, "%0.2f", temp);  //write dummy temp value in amb_temp
+            
+        int response = m2xClient.post(feed, stream, amb_temp);
+        printf("Post response code: %d\r\n", response);
+        if (response == -1) while (true) ;    
+        
+        temp = temp + 0.1;  /* increment the temp by 0.5 deg */
+        // wait 60 secs and then loop
+        delay(60000);
+    }            
 }