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

Committer:
joe_tijerina
Date:
Fri Jul 18 18:53:18 2014 +0000
Revision:
12:676ba8e7bea2
Parent:
11:a9117a40bde7
Child:
13:d8957cc4c88e
MTS_Wifi_Connect_M2X example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sam_grove 0:23c1654d70e4 1 #include "mbed.h"
joe_tijerina 12:676ba8e7bea2 2 #include "M2XStreamClient.h"
sam_grove 0:23c1654d70e4 3 #include "MTSSerial.h"
sam_grove 0:23c1654d70e4 4 #include "Wifi.h"
joe_tijerina 12:676ba8e7bea2 5 #include "include_me.h"
joe_tijerina 12:676ba8e7bea2 6 #include "math.h"
joe_tijerina 12:676ba8e7bea2 7
joe_tijerina 12:676ba8e7bea2 8
joe_tijerina 12:676ba8e7bea2 9
sam_grove 0:23c1654d70e4 10 using namespace mts;
sam_grove 0:23c1654d70e4 11
jengbrecht 5:19044863e45c 12 /* This example shows how to do a basic connectivity test using
jengbrecht 5:19044863e45c 13 * the MTS Wifi shield board. You will need to change the network
mfiore 11:a9117a40bde7 14 * SSID and security key. You may need to chage the security type.
jengbrecht 5:19044863e45c 15 */
jengbrecht 5:19044863e45c 16
joe_tijerina 12:676ba8e7bea2 17 using namespace mts;
joe_tijerina 12:676ba8e7bea2 18
joe_tijerina 12:676ba8e7bea2 19 const char key[] = "6f1f72905ab5bede6ff804d58c2e834d"; // Replace with your M2X user account master key
joe_tijerina 12:676ba8e7bea2 20 const char feed[] = "119e6e4c262087ea3c5129576a18ee52"; // Replace with your blueprint feed ID
joe_tijerina 12:676ba8e7bea2 21 const char stream[] = "temperature"; // Replace with your stream name
joe_tijerina 12:676ba8e7bea2 22 const int thresholdvalue = 10;
joe_tijerina 12:676ba8e7bea2 23
joe_tijerina 12:676ba8e7bea2 24 char name[] = "<location name>"; // Name of current location of datasource
joe_tijerina 12:676ba8e7bea2 25 double latitude = 33.007872;
joe_tijerina 12:676ba8e7bea2 26 double longitude = -96.751614; // You can also read those values from a GPS
joe_tijerina 12:676ba8e7bea2 27 double elevation = 697.00;
joe_tijerina 12:676ba8e7bea2 28
joe_tijerina 12:676ba8e7bea2 29 void on_data_point_found(const char* at, const char* value, int index, void* context) {
joe_tijerina 12:676ba8e7bea2 30 printf("Found a data point, index: %d\r\n", index);
joe_tijerina 12:676ba8e7bea2 31 printf("At: %s Value: %s\r\n", at, value);
joe_tijerina 12:676ba8e7bea2 32 }
joe_tijerina 12:676ba8e7bea2 33
joe_tijerina 12:676ba8e7bea2 34 void on_location_found(const char* name,
joe_tijerina 12:676ba8e7bea2 35 double latitude,
joe_tijerina 12:676ba8e7bea2 36 double longitude,
joe_tijerina 12:676ba8e7bea2 37 double elevation,
joe_tijerina 12:676ba8e7bea2 38 const char* timestamp,
joe_tijerina 12:676ba8e7bea2 39 int index,
joe_tijerina 12:676ba8e7bea2 40 void* context) {
joe_tijerina 12:676ba8e7bea2 41 printf("Found a location, index: %d\r\n", index);
joe_tijerina 12:676ba8e7bea2 42 printf("Name: %s Latitude: %lf Longitude: %lf\r\n", name, latitude, longitude);
joe_tijerina 12:676ba8e7bea2 43 printf("Elevation: %lf Timestamp: %s\r\n", elevation, timestamp);
joe_tijerina 12:676ba8e7bea2 44 }
joe_tijerina 12:676ba8e7bea2 45
sam_grove 0:23c1654d70e4 46 int main()
sam_grove 0:23c1654d70e4 47 {
joe_tijerina 12:676ba8e7bea2 48 char amb_temp[6];
joe_tijerina 12:676ba8e7bea2 49 double temp;
joe_tijerina 12:676ba8e7bea2 50 int a;
joe_tijerina 12:676ba8e7bea2 51 int sensorValue;
joe_tijerina 12:676ba8e7bea2 52 int adc_scale = 4095;
joe_tijerina 12:676ba8e7bea2 53 int B = 3975;
joe_tijerina 12:676ba8e7bea2 54 float resistance;
joe_tijerina 12:676ba8e7bea2 55 float temperature;
joe_tijerina 12:676ba8e7bea2 56 float temperature_f;
joe_tijerina 12:676ba8e7bea2 57 float test;
joe_tijerina 12:676ba8e7bea2 58 float Rsensor; //Resistance of sensor in K
joe_tijerina 12:676ba8e7bea2 59
joe_tijerina 12:676ba8e7bea2 60 DigitalOut myled(D7);
joe_tijerina 12:676ba8e7bea2 61 AnalogIn analogRead(A0);
joe_tijerina 12:676ba8e7bea2 62 AnalogIn analogLightSensorRead(A1);
joe_tijerina 12:676ba8e7bea2 63
joe_tijerina 12:676ba8e7bea2 64
jengbrecht 5:19044863e45c 65 //Set the network parameters
joe_tijerina 12:676ba8e7bea2 66 std::string ssid = "Belkin_STM";
joe_tijerina 12:676ba8e7bea2 67 std::string securityKey = "stmicroatx";
mfiore 11:a9117a40bde7 68 Wifi::SecurityType securityType = Wifi::WPA2;
sam_grove 0:23c1654d70e4 69
sam_grove 0:23c1654d70e4 70 //Wait for wifi module to boot up
sam_grove 0:23c1654d70e4 71 for (int i = 10; i >= 0; i = i - 2) {
sam_grove 0:23c1654d70e4 72 wait(2);
sam_grove 0:23c1654d70e4 73 printf("Waiting %d seconds...\n\r", i);
sam_grove 0:23c1654d70e4 74 }
sam_grove 0:23c1654d70e4 75
sam_grove 0:23c1654d70e4 76 //Setup serial interface to WiFi module
mfiore 11:a9117a40bde7 77 MTSSerial* serial = new MTSSerial(D8, D2, 256, 256);
sam_grove 0:23c1654d70e4 78 serial->baud(9600);
sam_grove 0:23c1654d70e4 79
joe_tijerina 12:676ba8e7bea2 80 Transport::setTransport(Transport::WIFI);
joe_tijerina 12:676ba8e7bea2 81
sam_grove 0:23c1654d70e4 82 //Setup Wifi class
sam_grove 0:23c1654d70e4 83 Wifi* wifi = Wifi::getInstance();
sam_grove 0:23c1654d70e4 84 printf("Init: %s\n\r", wifi->init(serial) ? "SUCCESS" : "FAILURE");
sam_grove 0:23c1654d70e4 85
sam_grove 0:23c1654d70e4 86 //Setup and check connection
sam_grove 0:23c1654d70e4 87 printf("Set Network: %s\n\r", getCodeNames(wifi->setNetwork(ssid, securityType, securityKey)).c_str());
sam_grove 0:23c1654d70e4 88 printf("Set DHCP: %s\n\r", getCodeNames(wifi->setDeviceIP("DHCP")).c_str());
mfiore 8:fa93a2d07116 89 while (! wifi->connect()) {
mfiore 8:fa93a2d07116 90 printf("Connect: Failure\r\n");
mfiore 8:fa93a2d07116 91 wait(1);
mfiore 8:fa93a2d07116 92 }
mfiore 8:fa93a2d07116 93 printf("Connect: Success\r\n");
sam_grove 0:23c1654d70e4 94 printf("Is Connected: %s\n\r", wifi->isConnected() ? "True" : "False");
mfiore 6:7c2bdcf9d302 95
joe_tijerina 12:676ba8e7bea2 96 printf("Ping Server: %s\n\r", wifi->ping("8.8.8.8") ? "Success" : "Failed");
joe_tijerina 12:676ba8e7bea2 97 wait(1);
joe_tijerina 12:676ba8e7bea2 98
joe_tijerina 12:676ba8e7bea2 99 // Initialize the M2X client
joe_tijerina 12:676ba8e7bea2 100 Client client;
joe_tijerina 12:676ba8e7bea2 101 M2XStreamClient m2xClient(&client, key);
joe_tijerina 12:676ba8e7bea2 102
joe_tijerina 12:676ba8e7bea2 103 while(1)
joe_tijerina 12:676ba8e7bea2 104 {
joe_tijerina 12:676ba8e7bea2 105 a = analogRead.read_u16();
joe_tijerina 12:676ba8e7bea2 106
joe_tijerina 12:676ba8e7bea2 107
joe_tijerina 12:676ba8e7bea2 108 resistance = (float)(adc_scale-a)*10000/a; //get the resistance of the sensor;
joe_tijerina 12:676ba8e7bea2 109 temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
joe_tijerina 12:676ba8e7bea2 110 temperature_f = (1.8 * temperature) + 32.0;
joe_tijerina 12:676ba8e7bea2 111 printf("Temp Sensor Analog Reading is 0x%X = %d ", a, a);
joe_tijerina 12:676ba8e7bea2 112 printf("Current Temperature: %f degC %f degF \n\r", temperature, temperature_f);
joe_tijerina 12:676ba8e7bea2 113
joe_tijerina 12:676ba8e7bea2 114 sensorValue = analogLightSensorRead.read_u16();
joe_tijerina 12:676ba8e7bea2 115 Rsensor=(float)(adc_scale-sensorValue)*10/sensorValue;
joe_tijerina 12:676ba8e7bea2 116
joe_tijerina 12:676ba8e7bea2 117 if(Rsensor > thresholdvalue)
joe_tijerina 12:676ba8e7bea2 118 {
joe_tijerina 12:676ba8e7bea2 119 myled = 1; // LED is ON
joe_tijerina 12:676ba8e7bea2 120 }
joe_tijerina 12:676ba8e7bea2 121 else
joe_tijerina 12:676ba8e7bea2 122 {
joe_tijerina 12:676ba8e7bea2 123 myled = 0; // LED is OFF
joe_tijerina 12:676ba8e7bea2 124 }
joe_tijerina 12:676ba8e7bea2 125
joe_tijerina 12:676ba8e7bea2 126 printf("Light Sensor Analog Reading is 0x%X = %d ", sensorValue, sensorValue);
joe_tijerina 12:676ba8e7bea2 127 printf("The sensor resistance is %f \n\n\r", Rsensor);
joe_tijerina 12:676ba8e7bea2 128
joe_tijerina 12:676ba8e7bea2 129 sprintf(amb_temp, "%0.2f", temperature_f); //write dummy temp value in amb_temp
joe_tijerina 12:676ba8e7bea2 130
joe_tijerina 12:676ba8e7bea2 131 int response = m2xClient.post(feed, stream, amb_temp);
joe_tijerina 12:676ba8e7bea2 132 printf("Post response code: %d\r\n", response);
joe_tijerina 12:676ba8e7bea2 133 if (response == -1) while (true) ;
joe_tijerina 12:676ba8e7bea2 134
joe_tijerina 12:676ba8e7bea2 135 delay(60000);
mfiore 6:7c2bdcf9d302 136 }
joe_tijerina 12:676ba8e7bea2 137
joe_tijerina 12:676ba8e7bea2 138
joe_tijerina 12:676ba8e7bea2 139 // Read temperature data and post to M2X stream
joe_tijerina 12:676ba8e7bea2 140 temp = 78.6;
joe_tijerina 12:676ba8e7bea2 141 while(1)
joe_tijerina 12:676ba8e7bea2 142 {
joe_tijerina 12:676ba8e7bea2 143 sprintf(amb_temp, "%0.2f", temp); //write dummy temp value in amb_temp
joe_tijerina 12:676ba8e7bea2 144
joe_tijerina 12:676ba8e7bea2 145 int response = m2xClient.post(feed, stream, amb_temp);
joe_tijerina 12:676ba8e7bea2 146 printf("Post response code: %d\r\n", response);
joe_tijerina 12:676ba8e7bea2 147 if (response == -1) while (true) ;
joe_tijerina 12:676ba8e7bea2 148
joe_tijerina 12:676ba8e7bea2 149 temp = temp + 0.1; /* increment the temp by 0.5 deg */
joe_tijerina 12:676ba8e7bea2 150 // wait 60 secs and then loop
joe_tijerina 12:676ba8e7bea2 151 delay(60000);
joe_tijerina 12:676ba8e7bea2 152 }
sam_grove 0:23c1654d70e4 153 }