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
main.cpp@12:676ba8e7bea2, 2014-07-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |