modified demo app to work on Nucleo STM32F302R8 with Adafruit CC3000 wifi shield and report RSSI

Dependencies:   M2XStreamClient cc3000_hostdriver_mbedsocket jsonlite mbed-rtos mbed

Fork of m2x-demo-all by AT&T M2X Team

Committer:
lwrnc
Date:
Fri Oct 24 22:48:45 2014 +0000
Revision:
1:e5cbc3ffb8ec
Parent:
0:38a7a8cae773
modify to work with CC3000 and report RSSI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jb8414 0:38a7a8cae773 1 #include <jsonlite.h>
jb8414 0:38a7a8cae773 2 #include "M2XStreamClient.h"
jb8414 0:38a7a8cae773 3
jb8414 0:38a7a8cae773 4 #include "mbed.h"
lwrnc 1:e5cbc3ffb8ec 5 #include "cc3000.h"
lwrnc 1:e5cbc3ffb8ec 6
lwrnc 1:e5cbc3ffb8ec 7 #define DEBUG 1
lwrnc 1:e5cbc3ffb8ec 8 #if DEBUG
lwrnc 1:e5cbc3ffb8ec 9 #define dprintf printf
lwrnc 1:e5cbc3ffb8ec 10 #else
lwrnc 1:e5cbc3ffb8ec 11 #define dprintf(...)
lwrnc 1:e5cbc3ffb8ec 12 #endif
jb8414 0:38a7a8cae773 13
jb8414 0:38a7a8cae773 14 char feedId[] = "<feed id>"; // Feed you want to post to
jb8414 0:38a7a8cae773 15 char m2xKey[] = "<m2x api key>"; // Your M2X access key
jb8414 0:38a7a8cae773 16 char streamName[] = "<stream name>"; // Stream you want to post to
jb8414 0:38a7a8cae773 17
lwrnc 1:e5cbc3ffb8ec 18 char SSID[] = "your_ssid";
lwrnc 1:e5cbc3ffb8ec 19 char KEY[] = "your_key";
lwrnc 1:e5cbc3ffb8ec 20 //Adafruit CC3000 shield on Arduino pin definitions.
lwrnc 1:e5cbc3ffb8ec 21 cc3000 net(D3, D5, D10, SPI(D11, D12, D13), SSID, KEY, WPA2, false);
lwrnc 1:e5cbc3ffb8ec 22 Serial pc(USBTX, USBRX);
jb8414 0:38a7a8cae773 23
jb8414 0:38a7a8cae773 24 Client client;
jb8414 0:38a7a8cae773 25 M2XStreamClient m2xClient(&client, m2xKey);
jb8414 0:38a7a8cae773 26
lwrnc 1:e5cbc3ffb8ec 27 typedef struct scanResults {
lwrnc 1:e5cbc3ffb8ec 28 unsigned long numNetworksFound;
lwrnc 1:e5cbc3ffb8ec 29 unsigned long results;
lwrnc 1:e5cbc3ffb8ec 30 unsigned isValid:1;
lwrnc 1:e5cbc3ffb8ec 31 unsigned rssi:7;
lwrnc 1:e5cbc3ffb8ec 32 unsigned securityMode:2;
lwrnc 1:e5cbc3ffb8ec 33 unsigned ssidLength:6;
lwrnc 1:e5cbc3ffb8ec 34 unsigned short frameTime;
lwrnc 1:e5cbc3ffb8ec 35 unsigned char ssid_name[32];
lwrnc 1:e5cbc3ffb8ec 36 unsigned char bssid[6];
lwrnc 1:e5cbc3ffb8ec 37 } scanResults;
lwrnc 1:e5cbc3ffb8ec 38
lwrnc 1:e5cbc3ffb8ec 39 /** return RSSI in dBm for given ssid if found. returns 0 on failure */
lwrnc 1:e5cbc3ffb8ec 40 int8_t getRSSI(char *ssid, int len) {
lwrnc 1:e5cbc3ffb8ec 41 int ret;
lwrnc 1:e5cbc3ffb8ec 42 scanResults sr;
lwrnc 1:e5cbc3ffb8ec 43 int apCounter;
lwrnc 1:e5cbc3ffb8ec 44
lwrnc 1:e5cbc3ffb8ec 45 //TODO request a scan
lwrnc 1:e5cbc3ffb8ec 46
lwrnc 1:e5cbc3ffb8ec 47 if ((ret = net._wlan.ioctl_get_scan_results(2000, (unsigned char *)&sr)) != 0) {
lwrnc 1:e5cbc3ffb8ec 48 printf("get scan results failed ret=%d\r\n", ret);
lwrnc 1:e5cbc3ffb8ec 49 return 0;
lwrnc 1:e5cbc3ffb8ec 50 }
lwrnc 1:e5cbc3ffb8ec 51 apCounter = sr.numNetworksFound;
lwrnc 1:e5cbc3ffb8ec 52 dprintf("APs found: %d\r\n", apCounter);
lwrnc 1:e5cbc3ffb8ec 53
lwrnc 1:e5cbc3ffb8ec 54 do {
lwrnc 1:e5cbc3ffb8ec 55 if (sr.isValid) {
lwrnc 1:e5cbc3ffb8ec 56 if (DEBUG) {
lwrnc 1:e5cbc3ffb8ec 57 char ssidbuf[32];
lwrnc 1:e5cbc3ffb8ec 58 memcpy(ssidbuf, sr.ssid_name, sr.ssidLength);
lwrnc 1:e5cbc3ffb8ec 59 ssidbuf[sr.ssidLength] = 0;
lwrnc 1:e5cbc3ffb8ec 60 dprintf("ssid=%s rssi=%3d\r\n", ssidbuf, sr.rssi);
lwrnc 1:e5cbc3ffb8ec 61 }
lwrnc 1:e5cbc3ffb8ec 62 if (memcmp(ssid, sr.ssid_name, len) == 0) {
lwrnc 1:e5cbc3ffb8ec 63 return sr.rssi - 128;
lwrnc 1:e5cbc3ffb8ec 64 }
lwrnc 1:e5cbc3ffb8ec 65 }
lwrnc 1:e5cbc3ffb8ec 66 if (--apCounter> 0) {
lwrnc 1:e5cbc3ffb8ec 67 if ((ret = net._wlan.ioctl_get_scan_results(2000, (unsigned char *)&sr)) != 0) {
lwrnc 1:e5cbc3ffb8ec 68 printf("get scan results failed ret=%d\r\n", ret);
lwrnc 1:e5cbc3ffb8ec 69 return 0;
lwrnc 1:e5cbc3ffb8ec 70 }
lwrnc 1:e5cbc3ffb8ec 71 }
lwrnc 1:e5cbc3ffb8ec 72 } while (apCounter > 0);
lwrnc 1:e5cbc3ffb8ec 73 dprintf("End of AP list.\r\n");
lwrnc 1:e5cbc3ffb8ec 74 return 0;
lwrnc 1:e5cbc3ffb8ec 75 }
jb8414 0:38a7a8cae773 76
jb8414 0:38a7a8cae773 77 void on_data_point_found(const char* at, const char* value, int index, void* context) {
lwrnc 1:e5cbc3ffb8ec 78 //TODO value is wrong. check m2x library
jb8414 0:38a7a8cae773 79 printf("Found a data point, index: %d\r\n", index);
jb8414 0:38a7a8cae773 80 printf("At: %s Value: %s\r\n", at, value);
jb8414 0:38a7a8cae773 81 }
jb8414 0:38a7a8cae773 82
lwrnc 1:e5cbc3ffb8ec 83 int main() {
lwrnc 1:e5cbc3ffb8ec 84 pc.baud(115200);
lwrnc 1:e5cbc3ffb8ec 85
lwrnc 1:e5cbc3ffb8ec 86 if (DEBUG) {
lwrnc 1:e5cbc3ffb8ec 87 // allow time to get a serial console
lwrnc 1:e5cbc3ffb8ec 88 for (int i=10; i>=0; i--) {
lwrnc 1:e5cbc3ffb8ec 89 wait(0.5);
lwrnc 1:e5cbc3ffb8ec 90 dprintf("Starting in %d\r\n", i);
lwrnc 1:e5cbc3ffb8ec 91 }
lwrnc 1:e5cbc3ffb8ec 92 }
jb8414 0:38a7a8cae773 93
lwrnc 1:e5cbc3ffb8ec 94 printf("net.init...\r\n");
lwrnc 1:e5cbc3ffb8ec 95 net.init();
lwrnc 1:e5cbc3ffb8ec 96 printf("net.init done\r\n");
lwrnc 1:e5cbc3ffb8ec 97 if (net.connect() == -1) {
lwrnc 1:e5cbc3ffb8ec 98 printf("Failed to connect. Please verify connection details and try again.\r\n");
lwrnc 1:e5cbc3ffb8ec 99 } else {
lwrnc 1:e5cbc3ffb8ec 100 printf("net.connect done. IP address: %s \r\n", net.getIPAddress());
lwrnc 1:e5cbc3ffb8ec 101 }
jb8414 0:38a7a8cae773 102
lwrnc 1:e5cbc3ffb8ec 103 int rssi;
lwrnc 1:e5cbc3ffb8ec 104 int i = 0;
jb8414 0:38a7a8cae773 105
lwrnc 1:e5cbc3ffb8ec 106 while (++i < 10) {
jb8414 0:38a7a8cae773 107
lwrnc 1:e5cbc3ffb8ec 108 // read RSSI
lwrnc 1:e5cbc3ffb8ec 109 rssi = getRSSI(SSID, sizeof(SSID) - 1);
lwrnc 1:e5cbc3ffb8ec 110 if (rssi == 0) {
lwrnc 1:e5cbc3ffb8ec 111 printf("Failed to get RSSI\r\n");
lwrnc 1:e5cbc3ffb8ec 112 delay(30000);
lwrnc 1:e5cbc3ffb8ec 113 continue;
lwrnc 1:e5cbc3ffb8ec 114 }
lwrnc 1:e5cbc3ffb8ec 115
lwrnc 1:e5cbc3ffb8ec 116 // post RSSI
lwrnc 1:e5cbc3ffb8ec 117 dprintf("Posting rssi=%d\r\n", rssi);
lwrnc 1:e5cbc3ffb8ec 118 int response = m2xClient.post(feedId, streamName, rssi);
jb8414 0:38a7a8cae773 119 printf("Post response code: %d\r\n", response);
jb8414 0:38a7a8cae773 120 if (response == -1) while (true) ;
jb8414 0:38a7a8cae773 121
lwrnc 1:e5cbc3ffb8ec 122 // read RSSI
lwrnc 1:e5cbc3ffb8ec 123 dprintf("Reading rssi\r\n");
lwrnc 1:e5cbc3ffb8ec 124 response = m2xClient.fetchValues(feedId, streamName, on_data_point_found, NULL, NULL, NULL, "5");
jb8414 0:38a7a8cae773 125 printf("Fetch response code: %d\r\n", response);
jb8414 0:38a7a8cae773 126 if (response == -1) while (true) ;
jb8414 0:38a7a8cae773 127
lwrnc 1:e5cbc3ffb8ec 128 // wait 30 secs and then loop
lwrnc 1:e5cbc3ffb8ec 129 delay(30000);
jb8414 0:38a7a8cae773 130 }
lwrnc 1:e5cbc3ffb8ec 131 dprintf("Exiting\r\n");
lwrnc 1:e5cbc3ffb8ec 132 net.disconnect();
jb8414 0:38a7a8cae773 133 }