![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
post sensor data to esp yun
Dependencies: WIZnetInterface mbed
Fork of espyun by
Diff: main.cpp
- Revision:
- 1:3550659bd872
- Parent:
- 0:af541535ef54
- Child:
- 2:00baa8aaaaf1
--- a/main.cpp Mon May 30 05:02:08 2016 +0000 +++ b/main.cpp Fri Nov 04 02:29:00 2016 +0000 @@ -1,43 +1,471 @@ #include "mbed.h" #include "EthernetInterface.h" +#include "cJSON.h" -int main() { - +//AnalogIn Gas(A2); +int socketPort = 8000; +int httpPort = 80; + +Serial pc(PA_13,PA_14); + +char path[]="/v1/datastreams/test/datapoint/"; + +int MallocSize = 800*sizeof(char); +bool socket_GET(TCPSocketConnection &conn); +bool http_GET(TCPSocketConnection &conn); +bool http_POST(TCPSocketConnection &conn); +bool socket_POST(TCPSocketConnection &conn,int vall); +bool closeConnect(TCPSocketConnection &conn); + +float val; +int mathtest; +bool out=false; + +int main() { + pc.baud(115200); int phy_link; - printf("Wait a second...\r\n"); - uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x1c, 0xa8, 0x95}; + pc.printf("Wait a second...\r\n"); + uint8_t mac_addr[6] = {0x78, 0x08, 0xDC, 0x1c, 0xa8, 0x95}; EthernetInterface eth; eth.init(mac_addr); //Use DHCP eth.connect(); + pc.printf("start IP Address is %s\r\n", eth.getIPAddress()); + /* + do{ + phy_link = eth.ethernet_link(); + pc.printf("..."); + wait(2); + }while(!phy_link); + printf("\r\n"); + */ + pc.printf("IP Address is %s\r\n", eth.getIPAddress()); + + TCPSocketConnection conn; - do{ - phy_link = eth.ethernet_link(); - printf("..."); - wait(2); - }while(!phy_link); - printf("\r\n"); + while(true) + { + wait(1); + //val = Gas.read()*1023; + //int mathtest = ceil(val);//math.h + //pc.printf("Gas.read=%02f,n=%d\r\n",val,mathtest); + pc.printf("start http_post\r\n"); + if(http_POST(conn)) + { + if(!conn.close()){//短连接,断开一次连接一次 + pc.printf("conn.close OK\r\n"); + }else{ + pc.printf("conn.close ERR\r\n"); + break; + } + }else{ + if(out)break; + pc.printf("connect close err!!!to do something\r\n"); + + } + + //val = 0.0; + //mathtest = 0; + + if(out)break; + } + + eth.disconnect(); + pc.printf("out the program!\r\n"); + return 0; +} + +/*socket GET*/ +bool socket_GET(TCPSocketConnection &conn) +{ + if(conn.is_connected()){ + pc.printf("connect is already ok!\r\n"); + }else{ + if(!conn.connect("iot.espressif.cn", socketPort)) //80 for http,8000 for socket,处理超时,拔掉网线后,卡在conn.connect + pc.printf("connect OK!\r\n"); + else{ + pc.printf("connct ERR!\r\n"); + out = true; + return false; + } + } + + cJSON * pJsonRoot = NULL; + pJsonRoot = cJSON_CreateObject(); + if(NULL == pJsonRoot) + { + pc.printf("socket_GET OUT1\r\n"); + out = true; + return false; + } + + cJSON * pSubJson = NULL; + pSubJson = cJSON_CreateObject(); + if(NULL == pSubJson) + { + cJSON_Delete(pJsonRoot); + pc.printf("socket_GET OUT2\r\n"); + out = true; + return false; + } + + cJSON_AddStringToObject(pJsonRoot, "path", "/v1/datastreams/test/datapoint/"); + cJSON_AddStringToObject(pSubJson, "Authorization", "token 48661aa81484f501362ed5ef4cc85e67eb2a3e3d"); + cJSON_AddItemToObject(pJsonRoot, "meta", pSubJson); + cJSON_AddStringToObject(pJsonRoot, "method", "GET"); + + char* pJSON = cJSON_PrintUnformatted(pJsonRoot); + strcat(pJSON,"\n");//socket at the end should have '\n',use wireshark + + if(NULL == pJSON) + { + cJSON_Delete(pJsonRoot); + pc.printf("socket_GET OUT3\r\n"); + out = true; + return false; + } + + conn.send_all(pJSON, strlen(pJSON));//http_cmd for http,pJSON for socket,should be three changes + pc.printf("%s\r\n",pJSON); + + char *buffer = NULL; + buffer = (char *)malloc(MallocSize); + if(!buffer)pc.printf("malloc buffer err\r\n"); + int ret; + + while (true) { + wait(1); + ret = conn.receive(buffer, MallocSize-1); + pc.printf("ret = %d\r\n",ret); + if (ret <= 0) { + break; + } + buffer[ret] = '\0'; + pc.printf("Received %d chars from server: %s\n", ret, buffer); + } + pc.printf("socket_GET OUT\r\n"); + + free(pJSON);//for socket + cJSON_Delete(pJsonRoot);//for socket + free(buffer); + return true; +} + +/*http_GET*/ +bool http_GET(TCPSocketConnection &conn) +{ + if(conn.is_connected()){ + pc.printf("connect is already ok!\r\n"); + }else{ + if(!conn.connect("iot.espressif.cn", httpPort)) //80 for http,8000 for socket + pc.printf("connect OK!\r\n"); + else{ + pc.printf("connct ERR!\r\n"); + out = true; + return false; + } + } + + char http_cmd[] = "GET /v1/datastreams/Gas/datapoint/ HTTP/1.1\r\nUser-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3\r\n"\ + "Host:iot.espressif.cn\r\nAccept: */*\r\nAuthorization: token ebe1671e9d9f42a5231d017ec550552b9bae2cdf\r\n\r\n"; + + conn.send_all(http_cmd, strlen(http_cmd));//http_cmd for http,pJSON for socket,should be three changes + pc.printf("%s\r\n",http_cmd); + + //char *buffer = NULL; + //buffer = (char *)malloc(MallocSize); + //if(!buffer)pc.printf("malloc buffer err\r\n"); + char buffer[500]; + int ret; + + while (true) { + wait(1); + ret = conn.receive(buffer, 500-1); + pc.printf("ret = %d\r\n",ret); + if (ret <= 0) { + break; + } + buffer[ret] = '\0'; + pc.printf("Received %d chars from server: %s\n", ret, buffer); + } + pc.printf("http_GET OUT\r\n"); + /* ///conn.close已经放到main中,55 行 + if(conn.close()){ + pc.printf("conn.close OK\r\n"); + }else{ + pc.printf("conn.close ERR\r\n"); + } + */ + //free(buffer); + return true; +} + +/*http POST*/ +bool http_POST(TCPSocketConnection &conn) +{ + pc.printf("1111\r\n"); + wait(0.5); + if(conn.is_connected()){ + pc.printf("connect is already ok!\r\n"); + }else{ + if(!conn.connect("iot.espressif.cn", httpPort)) //80 for http,8000 for socket + pc.printf("connect OK!\r\n"); + else{ + pc.printf("connct ERR!\r\n"); + out = true; + return false; + } + } + pc.printf("2222\r\n"); + cJSON* http_post=NULL; + http_post = cJSON_CreateObject(); + if(NULL == http_post) + { + pc.printf("OUT4\r\n"); + out = true; + return false; + } + pc.printf("3333\r\n"); + cJSON* http_post_json=NULL; + http_post_json = cJSON_CreateObject(); + if(NULL == http_post_json) + { + cJSON_Delete(http_post); + pc.printf("OUT5\r\n"); + out = true; + return false; + } + cJSON_AddNumberToObject(http_post_json, "x", 2); + //cJSON_AddNumberToObject(http_post_json, "y", 2); + //cJSON_AddNumberToObject(http_post_json, "z", 2); + cJSON_AddItemToObject(http_post, "datapoint", http_post_json); + char* pJSON_http_post = cJSON_PrintUnformatted(http_post); + pc.printf("4444\r\n"); + if(NULL == pJSON_http_post) + { + cJSON_Delete(http_post); + pc.printf("OUT6\r\n"); + out = true; + return false; + } + + //Pay attention to out of memory + //char http_POST_cmd[500] = "POST /v1/datastreams/jhtest/datapoint/ HTTP/1.1\r\nUser-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3\r\n"\ + // "Host:iot.espressif.cn\r\nAccept: */*\r\nAuthorization: token ebe1671e9d9f42a5231d017ec550552b9bae2cdf\r\n"\ + // "Content-Length: 33\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n"; + char http_POST_cmd[500] = "POST /v1/datastreams/test/datapoint/ HTTP/1.1\r\nUser-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3\r\n"\ + "Host:iot.espressif.cn\r\nAccept: */*\r\nAuthorization: token 48661aa81484f501362ed5ef4cc85e67eb2a3e3d\r\n"\ + "Content-Length: "; + char len[2]; + len[0]=strlen(pJSON_http_post)/10%10+48; + len[1]=strlen(pJSON_http_post)%10+48; + strcat(http_POST_cmd,len); + strcat(http_POST_cmd,"\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n"); - printf("IP Address is %s\r\n", eth.getIPAddress()); + strcat(http_POST_cmd,pJSON_http_post); + conn.send_all(http_POST_cmd, strlen(http_POST_cmd));//http_cmd for http,pJSON for socket,should be three changes + pc.printf("%s\r\n",http_POST_cmd); + pc.printf("5555\r\n"); + char *buffer = NULL; + buffer = (char *)malloc(MallocSize); + if(!buffer)pc.printf("malloc buffer err\r\n"); + + int ret; + pc.printf("6666\r\n"); + while (true) { + wait(1); + ret = conn.receive(buffer, MallocSize-1); + pc.printf("ret = %d\r\n",ret); + if (ret <= 0) { + break; + } + buffer[ret] = '\0'; + pc.printf("Received %d chars from server: %s\n", ret, buffer); + } + pc.printf("http_POST OUT\r\n"); + + free(pJSON_http_post); + free(buffer); + cJSON_Delete(http_post); + pc.printf("7777\r\n"); + return true; +} + +/*socket POST*/ +bool socket_POST(TCPSocketConnection &conn,int vall) +{ + if(conn.is_connected()){ + pc.printf("connect is already ok!\r\n"); + }else{ + if(!conn.connect("iot.espressif.cn", socketPort)) //80 for http,8000 for socket + pc.printf("connect OK!\r\n"); + else{ + pc.printf("connct ERR!\r\n"); + out = true; + return false; + } + } + cJSON* socket_post=NULL; + socket_post = cJSON_CreateObject(); + if(NULL == socket_post) + { + pc.printf("OUT4\r\n"); + out = true; + return false; + } + + + cJSON_AddStringToObject(socket_post, "path", path); + cJSON_AddStringToObject(socket_post, "method", "POST"); + + cJSON* sock_post_token=NULL; + sock_post_token = cJSON_CreateObject(); + if(NULL == sock_post_token) + { + cJSON_Delete(socket_post); + pc.printf("OUT5\r\n"); + out = true; + return false; + } + cJSON_AddStringToObject(sock_post_token, "Authorization", "token 514cc9c3aa07a4a56246cb9259c8264fd2ae56f6"); + cJSON_AddItemToObject(socket_post, "meta", sock_post_token); - TCPSocketConnection sock; - sock.connect("api.openweathermap.org", 80); + cJSON* sock_post_xyz=NULL; + sock_post_xyz = cJSON_CreateObject(); + if(NULL == sock_post_xyz) + { + cJSON_Delete(socket_post); + pc.printf("OUT6\r\n"); + out = true; + return false; + } + cJSON_AddNumberToObject(sock_post_xyz, "x", vall); + //cJSON_AddNumberToObject(sock_post_xyz, "y", 8); + //cJSON_AddNumberToObject(sock_post_xyz, "z", 8); + cJSON* sock_post_datapoint=NULL; + sock_post_datapoint = cJSON_CreateObject(); + if(NULL == sock_post_datapoint) + { + cJSON_Delete(socket_post); + pc.printf("OUT6\r\n"); + out = true; + return false; + } + cJSON_AddItemToObject(sock_post_datapoint, "datapoint", sock_post_xyz); + cJSON_AddItemToObject(socket_post, "body", sock_post_datapoint); + + char* pJSON_sock_post = cJSON_PrintUnformatted(socket_post); + + if(NULL == pJSON_sock_post) + { + cJSON_Delete(socket_post); + pc.printf("OUT7\r\n"); + out = true; + return false; + } + strcat(pJSON_sock_post,"\n"); + + conn.send_all(pJSON_sock_post, strlen(pJSON_sock_post));//http_cmd for http,pJSON for socket,should be three changes + pc.printf("%s\r\n",pJSON_sock_post); + + char *buffer = NULL; + buffer = (char *)malloc(MallocSize); + if(!buffer)pc.printf("malloc buffer err\r\n"); + + int ret; + + while (true) { + ret = conn.receive(buffer, MallocSize-1); + pc.printf("ret = %d\r\n",ret); + if (ret <= 0) { + break; + } + buffer[ret] = '\0'; + pc.printf("Received %d chars from server: %s\n", ret, buffer); + } + pc.printf("socket_POST OUT\r\n"); + + free(pJSON_sock_post); + free(buffer); + cJSON_Delete(socket_post); + + return true; +} + +bool closeConnect(TCPSocketConnection &conn) +{ + if(conn.is_connected()){ + pc.printf("connect is already ok!\r\n"); + }else{ + if(!conn.connect("iot.espressif.cn", socketPort)) //80 for http,8000 for socket + pc.printf("connect OK!\r\n"); + else{ + pc.printf("connct ERR!\r\n"); + out = true; + return false; + } + } - char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr HTTP/1.0\n\n"; - sock.send_all(http_cmd, sizeof(http_cmd)-1); + cJSON* close_post=NULL; + close_post = cJSON_CreateObject(); + if(NULL == close_post) + { + pc.printf("OUT4\r\n"); + out = true; + return false; + } + + + cJSON_AddStringToObject(close_post, "path", "/v1/The_Gas/quit/"); + cJSON_AddStringToObject(close_post, "method", "POST"); + + cJSON* close_post_token=NULL; + close_post_token = cJSON_CreateObject(); + if(NULL == close_post_token) + { + cJSON_Delete(close_post); + pc.printf("OUT5\r\n"); + out = true; + return false; + } + cJSON_AddStringToObject(close_post_token, "Authorization", "token 514cc9c3aa07a4a56246cb9259c8264fd2ae56f6"); + cJSON_AddItemToObject(close_post, "meta", close_post_token); + + char* close_pJSON = cJSON_PrintUnformatted(close_post); - char buffer[400]; + if(NULL == close_pJSON) + { + cJSON_Delete(close_post); + pc.printf("OUT7\r\n"); + out = true; + return false; + } + strcat(close_pJSON,"\n"); + + conn.send_all(close_pJSON, strlen(close_pJSON));//http_cmd for http,pJSON for socket,should be three changes + pc.printf("%s\r\n",close_pJSON); + + char *buffer = NULL; + buffer = (char *)malloc(MallocSize); + if(!buffer)pc.printf("malloc buffer err\r\n"); + int ret; + while (true) { - ret = sock.receive(buffer, sizeof(buffer)-1); - if (ret <= 0) break; + ret = conn.receive(buffer, MallocSize-1); + pc.printf("ret = %d\r\n",ret); + if (ret <= 0) { + break; + } buffer[ret] = '\0'; - printf("Received %d chars from server: %s\n", ret, buffer); + pc.printf("Received %d chars from server: %s\n", ret, buffer); } + pc.printf("close_POST OUT\r\n"); + + free(close_pJSON); + free(buffer); + cJSON_Delete(close_post); - sock.close(); - - eth.disconnect(); - -} \ No newline at end of file + return true; +}