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
Revision 1:e5cbc3ffb8ec, committed 2014-10-24
- Comitter:
- lwrnc
- Date:
- Fri Oct 24 22:48:45 2014 +0000
- Parent:
- 0:38a7a8cae773
- Commit message:
- modify to work with CC3000 and report RSSI
Changed in this revision
--- a/EthernetInterface.lib Fri Feb 21 21:12:15 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/EthernetInterface/#6a67d2bddc7c
--- a/LM75B.lib Fri Feb 21 21:12:15 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/chris/code/LM75B/#6a70c9303bbe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cc3000_hostdriver_mbedsocket.lib Fri Oct 24 22:48:45 2014 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/Kojto/code/cc3000_hostdriver_mbedsocket/#ca8c234997c0
--- a/main.cpp Fri Feb 21 21:12:15 2014 +0000
+++ b/main.cpp Fri Oct 24 22:48:45 2014 +0000
@@ -2,74 +2,132 @@
#include "M2XStreamClient.h"
#include "mbed.h"
-#include "EthernetInterface.h"
-#include "LM75B.h" //I2C Temperature Sensor
+#include "cc3000.h"
+
+#define DEBUG 1
+#if DEBUG
+ #define dprintf printf
+#else
+ #define dprintf(...)
+#endif
char feedId[] = "<feed id>"; // Feed you want to post to
char m2xKey[] = "<m2x api key>"; // Your M2X access key
char streamName[] = "<stream name>"; // Stream you want to post to
-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;
+char SSID[] = "your_ssid";
+char KEY[] = "your_key";
+//Adafruit CC3000 shield on Arduino pin definitions.
+cc3000 net(D3, D5, D10, SPI(D11, D12, D13), SSID, KEY, WPA2, false);
+Serial pc(USBTX, USBRX);
Client client;
M2XStreamClient m2xClient(&client, m2xKey);
-EthernetInterface eth;
-LM75B tmp(p28,p27); // I2C Temperature Sensor
+typedef struct scanResults {
+ unsigned long numNetworksFound;
+ unsigned long results;
+ unsigned isValid:1;
+ unsigned rssi:7;
+ unsigned securityMode:2;
+ unsigned ssidLength:6;
+ unsigned short frameTime;
+ unsigned char ssid_name[32];
+ unsigned char bssid[6];
+} scanResults;
+
+/** return RSSI in dBm for given ssid if found. returns 0 on failure */
+int8_t getRSSI(char *ssid, int len) {
+ int ret;
+ scanResults sr;
+ int apCounter;
+
+ //TODO request a scan
+
+ if ((ret = net._wlan.ioctl_get_scan_results(2000, (unsigned char *)&sr)) != 0) {
+ printf("get scan results failed ret=%d\r\n", ret);
+ return 0;
+ }
+ apCounter = sr.numNetworksFound;
+ dprintf("APs found: %d\r\n", apCounter);
+
+ do {
+ if (sr.isValid) {
+ if (DEBUG) {
+ char ssidbuf[32];
+ memcpy(ssidbuf, sr.ssid_name, sr.ssidLength);
+ ssidbuf[sr.ssidLength] = 0;
+ dprintf("ssid=%s rssi=%3d\r\n", ssidbuf, sr.rssi);
+ }
+ if (memcmp(ssid, sr.ssid_name, len) == 0) {
+ return sr.rssi - 128;
+ }
+ }
+ if (--apCounter> 0) {
+ if ((ret = net._wlan.ioctl_get_scan_results(2000, (unsigned char *)&sr)) != 0) {
+ printf("get scan results failed ret=%d\r\n", ret);
+ return 0;
+ }
+ }
+ } while (apCounter > 0);
+ dprintf("End of AP list.\r\n");
+ return 0;
+}
void on_data_point_found(const char* at, const char* value, int index, void* context) {
+ //TODO value is wrong. check m2x library
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() {
+ pc.baud(115200);
+
+ if (DEBUG) {
+ // allow time to get a serial console
+ for (int i=10; i>=0; i--) {
+ wait(0.5);
+ dprintf("Starting in %d\r\n", i);
+ }
+ }
-int main() {
- eth.init();
- eth.connect();
- printf("IP Address: %s\r\n", eth.getIPAddress());
+ printf("net.init...\r\n");
+ net.init();
+ printf("net.init done\r\n");
+ if (net.connect() == -1) {
+ printf("Failed to connect. Please verify connection details and try again.\r\n");
+ } else {
+ printf("net.connect done. IP address: %s \r\n", net.getIPAddress());
+ }
- char amb_temp[6];
+ int rssi;
+ int i = 0;
- while (true) {
+ while (++i < 10) {
- // read temp
- sprintf(amb_temp, "%0.2f", tmp.read());
-
- // post temperature
- int response = m2xClient.post(feedId, streamName, amb_temp);
+ // read RSSI
+ rssi = getRSSI(SSID, sizeof(SSID) - 1);
+ if (rssi == 0) {
+ printf("Failed to get RSSI\r\n");
+ delay(30000);
+ continue;
+ }
+
+ // post RSSI
+ dprintf("Posting rssi=%d\r\n", rssi);
+ int response = m2xClient.post(feedId, streamName, rssi);
printf("Post response code: %d\r\n", response);
if (response == -1) while (true) ;
- // read temperature
- response = m2xClient.fetchValues(feedId, streamName, on_data_point_found, NULL);
+ // read RSSI
+ dprintf("Reading rssi\r\n");
+ response = m2xClient.fetchValues(feedId, streamName, on_data_point_found, NULL, NULL, NULL, "5");
printf("Fetch response code: %d\r\n", response);
if (response == -1) while (true) ;
-
- // update location
- response = m2xClient.updateLocation(feedId, name, latitude, longitude, elevation);
- printf("updateLocation response code: %d\r\n", response);
- if (response == -1) while (true) ;
-
- // read location
- response = m2xClient.readLocation(feedId, on_location_found, NULL);
- printf("readLocation response code: %d\r\n", response);
- if (response == -1) while (true) ;
- // wait 60 secs and then loop
- delay(60000);
+ // wait 30 secs and then loop
+ delay(30000);
}
+ dprintf("Exiting\r\n");
+ net.disconnect();
}
\ No newline at end of file
--- a/mbed-rtos.lib Fri Feb 21 21:12:15 2014 +0000 +++ b/mbed-rtos.lib Fri Oct 24 22:48:45 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed-rtos/#f88660a9bed1 +http://developer.mbed.org/users/lwrnc/code/mbed-rtos/#f49ed7c05cda
--- a/mbed.bld Fri Feb 21 21:12:15 2014 +0000 +++ b/mbed.bld Fri Oct 24 22:48:45 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/824293ae5e43 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1 \ No newline at end of file
