AMMP demonstration using Freescale FRDM-KL25Z and Adafruit CC3000 Arduino shield

Dependencies:   MMA8451Q NVIC_set_all_priorities TSI cc3000_hostdriver_mbedsocket mbed

Fork of AxedaGo-Freescale by Axeda Corp

Revision:
4:3c2e21757a9c
Parent:
3:ec0169cbc94d
Child:
5:c99347399fb7
--- a/main.cpp	Tue Oct 08 14:54:06 2013 +0000
+++ b/main.cpp	Mon Jan 13 18:50:07 2014 +0000
@@ -16,31 +16,32 @@
 #include "mbed.h"
 #include "cc3000.h"
 #include "main.h"
+#include "TSISensor.h"
+#include "MMA8451Q.h"  //accelerometer
+#include "TCPSocketConnection.h"
 
-#include "HTTPClient.h"
 
 using namespace mbed_cc3000;
 
-/* cc3000 module declaration specific for user's board. Check also init() */
-#if (MY_BOARD == WIGO)
-cc3000 wifi(PTA16, PTA13, PTD0, SPI(PTD2, PTD3, PTC5), PORTA_IRQn);
-Serial pc(USBTX, USBRX);
-#elif (MY_BOARD == WIFI_DIPCORTEX)
-cc3000 wifi(p28, p27, p30, SPI(p21, p14, p37), PIN_INT0_IRQn);
-Serial pc(UART_TX, UART_RX);
+/* cc3000 module declaration specific for user's board */
+#if (MY_BOARD == WIFI_SHEILD_ADAFRUIT)
+cc3000 wifi(PTA12, PTA5, PTD0, SPI(PTD2, PTD3, PTD1),  PORTA_IRQn);
+Serial pc(USBTX, USBRX); // tx, rx
 #else
 
 #endif
 
 tUserFS user_info;
-HTTPClient http;
+
 char str[512];
 
-#ifndef CC3000_UNENCRYPTED_SMART_CONFIG
-  const uint8_t smartconfigkey[] = {0x73,0x6d,0x61,0x72,0x74,0x63,0x6f,0x6e,0x66,0x69,0x67,0x41,0x45,0x53,0x31,0x36};
-#else
-  const uint8_t smartconfigkey = 0;
-#endif
+MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
+
+DigitalOut rled(LED_RED);
+DigitalOut gled(LED_GREEN); 
+// DO NOT Use LED_BLUE - pin PTD1 already in use by WiFi chip
+
+
 
 /**
  *  \brief Print cc3000 information
@@ -79,32 +80,6 @@
   }
 }
 
-/**
- *  \brief Connect to SSID without security
- *  \param ssid Name of SSID
- *  \return none
- */
-void connect_to_ssid(char *ssid) {
-    wifi.connect_open((uint8_t *)ssid);
-}
-
-/**
- *  \brief First time configuration
- *  \param none
- *  \return none
- */
-void do_FTC(void) {
-    printf("Running First Time Configuration \r\n");
-    wifi.start_smart_config(smartconfigkey);
-    while (wifi.is_dhcp_configured() == false) {
-         wait_ms(500);
-         printf("Waiting for dhcp to be set. \r\n");
-    }
-    user_info.FTC = 1;
-    wifi.set_user_file_info((uint8_t *)&user_info, sizeof(user_info));
-    wifi._wlan.stop();
-    printf("FTC finished.\n");
-}
 
 /**
  *  \brief HTTP client demo
@@ -112,105 +87,98 @@
  *  \return int
  */
 int main() {
-    init(); /* board dependent init */
-    pc.baud(115200);
 
+    rled = 1;
+    gled = 1;
+    TSISensor touchSensor;
+    const char* SERVER_ADDRESS = "dev6-connect.axeda.com";
+    const int SERVER_PORT = 52689;
+    char *MODEL = "mbed";
+    char *SERIAL_NUM = "xkcd321"; 
+    char http_cmd[800];   
+    char buffer[800];  
+    int returnCode = 0;
+    int BGL=0;
+    TCPSocketConnection socket;
+    
+    float accels[3];
+    float resting,reading;
+    float THRESHOLD = 0.15;
+    float position;
+    
+    
+    pc.printf("Starting up...\n");
+
+
+    pc.printf("Before wifi.start...\n");
     wifi.start(0);
     printf("cc3000 HTTP client demo. \r\n");
     print_cc3000_info();
 
     printf("Attempting SSID Connection. \r\n");
-#if (USE_SMART_CONFIG == 1)
-    if (user_info.FTC == 1) {
-        wifi._wlan.ioctl_set_connection_policy(0, 1, 1);
-    } else {
-        printf("Smart config is not set, starting configuration. \r\n");
-        do_FTC();
-        printf("Smart config is set. Please restart your board. \r\n");
-        while(1);
-    }
-#else
+
     wifi._wlan.ioctl_set_connection_policy(0, 0, 0);
-#ifndef CC3000_TINY_DRIVER
-#ifdef AP_KEY
+
     connect_to_ssid(SSID, AP_KEY, AP_SECURITY);
-#else
-    connect_to_ssid(SSID);
-#endif
-#else
-    connect_to_ssid(SSID);
-#endif
-#endif
-    printf("DHCP request \r\n");
+
+    printf("send DHCP request \r\n");
+    gled =0;
+    
+    
     while (wifi.is_dhcp_configured() == false) {
+
          wait_ms(500);
          printf("  Waiting for dhcp to be set. \r\n");
+
     }
+    
+    gled = 1; rled = 0;
 
     tNetappIpconfigRetArgs ipinfo2;
     wifi.get_ip_config(&ipinfo2); // data is returned in the ipinfo2 structure
     printf("DHCP assigned IP Address = %d.%d.%d.%d \r\n", ipinfo2.aucIP[3], ipinfo2.aucIP[2], ipinfo2.aucIP[1], ipinfo2.aucIP[0]);
 
-    //GET data
-    printf("\r\nTrying to fetch page... \r\n");
-    int ret = http.get("http://mbed.org/media/uploads/donatien/hello.txt", str, 128);
-    if (!ret)
-    {
-      printf("Page fetched successfully - read %d characters \r\n", strlen(str));
-      printf("Result: %s \r\n", str);
-    }
-    else
-    {
-      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
-    }
+    wait(0.7);
+    acc.getAccAllAxis( accels );
+    resting = abs(accels[0]) + abs(accels[1]) + abs(accels[2]);
+    printf("Set up resting accelerometer - %.2f\r\n", resting);
+    wait(0.1);
 
-    //POST data
-    HTTPMap map;
-    HTTPText inText(str, 512);
-    map.put("Hello", "World");
-    map.put("test", "1234");
-    printf(" \r\nTrying to post data... \r\n");
-    ret = http.post("http://httpbin.org/post", map, &inText);
-    if (!ret)
+    while(1)
     {
-      printf("Executed POST successfully - read %d characters \r\n", strlen(str));
-      printf("Result: %s \r\n", str);
-    }
-    else
-    {
-      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
-    }
 
-    //PUT data
-    strcpy(str, "This is a PUT test!");
-    HTTPText outText(str);
-    //HTTPText inText(str, 512);
-    printf(" \r\nTrying to put resource... \r\n");
-    ret = http.put("http://httpbin.org/put", outText, &inText);
-    if (!ret)
-    {
-      printf("Executed PUT successfully - read %d characters \r\n", strlen(str));
-      printf("Result: %s \r\n", str);
-    }
-    else
-    {
-      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
+        acc.getAccAllAxis( accels );
+        reading = abs(accels[0]) + abs(accels[1]) + abs(accels[2]);
+        if ( abs( resting - reading ) > THRESHOLD ){
+            wait(0.1);
+            position = touchSensor.readPercentage();
+            printf( "BUMPED  resting %.2f   read %.2f  position %.2f \r\n", resting, reading, position );
+            rled = 1;
+            gled = 1;
+            
+            printf("Before connect\r\n");
+            while ( socket.connect(SERVER_ADDRESS, SERVER_PORT)  < 0) {
+                printf("Unable to connect to (%s) on port (%d) \r\n", SERVER_ADDRESS, SERVER_PORT);
+                wait(1);
+                printf(" - retring to connect");
+            }
+            printf( "connected");
+            BGL = position * 300;
+            sprintf(http_cmd,  "POST /ammp/data/1/%s!%s HTTP/1.1\r\nContent-type: application/json\r\nContent-Length: 52\r\n\r\n{\"data\":[{\"dataItems\":{\"bar\":\"camp\",\"BGL\":%d}}]}\r\n\r\n", MODEL, SERIAL_NUM, BGL);
+            socket.send_all(http_cmd, sizeof(http_cmd)-1);
+     
+            returnCode = socket.receive(buffer, sizeof(buffer)-1);
+        
+            buffer[returnCode] = '\0';
+            printf("Sent->%s<-\r\n",http_cmd);
+            printf("Received %d chars from server:\n\r%s\n", returnCode, buffer);
+        
+            socket.close();
+            printf("Socket closed\r\n");
+            rled = 0;
+            gled = 0;
+        }
+    
     }
-
-    //DELETE data
-    //HTTPText inText(str, 512);
-    printf(" \r\nTrying to delete resource... \r\n");
-    ret = http.del("http://httpbin.org/delete", &inText);
-    if (!ret)
-    {
-      printf("Executed DELETE successfully - read %d characters \r\n", strlen(str));
-      printf("Result: %s \r\n", str);
-    }
-    else
-    {
-      printf("Error - ret = %d - HTTP return code = %d \r\n", ret, http.getHTTPResponseCode());
-    }
-
-    printf("Demo completed. \r\n");
-    wifi.disconnect();
+    
 }