ACKme WiFi module + Nucleo MEMS module example. Connect and publish sensor data to M2X.

Dependencies:   M2XStreamClient WiConnect Nucleo_Sensor_Shield jsonlite mbed

Fork of m2x-MEMS_ACKme_Wifi_demo by David Kwak

Committer:
davidkwak
Date:
Thu Dec 11 20:56:33 2014 +0000
Revision:
0:db24f1dae4a4
Child:
1:276e4607719f
Initial publish/commit of an example with the ACKme WiFi module and X-NUCLEO-IKS01A1 sensor board.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidkwak 0:db24f1dae4a4 1 #include "mbed.h"
davidkwak 0:db24f1dae4a4 2 // include target specific defines
davidkwak 0:db24f1dae4a4 3 #include "target_config.h"
davidkwak 0:db24f1dae4a4 4 // include X-CUBE-MEMS1 Library
davidkwak 0:db24f1dae4a4 5 #include "x_cube_mems.h"
davidkwak 0:db24f1dae4a4 6 // include the Wiconnect Host Library API header
davidkwak 0:db24f1dae4a4 7 #include "Wiconnect.h"
davidkwak 0:db24f1dae4a4 8 // include M2X Library
davidkwak 0:db24f1dae4a4 9 #include "M2XStreamClient.h"
davidkwak 0:db24f1dae4a4 10
davidkwak 0:db24f1dae4a4 11 /**
davidkwak 0:db24f1dae4a4 12 * Connect the ACKme WiFi module directly to the Nucleo board.
davidkwak 0:db24f1dae4a4 13 * Connect the X-NUCLEO-IKS01A1 module on top of the ACKme WiFi module.
davidkwak 0:db24f1dae4a4 14 */
davidkwak 0:db24f1dae4a4 15
davidkwak 0:db24f1dae4a4 16 /**
davidkwak 0:db24f1dae4a4 17 * Hyperterminal configuration
davidkwak 0:db24f1dae4a4 18 * 115200 bauds, 8-bit data, no parity
davidkwak 0:db24f1dae4a4 19 */
davidkwak 0:db24f1dae4a4 20
davidkwak 0:db24f1dae4a4 21 /**
davidkwak 0:db24f1dae4a4 22 * This is the name of your WiFi network.
davidkwak 0:db24f1dae4a4 23 * Look for this name in your WiFi settings.
davidkwak 0:db24f1dae4a4 24 * (e.g. your phone's list of WiFi networks in the WiFi settings menu.)
davidkwak 0:db24f1dae4a4 25 * tip: add double-quotes around SSID to add spaces to name.
davidkwak 0:db24f1dae4a4 26 */
davidkwak 0:db24f1dae4a4 27 #define NETWORK_SSID "\"<YOUR NETWORK NAME HERE>\""
davidkwak 0:db24f1dae4a4 28
davidkwak 0:db24f1dae4a4 29 /**
davidkwak 0:db24f1dae4a4 30 * This is the password of your WiFi network.
davidkwak 0:db24f1dae4a4 31 * Leave as empty string (e.g "") to connect to OPEN network.
davidkwak 0:db24f1dae4a4 32 */
davidkwak 0:db24f1dae4a4 33 #define NETWORK_PASSWORD "\"<YOUR NETWORK PASSWORD HERE>\""
davidkwak 0:db24f1dae4a4 34
davidkwak 0:db24f1dae4a4 35 const char key[] = "0a49487bc297bc061ca49ac01eb3755f"; // Replace with your M2X API key
davidkwak 0:db24f1dae4a4 36 const char feed[] = "db817fd389c05eca79c331b4bb6daf8d"; // Replace with your blueprint Feed ID
davidkwak 0:db24f1dae4a4 37 const char tempStream[] = "temperature"; // Replace with your stream name
davidkwak 0:db24f1dae4a4 38 const char humStream[] = "humidity"; // Replace with your stream name
davidkwak 0:db24f1dae4a4 39 const char accStream[] = "acceleration"; // Replace with your stream name
davidkwak 0:db24f1dae4a4 40
davidkwak 0:db24f1dae4a4 41 char name[] = "redmond_st_office"; // Name of current location of datasource
davidkwak 0:db24f1dae4a4 42 double latitude = 47.633889; // You can also read those values from a GPS
davidkwak 0:db24f1dae4a4 43 double longitude = -122.138611;
davidkwak 0:db24f1dae4a4 44 double elevation = 97.46;
davidkwak 0:db24f1dae4a4 45
davidkwak 0:db24f1dae4a4 46 /* Instantiate the serial console. */
davidkwak 0:db24f1dae4a4 47 Serial pc(SERIAL_TX, SERIAL_RX);
davidkwak 0:db24f1dae4a4 48
davidkwak 0:db24f1dae4a4 49 int main()
davidkwak 0:db24f1dae4a4 50 {
davidkwak 0:db24f1dae4a4 51 /* Set the console terminal to 115200 bps. */
davidkwak 0:db24f1dae4a4 52 pc.baud(CONSOLE_BAUD);
davidkwak 0:db24f1dae4a4 53
davidkwak 0:db24f1dae4a4 54 /* Instantiate the X-CUBE-MEMS Library. */
davidkwak 0:db24f1dae4a4 55 static X_CUBE_MEMS *mems_expansion_board = X_CUBE_MEMS::Instance();
davidkwak 0:db24f1dae4a4 56
davidkwak 0:db24f1dae4a4 57 /* Read and output the humidity sensor id to confirm communication. */
davidkwak 0:db24f1dae4a4 58 uint8_t hts221_id = mems_expansion_board->hts221.ReadID();
davidkwak 0:db24f1dae4a4 59
davidkwak 0:db24f1dae4a4 60 pc.printf("HTS221_ID = 0x%x\n\t\r", hts221_id);
davidkwak 0:db24f1dae4a4 61
davidkwak 0:db24f1dae4a4 62 /**
davidkwak 0:db24f1dae4a4 63 * WIFI Setup
davidkwak 0:db24f1dae4a4 64 */
davidkwak 0:db24f1dae4a4 65
davidkwak 0:db24f1dae4a4 66 /* Setup wiconnect serial interface configuration. */
davidkwak 0:db24f1dae4a4 67
davidkwak 0:db24f1dae4a4 68 /**
davidkwak 0:db24f1dae4a4 69 * Here we only specify the rx buffer size and not rx buffer pointer, this means
davidkwak 0:db24f1dae4a4 70 * the serial RX buffer will be dynamically allocated.
davidkwak 0:db24f1dae4a4 71 */
davidkwak 0:db24f1dae4a4 72 SerialConfig serialConfig(WICONNECT_RX_PIN, WICONNECT_TX_PIN, 256, NULL);
davidkwak 0:db24f1dae4a4 73
davidkwak 0:db24f1dae4a4 74 /* Instantiate WiConnect Library. */
davidkwak 0:db24f1dae4a4 75
davidkwak 0:db24f1dae4a4 76 /**
davidkwak 0:db24f1dae4a4 77 * Here we only specify the buffer size and not buffer pointer, this means
davidkwak 0:db24f1dae4a4 78 * the internal buffer will be dynamically allocated.
davidkwak 0:db24f1dae4a4 79 */
davidkwak 0:db24f1dae4a4 80 Wiconnect wiconnect(serialConfig, 256, NULL, WICONNECT_RESET_PIN);
davidkwak 0:db24f1dae4a4 81
davidkwak 0:db24f1dae4a4 82 /* Initiate Communication with WiFi Module. */
davidkwak 0:db24f1dae4a4 83 pc.printf("Initializing WiConnect Library...\r\n");
davidkwak 0:db24f1dae4a4 84
davidkwak 0:db24f1dae4a4 85 WiconnectResult result;
davidkwak 0:db24f1dae4a4 86
davidkwak 0:db24f1dae4a4 87 if(WICONNECT_FAILED(result, wiconnect.init(true)))
davidkwak 0:db24f1dae4a4 88 {
davidkwak 0:db24f1dae4a4 89 if(result == WICONNECT_FIRMWARE_OUTDATED)
davidkwak 0:db24f1dae4a4 90 {
davidkwak 0:db24f1dae4a4 91 pc.printf("** The WiFi firmware is not supported. Run the ota example to update the firmware:\r\n");
davidkwak 0:db24f1dae4a4 92 pc.printf("https://developer.mbed.org/teams/ACKme/code/wiconnect-ota_example\r\n\r\n");
davidkwak 0:db24f1dae4a4 93 }
davidkwak 0:db24f1dae4a4 94 else
davidkwak 0:db24f1dae4a4 95 {
davidkwak 0:db24f1dae4a4 96 pc.printf("Failed to initialize communication with WiFi module!\r\n"
davidkwak 0:db24f1dae4a4 97 "Make sure the wires are connected correctly\r\n");
davidkwak 0:db24f1dae4a4 98 }
davidkwak 0:db24f1dae4a4 99
davidkwak 0:db24f1dae4a4 100 return -1;
davidkwak 0:db24f1dae4a4 101 }
davidkwak 0:db24f1dae4a4 102
davidkwak 0:db24f1dae4a4 103 /* Manually connected to the specified network (to ensure SDK backward compatibility. */
davidkwak 0:db24f1dae4a4 104 pc.printf("Setting network SSID: %s\r\n", NETWORK_SSID);
davidkwak 0:db24f1dae4a4 105
davidkwak 0:db24f1dae4a4 106 if(WICONNECT_FAILED(result, wiconnect.setSetting("wlan.ssid", NETWORK_SSID)))
davidkwak 0:db24f1dae4a4 107 {
davidkwak 0:db24f1dae4a4 108 pc.printf("Failed to set wlan.ssid setting\r\n");
davidkwak 0:db24f1dae4a4 109 return -1;
davidkwak 0:db24f1dae4a4 110 }
davidkwak 0:db24f1dae4a4 111
davidkwak 0:db24f1dae4a4 112 pc.printf("Setting network password\r\n");
davidkwak 0:db24f1dae4a4 113
davidkwak 0:db24f1dae4a4 114 if(WICONNECT_FAILED(result, wiconnect.setSetting("wlan.passkey", NETWORK_PASSWORD)))
davidkwak 0:db24f1dae4a4 115 {
davidkwak 0:db24f1dae4a4 116 pc.printf("Failed to set wlan.passkey setting\r\n");
davidkwak 0:db24f1dae4a4 117 return -1;
davidkwak 0:db24f1dae4a4 118 }
davidkwak 0:db24f1dae4a4 119
davidkwak 0:db24f1dae4a4 120 pc.printf("Saving settings to Non-volatile Memory\r\n");
davidkwak 0:db24f1dae4a4 121
davidkwak 0:db24f1dae4a4 122 if(WICONNECT_FAILED(result, wiconnect.saveSettings()))
davidkwak 0:db24f1dae4a4 123 {
davidkwak 0:db24f1dae4a4 124 pc.printf("Failed save settings\r\n");
davidkwak 0:db24f1dae4a4 125 return -1;
davidkwak 0:db24f1dae4a4 126 }
davidkwak 0:db24f1dae4a4 127
davidkwak 0:db24f1dae4a4 128 pc.printf("IP Address: %s\r\n", wiconnect.getIpAddress());
davidkwak 0:db24f1dae4a4 129 pc.printf("Network joined!\r\n");
davidkwak 0:db24f1dae4a4 130
davidkwak 0:db24f1dae4a4 131 /**
davidkwak 0:db24f1dae4a4 132 * M2X Setup
davidkwak 0:db24f1dae4a4 133 */
davidkwak 0:db24f1dae4a4 134
davidkwak 0:db24f1dae4a4 135 /* Instantiate the M2X Stream Client. */
davidkwak 0:db24f1dae4a4 136 Client client;
davidkwak 0:db24f1dae4a4 137 M2XStreamClient m2xClient(&client, key);
davidkwak 0:db24f1dae4a4 138
davidkwak 0:db24f1dae4a4 139 /* Update device location. */
davidkwak 0:db24f1dae4a4 140 int m2x_response = m2xClient.updateLocation(feed, name, latitude, longitude, elevation);
davidkwak 0:db24f1dae4a4 141
davidkwak 0:db24f1dae4a4 142 pc.printf("updateLocation response code: %d\r\n", m2x_response);
davidkwak 0:db24f1dae4a4 143
davidkwak 0:db24f1dae4a4 144 /* Main loop */
davidkwak 0:db24f1dae4a4 145 while(1)
davidkwak 0:db24f1dae4a4 146 {
davidkwak 0:db24f1dae4a4 147 volatile float TEMPERATURE_Value;
davidkwak 0:db24f1dae4a4 148 volatile float HUMIDITY_Value;
davidkwak 0:db24f1dae4a4 149 volatile float PRESSURE_Value;
davidkwak 0:db24f1dae4a4 150 volatile AxesRaw_TypeDef MAG_Value;
davidkwak 0:db24f1dae4a4 151 volatile AxesRaw_TypeDef ACC_Value;
davidkwak 0:db24f1dae4a4 152 volatile AxesRaw_TypeDef GYR_Value;
davidkwak 0:db24f1dae4a4 153
davidkwak 0:db24f1dae4a4 154 /* Update sensors. */
davidkwak 0:db24f1dae4a4 155 mems_expansion_board->hts221.GetTemperature((float *)&TEMPERATURE_Value);
davidkwak 0:db24f1dae4a4 156 mems_expansion_board->hts221.GetHumidity((float *)&HUMIDITY_Value);
davidkwak 0:db24f1dae4a4 157 mems_expansion_board->lps25h.GetPressure((float *)&PRESSURE_Value);
davidkwak 0:db24f1dae4a4 158 mems_expansion_board->lis3mdl.GetAxes((AxesRaw_TypeDef *)&MAG_Value);
davidkwak 0:db24f1dae4a4 159 mems_expansion_board->lsm6ds0.Acc_GetAxes((AxesRaw_TypeDef *)&ACC_Value);
davidkwak 0:db24f1dae4a4 160 mems_expansion_board->lsm6ds0.Gyro_GetAxes((AxesRaw_TypeDef *)&GYR_Value);
davidkwak 0:db24f1dae4a4 161
davidkwak 0:db24f1dae4a4 162 /* Output sensor data. */
davidkwak 0:db24f1dae4a4 163 pc.printf("TEMP: %f HUMIDITY: %f PRESSURE: %f\t\r\n", TEMPERATURE_Value, HUMIDITY_Value, PRESSURE_Value);
davidkwak 0:db24f1dae4a4 164 pc.printf("X_MAG: %d, Y_MAG: %d, Z_MAG: %d\t\r\n", MAG_Value.AXIS_X, MAG_Value.AXIS_Y, MAG_Value.AXIS_Z);
davidkwak 0:db24f1dae4a4 165 pc.printf("X_ACC: %d, Y_ACC: %d, Z_ACC: %d\t\r\n", ACC_Value.AXIS_X, ACC_Value.AXIS_Y, ACC_Value.AXIS_Z);
davidkwak 0:db24f1dae4a4 166 pc.printf("X_GYR: %d, Y_GYR: %d, Z_GYR: %d\t\r\n\n", GYR_Value.AXIS_X, GYR_Value.AXIS_Y, GYR_Value.AXIS_Z);
davidkwak 0:db24f1dae4a4 167
davidkwak 0:db24f1dae4a4 168 /* Convert temperature to degrees Farhenheit. */
davidkwak 0:db24f1dae4a4 169 float temperature_f = (1.8f * TEMPERATURE_Value) + 32.0f;
davidkwak 0:db24f1dae4a4 170
davidkwak 0:db24f1dae4a4 171 /* Post temperature to the m2x stream. */
davidkwak 0:db24f1dae4a4 172 m2x_response = m2xClient.updateStreamValue(feed, tempStream, temperature_f);
davidkwak 0:db24f1dae4a4 173
davidkwak 0:db24f1dae4a4 174 pc.printf("Temperature updateStreamValue response code: %d\r\n", m2x_response);
davidkwak 0:db24f1dae4a4 175
davidkwak 0:db24f1dae4a4 176 if (m2x_response == -1)
davidkwak 0:db24f1dae4a4 177 {
davidkwak 0:db24f1dae4a4 178 pc.printf("Temperature data transmit post error\n");
davidkwak 0:db24f1dae4a4 179 }
davidkwak 0:db24f1dae4a4 180
davidkwak 0:db24f1dae4a4 181 /* Post humidity to the m2x stream. */
davidkwak 0:db24f1dae4a4 182 m2x_response = m2xClient.updateStreamValue(feed, humStream, HUMIDITY_Value);
davidkwak 0:db24f1dae4a4 183
davidkwak 0:db24f1dae4a4 184 pc.printf("Humidity updateStreamValue response code: %d\r\n", m2x_response);
davidkwak 0:db24f1dae4a4 185
davidkwak 0:db24f1dae4a4 186 if (m2x_response == -1)
davidkwak 0:db24f1dae4a4 187 {
davidkwak 0:db24f1dae4a4 188 pc.printf("Humidity data transmit post error\n");
davidkwak 0:db24f1dae4a4 189 }
davidkwak 0:db24f1dae4a4 190
davidkwak 0:db24f1dae4a4 191 /* Post acceleration (x-axis) to the m2x stream. */
davidkwak 0:db24f1dae4a4 192 m2x_response = m2xClient.updateStreamValue(feed, accStream, ACC_Value.AXIS_X);
davidkwak 0:db24f1dae4a4 193
davidkwak 0:db24f1dae4a4 194 pc.printf("Acceleration updateStreamValue response code: %d\r\n", m2x_response);
davidkwak 0:db24f1dae4a4 195
davidkwak 0:db24f1dae4a4 196 if (m2x_response == -1)
davidkwak 0:db24f1dae4a4 197 {
davidkwak 0:db24f1dae4a4 198 pc.printf("Acceleration data transmit post error\n");
davidkwak 0:db24f1dae4a4 199 }
davidkwak 0:db24f1dae4a4 200
davidkwak 0:db24f1dae4a4 201 pc.printf("\n");
davidkwak 0:db24f1dae4a4 202
davidkwak 0:db24f1dae4a4 203 wait(30); // 30 s
davidkwak 0:db24f1dae4a4 204 }
davidkwak 0:db24f1dae4a4 205 }
davidkwak 0:db24f1dae4a4 206