k64f_OneNET

Dependencies:   EthernetInterface FXOS8700Q eCompass_FPU_Lib mbed-rtos mbed mbed

Fork of K64F_eCompass by Jim Carver

Committer:
robert_jw
Date:
Mon Jun 20 01:42:23 2016 +0000
Revision:
5:15c4a67df599
Parent:
4:ad29ae25685c
gSensor-OneNET

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 0:32e37c82ef4a 1 #include "mbed.h"
JimCarver 0:32e37c82ef4a 2 #include "FXOS8700Q.h"
JimCarver 0:32e37c82ef4a 3 #include "eCompass_Lib.h"
JimCarver 0:32e37c82ef4a 4 #include "rtos.h"
JimCarver 2:51f3303cbefd 5 //#include "MotionSensorDtypes.h"
robert_jw 4:ad29ae25685c 6 #include "EthernetInterface.h"
JimCarver 0:32e37c82ef4a 7
JimCarver 0:32e37c82ef4a 8
JimCarver 2:51f3303cbefd 9 FXOS8700Q_acc acc( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1);
JimCarver 2:51f3303cbefd 10 FXOS8700Q_mag mag( PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1);
JimCarver 0:32e37c82ef4a 11 Serial pc(USBTX, USBRX);
JimCarver 0:32e37c82ef4a 12 eCompass compass;
robert_jw 4:ad29ae25685c 13 DigitalOut red(LED_RED); //debug led
robert_jw 4:ad29ae25685c 14 DigitalOut green(LED_GREEN); //debug ledeCompass compass;
JimCarver 0:32e37c82ef4a 15
JimCarver 2:51f3303cbefd 16 //void calibrate_thread(void const *argument);
JimCarver 2:51f3303cbefd 17 //void print_thread(void const *argument);
JimCarver 2:51f3303cbefd 18 //void compass_thread(void const *argument);
JimCarver 2:51f3303cbefd 19
JimCarver 0:32e37c82ef4a 20 extern axis6_t axis6;
JimCarver 0:32e37c82ef4a 21 extern uint32_t seconds;
JimCarver 0:32e37c82ef4a 22 extern uint32_t compass_type; // optional, NED compass is default
JimCarver 0:32e37c82ef4a 23 extern int32_t tcount;
JimCarver 0:32e37c82ef4a 24 extern uint8_t cdebug;
JimCarver 0:32e37c82ef4a 25 int l = 0;
JimCarver 2:51f3303cbefd 26 volatile int sflag = 0;
JimCarver 0:32e37c82ef4a 27
robert_jw 4:ad29ae25685c 28 char http_cmd[500];
robert_jw 4:ad29ae25685c 29 char devid[] = "1100227";
robert_jw 4:ad29ae25685c 30 char api_key[] ="Jl4VyAUUG6j4Qdms3ZyOjbAu6J8=";
robert_jw 4:ad29ae25685c 31 char host[] = "api.heclouds.com";
robert_jw 4:ad29ae25685c 32
robert_jw 4:ad29ae25685c 33 EthernetInterface eth; //create ethernet
robert_jw 4:ad29ae25685c 34 TCPSocketConnection sock;
robert_jw 4:ad29ae25685c 35
JimCarver 2:51f3303cbefd 36 MotionSensorDataCounts mag_raw;
JimCarver 2:51f3303cbefd 37 MotionSensorDataCounts acc_raw;
JimCarver 2:51f3303cbefd 38
robert_jw 4:ad29ae25685c 39
JimCarver 2:51f3303cbefd 40 void hal_map( MotionSensorDataCounts * acc_raw, MotionSensorDataCounts * mag_raw)
JimCarver 0:32e37c82ef4a 41 {
JimCarver 0:32e37c82ef4a 42 int16_t t;
JimCarver 0:32e37c82ef4a 43 // swap and negate X & Y axis
JimCarver 2:51f3303cbefd 44 t = acc_raw->x;
JimCarver 2:51f3303cbefd 45 acc_raw->x = acc_raw->y * -1;
JimCarver 2:51f3303cbefd 46 acc_raw->y = t * -1;
JimCarver 0:32e37c82ef4a 47 // swap mag X & Y axis
JimCarver 2:51f3303cbefd 48 t = mag_raw->x;
JimCarver 2:51f3303cbefd 49 mag_raw->x = mag_raw->y;
JimCarver 2:51f3303cbefd 50 mag_raw->y = t;
JimCarver 0:32e37c82ef4a 51 // negate mag Z axis
JimCarver 2:51f3303cbefd 52 mag_raw->z *= -1;
JimCarver 0:32e37c82ef4a 53 }
JimCarver 0:32e37c82ef4a 54
robert_jw 4:ad29ae25685c 55 void creat_cmd()
robert_jw 4:ad29ae25685c 56 {
robert_jw 4:ad29ae25685c 57 char tmp[30];
robert_jw 4:ad29ae25685c 58 char str[100];
robert_jw 4:ad29ae25685c 59
robert_jw 4:ad29ae25685c 60 sprintf(str,",;roll,%d;pitch,%d;yaw,%d", axis6.roll, axis6.pitch, axis6.yaw);
robert_jw 4:ad29ae25685c 61 http_cmd[0] = 0;
robert_jw 4:ad29ae25685c 62 strcat(http_cmd,"POST /devices/");
robert_jw 4:ad29ae25685c 63 strcat(http_cmd,devid);
robert_jw 4:ad29ae25685c 64 strcat(http_cmd,"/datapoints?type=5 HTTP/1.1\r\n");
robert_jw 4:ad29ae25685c 65 strcat(http_cmd,"api-key:");
robert_jw 4:ad29ae25685c 66 strcat(http_cmd,api_key);
robert_jw 4:ad29ae25685c 67 strcat(http_cmd,"\r\n");
robert_jw 4:ad29ae25685c 68 strcat(http_cmd,"Host:");
robert_jw 4:ad29ae25685c 69 strcat(http_cmd,host);
robert_jw 4:ad29ae25685c 70 strcat(http_cmd,"\r\n");
robert_jw 4:ad29ae25685c 71 sprintf(tmp,"Content-Length:%d\r\n\r\n", strlen(str));
robert_jw 4:ad29ae25685c 72 strcat(http_cmd,tmp);
robert_jw 4:ad29ae25685c 73 strcat(http_cmd,str);
robert_jw 4:ad29ae25685c 74 }
robert_jw 4:ad29ae25685c 75
JimCarver 0:32e37c82ef4a 76 //
JimCarver 0:32e37c82ef4a 77 // Print data values for debug
JimCarver 0:32e37c82ef4a 78 //
JimCarver 0:32e37c82ef4a 79 void debug_print(void)
JimCarver 0:32e37c82ef4a 80 {
JimCarver 0:32e37c82ef4a 81 // Some useful printf statements for debug
JimCarver 0:32e37c82ef4a 82 printf("roll=%d, pitch=%d, yaw=%d\r\n", axis6.roll, axis6.pitch, axis6.yaw);
JimCarver 0:32e37c82ef4a 83 printf("Acc: X= %2.3f Y= %2.3f Z= %2.3f ", axis6.fGax, axis6.fGay, axis6.fGaz);
JimCarver 0:32e37c82ef4a 84 printf("Mag: X= %4.1f Y= %4.1f Z= %4.1f\r\n\r\n", axis6.fUTmx, axis6.fUTmy, axis6.fUTmz);
JimCarver 0:32e37c82ef4a 85 printf("Quaternion: Q0= %1.4f Q1= %1.4f Q2= %1.4f Q3= %1.4f\r\n\r\n", axis6.q0, axis6.q1, axis6.q2, axis6.q3);
JimCarver 0:32e37c82ef4a 86 }
JimCarver 0:32e37c82ef4a 87
JimCarver 0:32e37c82ef4a 88
robert_jw 4:ad29ae25685c 89 void compass_thread(void const *argument)
robert_jw 4:ad29ae25685c 90 {
JimCarver 0:32e37c82ef4a 91 // get raw data from the sensors
JimCarver 2:51f3303cbefd 92 acc.getAxis( acc_raw);
JimCarver 2:51f3303cbefd 93 mag.getAxis( mag_raw);
JimCarver 0:32e37c82ef4a 94 if(tcount) compass.run( acc_raw, mag_raw); // calculate the eCompass
robert_jw 4:ad29ae25685c 95 if(l++ >= 50)
robert_jw 4:ad29ae25685c 96 {
robert_jw 4:ad29ae25685c 97 // take car of business once a second
JimCarver 0:32e37c82ef4a 98 seconds++;
JimCarver 2:51f3303cbefd 99 sflag = 1;
JimCarver 2:51f3303cbefd 100 compass.calibrate();
JimCarver 3:d6404f10bd3b 101 debug_print();
JimCarver 0:32e37c82ef4a 102 l = 0;
robert_jw 4:ad29ae25685c 103
robert_jw 4:ad29ae25685c 104 if(sock.is_connected())
robert_jw 4:ad29ae25685c 105 {
robert_jw 4:ad29ae25685c 106 green = 0;
robert_jw 4:ad29ae25685c 107 red = 1;
robert_jw 4:ad29ae25685c 108 creat_cmd();
robert_jw 4:ad29ae25685c 109 sock.send(http_cmd, strlen(http_cmd));
robert_jw 4:ad29ae25685c 110 //printf("%s\r\n",http_cmd);
JimCarver 0:32e37c82ef4a 111 }
robert_jw 4:ad29ae25685c 112 else
robert_jw 4:ad29ae25685c 113 {
robert_jw 4:ad29ae25685c 114 green = 1;
robert_jw 4:ad29ae25685c 115 red = 0;
robert_jw 4:ad29ae25685c 116 sock.close();
robert_jw 4:ad29ae25685c 117
robert_jw 4:ad29ae25685c 118 wait(3);
robert_jw 4:ad29ae25685c 119
robert_jw 4:ad29ae25685c 120 printf("IP Address is %s\r\n", eth.getIPAddress());
robert_jw 4:ad29ae25685c 121 sock.connect("api.heclouds.com", 80); //connetct to OneNET
robert_jw 4:ad29ae25685c 122
robert_jw 4:ad29ae25685c 123 printf("reconnect the server\r\n");
robert_jw 4:ad29ae25685c 124 while(!sock.is_connected());
robert_jw 4:ad29ae25685c 125 }
robert_jw 4:ad29ae25685c 126
robert_jw 4:ad29ae25685c 127 }
JimCarver 0:32e37c82ef4a 128 tcount++;
JimCarver 0:32e37c82ef4a 129 }
JimCarver 0:32e37c82ef4a 130
JimCarver 2:51f3303cbefd 131
robert_jw 4:ad29ae25685c 132 int main()
robert_jw 4:ad29ae25685c 133 {
robert_jw 4:ad29ae25685c 134 RtosTimer compass_timer(compass_thread, osTimerPeriodic);
robert_jw 4:ad29ae25685c 135
robert_jw 4:ad29ae25685c 136 /* ethernet init */
robert_jw 4:ad29ae25685c 137 eth.init(); //DHCP
robert_jw 4:ad29ae25685c 138 eth.connect();
robert_jw 4:ad29ae25685c 139 printf("IP Address is %s\r\n", eth.getIPAddress());
robert_jw 4:ad29ae25685c 140 sock.connect("api.heclouds.com", 80); //connetct to OneNET
JimCarver 3:d6404f10bd3b 141
robert_jw 4:ad29ae25685c 142 printf("\r\n\n\n\n\n\n\n");
robert_jw 4:ad29ae25685c 143 printf("Who AM I= %X\r\n", acc.whoAmI());
robert_jw 4:ad29ae25685c 144 acc.enable();
robert_jw 4:ad29ae25685c 145
robert_jw 4:ad29ae25685c 146 acc.getAxis( acc_raw);
robert_jw 4:ad29ae25685c 147 mag.getAxis( mag_raw);
robert_jw 4:ad29ae25685c 148
robert_jw 4:ad29ae25685c 149 compass_timer.start(20); // Run the Compass every 20ms
robert_jw 4:ad29ae25685c 150 while(1)
robert_jw 4:ad29ae25685c 151 {
robert_jw 4:ad29ae25685c 152 //Thread::wait(osWaitForever);
robert_jw 4:ad29ae25685c 153 /**********receive response data*******************/
robert_jw 4:ad29ae25685c 154 char buffer[300];
robert_jw 4:ad29ae25685c 155 int ret = 0;
robert_jw 4:ad29ae25685c 156 buffer[0] = '\0';
robert_jw 4:ad29ae25685c 157 if(sock.is_connected())
robert_jw 4:ad29ae25685c 158 {
robert_jw 4:ad29ae25685c 159 ret = sock.receive(buffer, sizeof(buffer)-1);
robert_jw 4:ad29ae25685c 160 if(ret >= 0)
robert_jw 4:ad29ae25685c 161 {
robert_jw 4:ad29ae25685c 162 buffer[ret] = '\0';
robert_jw 4:ad29ae25685c 163 }
robert_jw 4:ad29ae25685c 164 //printf("Received %d chars from server:\r\n%s\r\n", ret, buffer);
robert_jw 4:ad29ae25685c 165 }
robert_jw 4:ad29ae25685c 166 else
robert_jw 4:ad29ae25685c 167 {
robert_jw 4:ad29ae25685c 168 wait(3);
robert_jw 4:ad29ae25685c 169 }
JimCarver 2:51f3303cbefd 170 }
JimCarver 0:32e37c82ef4a 171 }