7499|11

151

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

一步步教你使用云端服务器yeelink远程监控 [复制链接]

 
本帖最后由 jeansonm 于 2014-7-11 11:48 编辑

随着物联网逐渐进入我们的生活,我们需要随时随地查看远端的设备运行状态及对设备进行控制,Yeelink为我们提供了一个很好的云端服务器平台,设备通过网络连接到Yeelink服务器,上传本地检测数据,电脑或手机通过手机访问即可看到设备数据,网上也有很多朋友使用Yeelink来做远程监控的示例,下面我们来介绍如何使用Yeelink做远程检测与控制,如有错误还请大家指正。

下面是Yeelink远程监控的一个大致框图

1、首先进入Yeelink主页“http://www.yeelink.net/”注册一个自己的帐号,下面是主页为我们开发者提供的一个简单的开发流程

2、按照上面的流程点击添加设备,输入设备信息,在下面的地图中选择设备所在地

3、进入到设备管理界面,设置设备图片,添加传感器


4、添加传感器,这里我们添加一个数值型传感器和一个开关型传感器,通过下面选择设置传感器信息


传感器添加完成之后宝马1768设备下面出现两个传感器:AD转换值和LED1AD转换值属于数值型传感器,显示AD转换电压,LED1属于开关型传感器,用于控制宝马开发板LED灯亮灭,注意下面标记出来的地方蓝色框框第一个是设备ID即宝马1768ID,第二个为传感器ID即对应AD转换值和LED1各自的ID,由于两个传感器同属于宝马1768设备下面的两个传感器所以设备ID相同,而传感器ID不同,这几个ID会在后面编程中使用到


6、进入我的账户找到API KEY,当要进行传输数据时需要使用到该密码


7、上面Yeelink的设置基本完成了,就要开始进行程序编写了,这里我们直接使用宝马开发板搭建好的TCP客户端例程进行添加修改,在系统配置完成之后初始化ADCLED
  1. ADC_Init();         //        ADC初始化
  2. LPC_GPIO2->FIODIR  = 0x000000ff;    //        LED配置
  3. LPC_GPIO0->FIODIR  = 0x00200000;
  4. LPC_GPIO0->FIOPIN |= 0x00200000;              
  5. while(1)
  6. {
  7. tcpclient("42.96.164.52",80 ,1);         //AD转换值上传         tcpclient("42.96.164.52",80 ,2);         //获取LED状态并改变开发板LED状态 rt_thread_delay(RT_TICK_PER_SECOND * 4);        //延时4s
  8. }
  9. //TCP客户端实验
  10. int tcpclient(const char* url, int port,int num)
  11. {
  12.     char *recv_data;
  13.     struct hostent *host;
  14.     int sock, bytes_received;
  15.     struct sockaddr_in server_addr;
  16. int        Buf = 0;

  17.     /* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
  18.     host = gethostbyname(url);

  19.     /* 分配用于存放接收数据的缓冲 */
  20.     recv_data = rt_malloc(BUFSZ);
  21.     if (recv_data == RT_NULL)
  22.     {
  23.         rt_kprintf("No memory\n");
  24.         return;
  25.     }

  26.     /* 创建一个socket,类型是SOCKET_STREAM,TCP类型 */
  27.     if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  28.     {
  29.         /* 创建socket失败 */
  30.         rt_kprintf("Socket error\n");

  31.         /* 释放接收缓冲 */
  32.         rt_free(recv_data);
  33.         return 1;
  34.     }
  35. if(num == 1)         /
  36. {
  37. Buf   = ADC_Get();                     
  38. Buf = (Buf * 3300)/4096;
  39. INT_CHAR(Buf);
  40. send_data1[234] = dis[0];         //更改上传数据内容即AD值
  41. send_data1[234+1] = '.';
  42. send_data1[234+2] = dis[0+1];
  43. send_data1[234+3] = dis[0+2];
  44. }
  45.     /* 初始化预连接的服务端地址 */
  46.     server_addr.sin_family = AF_INET;
  47.     server_addr.sin_port = htons(port);
  48.     server_addr.sin_addr = *((struct in_addr *)host->h_addr);
  49.     rt_memset(&(server_addr.sin_zero), 0, sizeof(server_addr.sin_zero));

  50.     /* 连接到服务端 */
  51.     while (connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
  52.     {
  53.         /* 连接失败 */
  54.         rt_kprintf("Connect fail!\n");
  55.         lwip_close(sock);

  56.          /*释放接收缓冲 */
  57.         rt_free(recv_data);
  58.                return 1;
  59.     }
  60. rt_kprintf("Connect OK!\n");

  61. if(num == 1)
  62. {
  63. /* 发送数据到sock连接 */
  64. if(send(sock,send_data1,strlen(send_data1), 0) < 0)
  65. {
  66. /* 发送失败,关闭这个连接 */
  67. rt_kprintf("\nSend error ");
  68. lwip_close(sock);

  69. /* 释放接收缓冲 */
  70. rt_free(recv_data);
  71. }
  72. else
  73. {
  74. rt_kprintf("\nSend OK ");
  75. bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
  76. lwip_close(sock);

  77. /* 释放接收缓冲 */
  78. rt_free(recv_data);
  79. }
  80. }
  81. else if(num == 2)
  82. {
  83. /* 发送数据到sock连接 */
  84. if(send(sock,send_data2,strlen(send_data2), 0) < 0)
  85. {
  86. /* 发送失败,关闭这个连接 */
  87. rt_kprintf("\nSend error ");
  88. lwip_close(sock);

  89. /* 释放接收缓冲 */
  90. rt_free(recv_data);
  91. }
  92. else
  93. {
  94. rt_kprintf("\nSend OK ");
  95. /* 从sock连接中接收最大BUFSZ - 1字节数据 */
  96.                 bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
  97. Buf = Search_str(recv_data,""value":");
  98. if(recv_data[Buf] == '0')
  99. LPC_GPIO2->FIOPIN &= ~0xff;         //关闭LED
  100. else
  101. LPC_GPIO2->FIOPIN |= 0xff;         //打开LED
  102. rt_kprintf("\n%s ",recv_data+Buf);
  103. lwip_close(sock);

  104. /* 释放接收缓冲 */
  105. rt_free(recv_data);
  106. }
  107. }
  108.     return 1;
  109. }
复制代码


8、我们可以看到程序中通过判断num值来发送两个不同的字符串,这里num就是用来区别是用来上传AD转换值还是LED状态获取的下面看看两个字符串数据,我们可以看到下面两个字符串中第一行都出现了我们设备的ID和传感器IDsend_data1对应是AD转换值上传,所以ID20165,而send_data2LED控制,ID对应为20166U-ApiKey后面紧跟着就是我们上面在账户设置里面的密码,YeelinkAPI格式比较固定,至于其他一些参数可以参考Yeelink API文档
char send_data1[300] = "POST /v1.0/device/12402/sensor/20165/datapoints HTTP/1.1\r\n\
Host: api.yeelink.net\r\n\
Accept: */*\r\n\
U-ApiKey: 615e52feacb3a8b18ab424703c00bfbf\r\n\
Content-Length: 14\r\n\
Content-Type: application/json;charset=utf-8\r\n\
Connection: close\r\n\
\r\n\
{\"value\":96  }\r\n"; /* 发送用到的数据 */
这里有一点需要注意的是Content-Length的长度必须为”value”后面跟着字符串的长度值加10,上面设置为14”value”后面的值为4位,这里初始化是”96  “
char send_data2[300] = "GET /v1.0/device/12402/sensor/20166/datapoints HTTP/1.1\r\n\
Host: api.yeelink.net\r\n\
Accept: */*\r\n\
U-ApiKey: 615e52feacb3a8b18ab424703c00bfbf\r\n\
Content-Length: 0\r\n\
Connection: close\r\n\
\r\n\
print get done.\r\n"; /* 发送用到的数据 */

另外还有一点需要注意的是,当我们查询LED状态时需要接收Yeelink服务器数据,那么数据的哪部分才是对我们有用的呢,我们可以使用网络调试助手,将调试助手连接到Yeelink服务器,发送字符串send_data2的内容,即可获取服务器返回消息,其中”value”后面的0是我们需要的数据,表明现在开关是关着的,若开关打开则返回为1


9、上面Yeelink设置和程序都介绍完了,下面就开始测试了下面是电脑显示波形


手机可以查看设备地址


下面在看一下LED控制,手机拍照效果不好



游客,如果您要查看本帖隐藏内容请回复


此帖出自单片机论坛

最新回复

非常不错,学无止境呀,看看高手怎么操作的,谢谢分享。先去了解一下,有问题,再请教楼主。  详情 回复 发表于 2015-6-26 16:10
点赞 关注(2)
 

回复
举报

305

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
谢谢楼主的分享~~
此帖出自单片机论坛
 
个人签名http://openmcu.taobao.com]77[/url]
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这么好,怎么没人顶呢,支持一个!!!
此帖出自单片机论坛
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

4
 
这是个啥东东
此帖出自单片机论坛
 
 
 

回复

114

帖子

0

TA的资源

一粒金砂(中级)

5
 
好不错,学习学习!!!!!!!!!
此帖出自单片机论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

6
 
真给力啊,呵呵
此帖出自单片机论坛
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(初级)

7
 
mark 学习
此帖出自单片机论坛
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

8
 
非常不错,谢谢分享。先去了解一下,有问题,再请教楼主。
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
123
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
看看程序。。。。用电脑调试出来了
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
学无止境呀,看看高手怎么操作的
此帖出自单片机论坛
 
 
 

回复

179

帖子

0

TA的资源

一粒金砂(高级)

12
 
非常不错,学无止境呀,看看高手怎么操作的,谢谢分享。先去了解一下,有问题,再请教楼主。
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表