k64f_OneNET
Dependencies: EthernetInterface FXOS8700Q eCompass_FPU_Lib mbed-rtos mbed mbed
Fork of K64F_eCompass by
Diff: main.cpp
- Revision:
- 4:ad29ae25685c
- Parent:
- 3:d6404f10bd3b
--- a/main.cpp Fri May 09 16:30:47 2014 +0000 +++ b/main.cpp Mon Jun 20 01:40:34 2016 +0000 @@ -3,21 +3,20 @@ #include "eCompass_Lib.h" #include "rtos.h" //#include "MotionSensorDtypes.h" +#include "EthernetInterface.h" FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); FXOS8700Q_mag mag( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); Serial pc(USBTX, USBRX); -DigitalOut gpo(D0); -DigitalOut led(LED_RED); eCompass compass; +DigitalOut red(LED_RED); //debug led +DigitalOut green(LED_GREEN); //debug ledeCompass compass; //void calibrate_thread(void const *argument); //void print_thread(void const *argument); //void compass_thread(void const *argument); - - extern axis6_t axis6; extern uint32_t seconds; extern uint32_t compass_type; // optional, NED compass is default @@ -26,9 +25,18 @@ int l = 0; volatile int sflag = 0; +char http_cmd[500]; +char devid[] = "1100227"; +char api_key[] ="Jl4VyAUUG6j4Qdms3ZyOjbAu6J8="; +char host[] = "api.heclouds.com"; + +EthernetInterface eth; //create ethernet +TCPSocketConnection sock; + MotionSensorDataCounts mag_raw; MotionSensorDataCounts acc_raw; + void hal_map( MotionSensorDataCounts * acc_raw, MotionSensorDataCounts * mag_raw) { int16_t t; @@ -44,6 +52,27 @@ mag_raw->z *= -1; } +void creat_cmd() +{ + char tmp[30]; + char str[100]; + + sprintf(str,",;roll,%d;pitch,%d;yaw,%d", axis6.roll, axis6.pitch, axis6.yaw); + http_cmd[0] = 0; + strcat(http_cmd,"POST /devices/"); + strcat(http_cmd,devid); + strcat(http_cmd,"/datapoints?type=5 HTTP/1.1\r\n"); + strcat(http_cmd,"api-key:"); + strcat(http_cmd,api_key); + strcat(http_cmd,"\r\n"); + strcat(http_cmd,"Host:"); + strcat(http_cmd,host); + strcat(http_cmd,"\r\n"); + sprintf(tmp,"Content-Length:%d\r\n\r\n", strlen(str)); + strcat(http_cmd,tmp); + strcat(http_cmd,str); +} + // // Print data values for debug // @@ -57,59 +86,86 @@ } -void compass_thread(void const *argument) { - +void compass_thread(void const *argument) +{ // get raw data from the sensors acc.getAxis( acc_raw); mag.getAxis( mag_raw); if(tcount) compass.run( acc_raw, mag_raw); // calculate the eCompass - if(l++ >= 50) { // take car of business once a second + if(l++ >= 50) + { + // take car of business once a second seconds++; sflag = 1; compass.calibrate(); debug_print(); l = 0; - led = !led; + + if(sock.is_connected()) + { + green = 0; + red = 1; + creat_cmd(); + sock.send(http_cmd, strlen(http_cmd)); + //printf("%s\r\n",http_cmd); } + else + { + green = 1; + red = 0; + sock.close(); + + wait(3); + + printf("IP Address is %s\r\n", eth.getIPAddress()); + sock.connect("api.heclouds.com", 80); //connetct to OneNET + + printf("reconnect the server\r\n"); + while(!sock.is_connected()); + } + + } tcount++; } - -/* -void calibrate_thread(void const *argument) { - while (true) { - // Signal flags that are reported as event are automatically cleared. - Thread::signal_wait(0x1); - compass.calibrate(); // re-calibrate the eCompass every second - } -} - - - -void print_thread(void const *argument) { - while (true) { - // Signal flags that are reported as event are automatically cleared. - Thread::signal_wait(0x1); - debug_print(); // re-calibrate the eCompass every second - } -} - */ - -int main() { -RtosTimer compass_timer(compass_thread, osTimerPeriodic); - -//cdebug = 1; // uncomment to disable compass -printf("\r\n\n\n\n\n\n\n"); -printf("Who AM I= %X\r\n", acc.whoAmI()); -acc.enable(); +int main() +{ + RtosTimer compass_timer(compass_thread, osTimerPeriodic); + + /* ethernet init */ + eth.init(); //DHCP + eth.connect(); + printf("IP Address is %s\r\n", eth.getIPAddress()); + sock.connect("api.heclouds.com", 80); //connetct to OneNET - -acc.getAxis( acc_raw); -mag.getAxis( mag_raw); - -compass_timer.start(20); // Run the Compass every 20ms -while(1) { - Thread::wait(osWaitForever); + printf("\r\n\n\n\n\n\n\n"); + printf("Who AM I= %X\r\n", acc.whoAmI()); + acc.enable(); + + acc.getAxis( acc_raw); + mag.getAxis( mag_raw); + + compass_timer.start(20); // Run the Compass every 20ms + while(1) + { + //Thread::wait(osWaitForever); + /**********receive response data*******************/ + char buffer[300]; + int ret = 0; + buffer[0] = '\0'; + if(sock.is_connected()) + { + ret = sock.receive(buffer, sizeof(buffer)-1); + if(ret >= 0) + { + buffer[ret] = '\0'; + } + //printf("Received %d chars from server:\r\n%s\r\n", ret, buffer); + } + else + { + wait(3); + } } }