搜索
bottom↓
回复: 28

CC3200往yeelink平台发送数据成功了,发帖纪念

[复制链接]

出0入4汤圆

发表于 2015-1-28 19:26:33 | 显示全部楼层 |阅读模式
程序根据例程C:\ti\CC3200SDK_1.0.0\cc3200-sdk\example\getting_started_with_wlan_station修改而成
void WlanStationMode( void *pvParameters )函数中增加以下部分
    while(1)
    {
      yeelink_post((const char *)"设备号",(const char *)"传感器号",temp%64);//temp为模拟数据变量
      temp += 8;
      osi_Sleep(15000);
    }

yeelink_post函数如下
char yeelink_post(const char *device_id,const char *sensors_id,float value)
{
        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.0/device/%s/sensor/%s/datapoints",device_id,sensors_id);
        // 确定HTTP表单提交内容 {"value":20}
        sprintf( http_content , "{\"value\":%f}" , value);
        // 确定 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);
        // 增加属性 例如 Host: api.machtalk.net\r\n
        sprintf( str_tmp , "Host:%s\r\n" , remote_server);
        strcat( http_request , str_tmp);

        // 增加密码 例如 APIKey: d8a605daa5f4c8a3ad086151686dce64
        sprintf( str_tmp , "U-ApiKey:%s\r\n" , "d8a605daa5f4c8a3ad086151686dce64");//需要替换为自己的APIKey
        strcat( http_request , str_tmp);
        //
        strcat( http_request , "Accept: */*\r\n");
        // 增加提交表单内容的长度 例如 Content-Length:12\r\n
        sprintf( str_tmp , "Content-Length:%d\r\n" ,strlen(http_content) );
        strcat( http_request , str_tmp);
        // 增加表单编码格式 Content-Type:application/x-www-form-urlencoded\r\n
        strcat( http_request , "Content-Type: application/x-www-form-urlencoded\r\n");
        strcat( http_request , "Connection: close\r\n");
        // HTTP首部和HTTP内容 分隔部分
        strcat( http_request , "\r\n");
        // HTTP负载内容
        strcat( http_request , http_content);

        // 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);

        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));         
        //发送请求
        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
        sl_Close(iSockID);

        return 0;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-1-28 22:23:07 | 显示全部楼层
不错!                 

出0入0汤圆

发表于 2015-1-28 22:45:43 | 显示全部楼层
厉害厉害

出0入4汤圆

 楼主| 发表于 2015-1-29 07:51:32 | 显示全部楼层
本帖最后由 billtian 于 2015-1-29 07:57 编辑

获取传感器数据函数
yeelink_get((const char *)"设备ID",(const char *)"传感器ID",value);

char yeelink_get(const char *device_id,const char *sensors_id,char *value)
{
        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;
   
        sprintf(str_tmp,"/v1.0/device/%s/sensor/%s/datapoints",device_id,sensors_id);
        // 确定 HTTP请求首部
        // 例如POST /v1.0/device/98d19569e0474e9abf6f075b8b5876b9/1/1/datapoints/add HTTP/1.1\r\n
        sprintf( http_request , "GET %s HTTP/1.1\r\n",str_tmp);
        // 增加属性 例如 Host: api.machtalk.net\r\n
        sprintf( str_tmp , "Host:%s\r\n" , remote_server);
        strcat( http_request , str_tmp);
     
        // 增加密码 例如 APIKey: d8a605daa5f4c8a3ad086151686dce64
        sprintf( str_tmp , "U-ApiKey:%s\r\n" , "d8a605daa5f4c8a3ad086151686dce64");//需要替换为自己的APIKey
        strcat( http_request , str_tmp);
        //
        strcat( http_request , "Accept: */*\r\n");
        // 增加表单编码格式 Content-Type:application/x-www-form-urlencoded\r\n
        strcat( http_request , "Content-Type: application/x-www-form-urlencoded\r\n");
        strcat( http_request , "Connection: close\r\n");
        // HTTP首部和HTTP内容 分隔部分
        strcat( http_request , "\r\n");

        // 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);

        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));         
        //发送请求
        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, http_response, BUF_SIZE, 0);
        if( iStatus <= 0 )
        {
          //Report("iStatus = %d\n\r",iStatus);
        }
        else
        {
          UART_SEND_BUF((unsigned char*)http_response,iStatus);
          //iStatus = sl_Send(iSockID,g_cBsdBuf,iStatus,0);
        }  
        http_response[iStatus] = '\0';
        //判断是否收到HTTP OK
        presult = strstr( (const char *)http_response , (const char *)"200 OK\r\n");
        if( presult != NULL ){
            
            sscanf(http_response,"%*[^{]{%[^}]",strTmp);
            //提取返回信息
            char timestamp[64]={0};
            char timestampTmp[64]={0};
            char valueTmp[64]={0};
            sscanf(strTmp,"%[^,],%[^,]",timestampTmp,valueTmp);
            strncpy(timestamp,strstr(timestampTmp,":")+2,strlen(strstr(timestampTmp,":"))-3);
            strncpy(value,strstr(valueTmp,":")+1,strlen(strstr(valueTmp,":"))-1);
        }else{
            Report("Http Response Error\r\n");
            Report("%s",http_response);
        }
        sl_Close(iSockID);
    return 0;
}

出0入4汤圆

 楼主| 发表于 2015-1-29 07:55:38 | 显示全部楼层
以上代码是根据EmbedNet飞鸿踏雪提供的代码移植的,在此表示感谢!
原帖采用STM32+W5500实现,
原帖地址
http://www.embed-net.com/thread-69-1-1.html
http://www.embed-net.com/thread-68-1-1.html

出0入0汤圆

发表于 2015-1-29 08:02:03 | 显示全部楼层
我发起的一个开放项目,比yeelink 更加容易,接口也多,随时增加新接口,用的UDP速度快,可以去看看哦,,,百度:fuhome

出0入0汤圆

发表于 2015-1-29 09:04:33 | 显示全部楼层
out 了!yeelink是什么东东?

出0入4汤圆

 楼主| 发表于 2015-1-29 09:20:12 | 显示全部楼层
tony_jintao 发表于 2015-1-29 09:04
out 了!yeelink是什么东东?

http://www.yeelink.net/可以了解一下

出0入0汤圆

发表于 2015-1-29 09:38:24 | 显示全部楼层
看来CC3200还是挺好用的

出0入0汤圆

发表于 2015-1-29 09:43:19 | 显示全部楼层
不错,以后可能用到

出0入0汤圆

发表于 2015-1-29 16:15:48 | 显示全部楼层
恭喜楼主,正在学习

出0入0汤圆

发表于 2015-2-3 14:51:42 | 显示全部楼层
请问楼主:向yeelink发送数据是长连接,还是短连接。急

出0入4汤圆

 楼主| 发表于 2015-2-3 19:47:50 | 显示全部楼层
黄晨0410 发表于 2015-2-3 14:51
请问楼主:向yeelink发送数据是长连接,还是短连接。急

不太懂啊,什么叫长连接和短连接?

出0入0汤圆

发表于 2015-2-4 08:22:30 | 显示全部楼层
短连接就是:有数据发送时:连接-》发送数据-》关闭连接   
长连接是:连接-》发送数据-》发送数据     ......


百度一下更清楚

出0入0汤圆

发表于 2015-2-4 08:28:11 | 显示全部楼层
感谢楼主。
学习一下。

出0入4汤圆

 楼主| 发表于 2015-2-4 09:07:16 | 显示全部楼层
黄晨0410 发表于 2015-2-4 08:22
短连接就是:有数据发送时:连接-》发送数据-》关闭连接   
长连接是:连接-》发送数据-》发送数据     .. ...

我是用短的这种方式,长连接发送第二次发数据会出错,不知道是我程序的原因还是本身就是这样。

出0入0汤圆

发表于 2015-2-4 10:25:15 | 显示全部楼层
longjane 发表于 2015-1-29 08:02
我发起的一个开放项目,比yeelink 更加容易,接口也多,随时增加新接口,用的UDP速度快,可以去看看哦,, ...

这UI.... 好吧..我放弃吐槽了..

出0入0汤圆

发表于 2015-2-4 10:31:13 | 显示全部楼层
kayatsl 发表于 2015-2-4 10:25
这UI.... 好吧..我放弃吐槽了..

本来就是开放的,简单,实用,门槛低是第一步的,慢慢进步,又不要你钱,建议是好事情,我们每天进步一点。。。。。。。。。。。。。。且说网页控制这一块,其他平台虽说是专业的,可是效果差,可玩性不足,响应速度慢,,,,这点优势我们还是有的。。。。。。。

出0入0汤圆

发表于 2015-2-4 10:35:47 | 显示全部楼层
kayatsl 发表于 2015-2-4 10:25
这UI.... 好吧..我放弃吐槽了..



这是一个网友的设备控制页,网页控制有设备信息反馈(不是假显示,是设备真实的返回任意消息),速度1s-2s,其他平台目前没有这么快。。。右侧地图是自动显示,不是其他平台的人为选择省份城市。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-2-5 16:25:45 | 显示全部楼层
billtian 发表于 2015-2-3 19:47
不太懂啊,什么叫长连接和短连接?

yeelink没有短链接,,,yeelink其实很简单,方式数据符合他的要求就行了。

出0入0汤圆

发表于 2015-2-7 19:47:46 | 显示全部楼层
billtian 发表于 2015-2-4 09:07
我是用短的这种方式,长连接发送第二次发数据会出错,不知道是我程序的原因还是本身就是这样。 ...

Yeelink回复完数据自动断开连接,你必须重新连接

出0入0汤圆

发表于 2015-2-7 20:42:07 | 显示全部楼层
本帖最后由 wzavr 于 2015-2-7 20:43 编辑

有一套cc3100 demo,跑了个例程后还躺在桌子上,
请问lz,cc3100作为web主机时,web 文件是不是只能存在芯片的flash上?
因为看到例程里的web登录的用户名和密码好像是需要写到cc3100的flash上的,
能不能把web文件放在单片机上运作?

出0入4汤圆

 楼主| 发表于 2015-3-15 13:23:30 | 显示全部楼层
wzavr 发表于 2015-2-7 20:42
有一套cc3100 demo,跑了个例程后还躺在桌子上,
请问lz,cc3100作为web主机时,web 文件是不是只能存在芯片的f ...

我也是初学,还不是很清楚

出0入0汤圆

发表于 2015-3-23 17:29:42 | 显示全部楼层
先收藏,改天有空研究。

出0入17汤圆

发表于 2015-4-10 17:42:28 | 显示全部楼层
收藏之,谢谢楼主

出0入0汤圆

发表于 2015-4-28 19:20:34 | 显示全部楼层
忽然有兴趣

出0入0汤圆

发表于 2015-4-28 19:47:10 | 显示全部楼层
我拿ARDUINO一搭就成了。拿来主义一下。

出0入0汤圆

发表于 2015-12-1 16:10:44 | 显示全部楼层
yeelink已经不行了,经常登录不上啊

出0入0汤圆

发表于 2016-2-19 13:20:02 | 显示全部楼层
http://www.embed-net.com/thread-69-1-1.html 上的

stm32_w5500_yeelink_am2311.rar

没权限下载阿,能传上了吗?

多谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-16 11:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表