|
CC3200上传图片yeelink平台成功。大概流程是连接服务器80端口,先发一个包含文件长度等信息的包,然后拆分文件按顺序发送到服务器,具体可参考代码。
我的问题是,如果实现平台这边的处理,编代码的话怎么实现,需要学习哪些东西?有经验的朋友指点下,谢谢!
附件 :代码,上传CAMERA采集的图像数据
char yeelink_post_pic(const char *device_id,const char *sensors_id,unsigned int len,unsigned int HeaderLen,char * buf1,char * buf2)
{
#define HOST_NAME "www.yeelink.net"
//int ret;
//char* presult;
char remote_server[] = "api.yeelink.net";
char str_tmp[128] = {0};
SlSockAddrIn_t sAddr;
int iAddrSize;
int iSockID;
int iStatus;
//long lLoopCount = 0;
//long lNonBlocking = 1;
long lRetVal = -1;
// Http内容,表单内容
//char http_content[32] = {0};
sprintf(str_tmp,"/v1.1/device/%s/sensor/%s/datapoints",device_id,sensors_id);
// 确定HTTP表单提交内容 {"value":20}
//sprintf( http_content , "{\"value\":%f}" , len);
// 确定 HTTP请求首部
// 例如POST /v1.0/device/98d19569e0474e9abf6f075b8b5876b9/1/1/datapoints/add HTTP/1.1\r\n
sprintf( http_request , "POST %s HTTP/1.1\r\n",str_tmp);
//
strcat( http_request , "Accept: application/json\r\n");
// 增加表单编码格式 Content-Type:application/x-www-form-urlencoded\r\n
strcat( http_request , "Content-Type: application/json\r\n");
//strcat( http_request , "Content-Type: image/jpeg\r\n");
// 增加密码 例如 APIKey: d8a605daa5f4c8a3ad086151686dce64
sprintf( str_tmp , "U-ApiKey: %s\r\n" , "d8a605daa5f4c8a3ad086151686dce64");//需要替换为自己的APIKey
strcat( http_request , str_tmp);
// 增加属性 例如 Host: api.machtalk.net\r\n
sprintf( str_tmp , "Host: %s\r\n" , remote_server);
strcat( http_request , str_tmp);
// 增加提交表单内容的长度 例如 Content-Length:12\r\n
sprintf( str_tmp , "Content-Length: %d\r\n" ,(len + HeaderLen));
//sprintf( str_tmp , "Content-Length:%d\r\n" ,strlen(http_content) );
strcat( http_request , str_tmp);
strcat( http_request , "Expect: 100-continue\r\n");
strcat( http_request , "Connection: keep-alive\r\n");
// HTTP首部和HTTP内容 分隔部分
strcat( http_request , "\r\n");
// HTTP负载内容
//strcat( http_request , http_content);
Report("%s",http_request);
// Get external host IP address
lRetVal = sl_NetAppDnsGetHostByName((signed char*)HOST_NAME, sizeof(HOST_NAME),
&g_ulDestinationIp, SL_AF_INET);
//ASSERT_ON_ERROR(lRetVal);
//filling the TCP server socket address
sAddr.sin_family = SL_AF_INET;
sAddr.sin_port = sl_Htons((unsigned short)80);
sAddr.sin_addr.s_addr = sl_Htonl((unsigned int)g_ulDestinationIp);
//sAddr.sin_port = sl_Htons((unsigned short)5002);
//sAddr.sin_addr.s_addr = sl_Htonl((unsigned int)g_ulDestinationIp);
iAddrSize = sizeof(SlSockAddrIn_t);
// creating a TCP socket
iSockID = sl_Socket(SL_AF_INET,SL_SOCK_STREAM, 0);
if( iSockID < 0 )
{
ASSERT_ON_ERROR(TCP_CLIENT_FAILED);
}
// connecting to TCP server
iStatus = sl_Connect(iSockID, ( SlSockAddr_t *)&sAddr, iAddrSize);
if( iStatus < 0 )
{
// error
ASSERT_ON_ERROR(sl_Close(iSockID));
ASSERT_ON_ERROR(TCP_CLIENT_FAILED);
}
else
{
Report("connected to TCP server successfully\n\r");
//Report("Wireless serial STATION configure successfully\n\r");
}
// setting socket option to make the socket as non blocking
//iStatus = sl_SetSockOpt(iSockID, SL_SOL_SOCKET, SL_SO_NONBLOCKING,
// &lNonBlocking, sizeof(lNonBlocking));
//发送请求
Report("strlen(http_request) = %d bytes\r\n",strlen(http_request));
iStatus = sl_Send(iSockID,(unsigned char *)http_request,strlen(http_request),0);
if(iStatus != strlen(http_request))
{
Report("%d:Socket Send Error\r\n",iStatus);
//while(1);
}
//获得响应
iStatus = sl_Recv(iSockID, g_cBsdBuf, BUF_SIZE, 0);
if( iStatus <= 0 )
{
//Report("iStatus = %d\n\r",iStatus);
}
else
{
UART_SEND_BUF((unsigned char*)g_cBsdBuf,iStatus);
//iStatus = sl_Send(iSockID,g_cBsdBuf,iStatus,0);
}
//判断是否收到HTTP OK
//循环发送数据
{
int i,loopcnt;
int remain;
loopcnt = len/1460;
remain = len%1460;
Report("len=%d loop=%d remain=%d bytes\r\n",len,loopcnt,remain);
//Report("g_image=%X\r\n",&g_image);
//Report("buf=%X\r\n",buf);
//header
iStatus = sl_Send(iSockID,buf1,HeaderLen,0);
//iStatus = sl_Send(iSockID,buf,1460,0);
if(iStatus != HeaderLen)
{
Report("%d:Socket Send Error\r\n",iStatus);
while(1);
}
else
{
Report("Send HeaderLen byte\n\r");
}
osi_Sleep(500);
//
for(i=0;i<loopcnt;i++)
{
iStatus = sl_Send(iSockID,&buf2[i*1460],1460,0);
if(iStatus != 1460)
{
Report("%d:Socket Send Error\r\n",iStatus);
while(1);
}
else
{
Report("Send 1460 byte\n\r");
}
osi_Sleep(500);
/*
//获得响应
iStatus = sl_Recv(iSockID, g_cBsdBuf, BUF_SIZE, 0);
if( iStatus <= 0 )
{
//Report("iStatus = %d\n\r",iStatus);
}
else
{
UART_SEND_BUF((unsigned char*)g_cBsdBuf,iStatus);
}
*/
}
iStatus = sl_Send(iSockID,&buf2[i*1460],remain,0);
if(iStatus != remain)
{
Report("%d:Socket Send Error\r\n",iStatus);
while(1);
}
else
{
Report("Send %u byte\n\r",remain);
}
osi_Sleep(500);
//获得响应
iStatus = sl_Recv(iSockID, g_cBsdBuf, BUF_SIZE, 0);
if( iStatus <= 0 )
{
//Report("iStatus = %d\n\r",iStatus);
}
else
{
UART_SEND_BUF((unsigned char*)g_cBsdBuf,iStatus);
}
}
sl_Close(iSockID);
return 0;
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|