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

main.cpp

Committer:
joe_tijerina
Date:
2014-07-18
Revision:
12:676ba8e7bea2
Parent:
11:a9117a40bde7
Child:
13:d8957cc4c88e

File content as of revision 12:676ba8e7bea2:

#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
* the MTS Wifi shield board. You will need to change the network
* 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 =  "Belkin_STM"; 
    std::string securityKey = "stmicroatx"; 
    Wifi::SecurityType securityType = Wifi::WPA2;

    //Wait for wifi module to boot up
    for (int i = 10; i >= 0; i = i - 2) {
        wait(2);
        printf("Waiting %d seconds...\n\r", i);
    }

    //Setup serial interface to WiFi module
    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");

    //Setup and check connection
    printf("Set Network: %s\n\r", getCodeNames(wifi->setNetwork(ssid, securityType, securityKey)).c_str());
    printf("Set DHCP: %s\n\r", getCodeNames(wifi->setDeviceIP("DHCP")).c_str());
    while (! wifi->connect()) {
        printf("Connect: Failure\r\n");
        wait(1);
    }
    printf("Connect: Success\r\n");
    printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
    
    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);
    }            
}