搜索
bottom↓
回复: 75

一步步教你使用云端服务器yeelink远程监控

  [复制链接]

出0入0汤圆

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

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

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


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

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


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

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


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


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

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

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

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

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

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

  60.          /*释放接收缓冲 */
  61.         rt_free(recv_data);
  62.                return 1;
  63.     }
  64.         rt_kprintf("Connect OK!\n");

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

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

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

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

  108.                         /* 释放接收缓冲 */
  109.                         rt_free(recv_data);
  110.                 }
  111.         }                       
  112.     return 1;
  113. }
复制代码


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


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



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


手机可以查看设备地址




下面在看一下LED控制





其他网络例程可以进入下面连接进行下载
LPC1768全方位学习
http://www.amobbs.com/thread-5583335-1-1.html
(出处: amoBBS 阿莫电子论坛)




本帖子中包含更多资源

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

x

出100入101汤圆

发表于 2014-7-14 09:52:29 | 显示全部楼层
mark一下!

出0入0汤圆

发表于 2014-7-14 09:58:55 | 显示全部楼层
高端大气上档次

出0入0汤圆

发表于 2014-7-14 10:34:44 | 显示全部楼层
高端大气上档次,顶楼主

出0入0汤圆

发表于 2014-7-14 10:36:40 | 显示全部楼层
不错不错                        

出0入0汤圆

发表于 2014-7-14 17:08:41 | 显示全部楼层
MARK,可以用android设备进行调试吗?

出0入0汤圆

发表于 2014-7-14 18:47:24 | 显示全部楼层
楼主用的哪家的服务器是阿里云吗

出0入0汤圆

 楼主| 发表于 2014-7-16 09:03:18 | 显示全部楼层
痞子_雄 发表于 2014-7-14 17:08
MARK,可以用android设备进行调试吗?

Yeelink有安卓的客户端,可以直接进行监控

出0入0汤圆

 楼主| 发表于 2014-7-16 09:05:14 | 显示全部楼层
ddqq 发表于 2014-7-14 18:47
楼主用的哪家的服务器是阿里云吗

http://www.yeelink.net/

出0入0汤圆

发表于 2014-7-16 09:07:38 | 显示全部楼层
高帅富~

出0入0汤圆

发表于 2014-7-16 09:12:56 | 显示全部楼层
mark!!学习!!!

出0入0汤圆

发表于 2014-7-24 08:51:22 | 显示全部楼层
高端大气上档次,低调奢华有内涵。

出0入0汤圆

发表于 2014-7-24 09:21:59 | 显示全部楼层
好东西,我之前也实现了 热释电红外感应监控,上传到yeelink,当数据变成我需要的时候,触发报警事件,发送邮件到我的QQ邮箱,微信的邮件助手就收到了
楼主要是把摄像头图片上传到yeelink就好了

出0入0汤圆

 楼主| 发表于 2014-7-24 09:29:50 | 显示全部楼层
duxingkei 发表于 2014-7-24 09:21
好东西,我之前也实现了 热释电红外感应监控,上传到yeelink,当数据变成我需要的时候,触发报警事件,发送 ...

嗯,这里还没有添加触发事件,这个建议很好哦

出0入0汤圆

发表于 2014-7-24 09:43:57 | 显示全部楼层
确实是个智能家居或者物联网的典型使用实例啊。

出0入0汤圆

发表于 2014-7-24 10:11:48 | 显示全部楼层
我最近也做了一个可以用Scratch编程,可访问yeelink服务器的机器人!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-7-24 10:41:18 | 显示全部楼层
这还是适合学习型的,

出110入109汤圆

发表于 2014-7-24 11:10:04 | 显示全部楼层
开发板上跑的RTT?Yeelink现在发力做灯了啊

出110入109汤圆

发表于 2014-7-24 11:10:19 | 显示全部楼层
开发板上跑的RTT?Yeelink现在发力做灯了啊

出0入0汤圆

 楼主| 发表于 2014-7-25 09:08:10 | 显示全部楼层
reflecter 发表于 2014-7-24 11:10
开发板上跑的RTT?Yeelink现在发力做灯了啊

是的 下面有LPC1768 RTT+lwip的网络基础例程 TCP/UDP服务器客户端
LPC1768全方位学习
http://www.amobbs.com/thread-5583335-1-1.html
(出处: amoBBS 阿莫电子论坛)

出0入0汤圆

发表于 2014-7-25 09:47:35 | 显示全部楼层
我只想知道,DIY的设备能不公开吗

出0入0汤圆

发表于 2014-7-25 17:50:49 | 显示全部楼层
学习!!!

出0入0汤圆

发表于 2014-9-21 20:06:22 | 显示全部楼层
学习了,物联网概念入门必备。

出0入16汤圆

发表于 2014-9-22 01:01:07 来自手机 | 显示全部楼层
多谢!学习了!顶起!

出0入0汤圆

发表于 2014-9-22 10:48:16 | 显示全部楼层
最近也在弄yeelink,可是我发送的数据一直错误,截图如下,请大侠指点一二,在下感激不尽。

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-9-22 11:09:58 | 显示全部楼层
开始关注物联网,谢谢楼主分享

出0入0汤圆

发表于 2014-9-22 11:18:36 | 显示全部楼层
一定记号一下 以后有用

出0入0汤圆

发表于 2014-9-22 11:20:47 | 显示全部楼层
这个很不错,省了很多事

出0入0汤圆

发表于 2014-9-22 11:25:30 | 显示全部楼层
这个强,支持

出0入0汤圆

发表于 2014-9-22 13:56:13 | 显示全部楼层
收藏了,以前是用花生壳

出0入0汤圆

发表于 2014-9-22 14:11:55 | 显示全部楼层
要是有成熟的一体化商业应用就好了,把家里的东东都搞成智能的,远程监控的

出0入0汤圆

发表于 2014-9-22 14:23:10 | 显示全部楼层
顶顶顶                             

出10入0汤圆

发表于 2014-9-22 22:41:10 | 显示全部楼层
这个要mark!!!有空也搞一搞!

出0入0汤圆

发表于 2014-9-23 11:23:59 | 显示全部楼层
几个月前就注册了一个账号,只实现了数据上传,不知道怎么下发数据。

出0入0汤圆

发表于 2014-9-23 11:37:25 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-9-23 12:31:47 | 显示全部楼层
mark mark mark

出0入0汤圆

发表于 2014-9-23 13:09:15 | 显示全部楼层
mark一下~

出0入0汤圆

发表于 2014-9-24 15:12:56 | 显示全部楼层
为毛我测试的很不稳定呢?

出0入0汤圆

发表于 2014-9-24 15:28:26 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2014-9-24 17:32:27 | 显示全部楼层
不错 mark 留用

出0入0汤圆

发表于 2014-9-24 17:32:33 | 显示全部楼层
正想学习中。。。。。。。。。。。。。

出0入0汤圆

发表于 2014-9-24 17:52:59 | 显示全部楼层
abbott 发表于 2014-7-24 10:11
我最近也做了一个可以用Scratch编程,可访问yeelink服务器的机器人!

哥们,请问你这个是怎么做到微信控制的呢?一乐不是只通过安卓客户端访问的吗?

出0入0汤圆

发表于 2014-9-24 18:51:09 | 显示全部楼层
mark......

出0入0汤圆

发表于 2014-9-24 19:51:43 | 显示全部楼层
原来是这样啊,markkkk

出0入0汤圆

发表于 2014-9-24 21:00:31 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-9-24 21:27:32 | 显示全部楼层
果断收藏

出0入0汤圆

发表于 2014-9-24 21:27:54 | 显示全部楼层
果断收藏!!!!!!!

出0入0汤圆

发表于 2014-9-24 22:45:10 | 显示全部楼层
mark                      .

出0入0汤圆

发表于 2014-9-24 23:24:58 | 显示全部楼层
免费的吗?

出0入0汤圆

发表于 2014-9-25 08:49:03 | 显示全部楼层
mubei 发表于 2014-9-24 17:52
哥们,请问你这个是怎么做到微信控制的呢?一乐不是只通过安卓客户端访问的吗? ...

Yeelink也可以通过微信来访问!

出0入0汤圆

发表于 2014-9-25 11:58:14 | 显示全部楼层
abbott 发表于 2014-9-25 08:49
Yeelink也可以通过微信来访问!


这么高端?看来得研究一下了

出0入0汤圆

发表于 2014-9-25 15:42:06 来自手机 | 显示全部楼层
学习了,看看会不会

出0入0汤圆

发表于 2014-9-25 16:00:02 | 显示全部楼层
mark            

出0入0汤圆

发表于 2014-10-15 12:19:22 | 显示全部楼层
好贴...只用过yeelink的串口工具。

出0入0汤圆

发表于 2014-10-15 15:05:53 | 显示全部楼层
这个得好好学习一下!

出0入0汤圆

发表于 2014-10-16 09:22:50 | 显示全部楼层
学习下谢谢分享!

出0入0汤圆

发表于 2014-10-16 10:10:12 | 显示全部楼层
看看。学习一下

出0入0汤圆

发表于 2014-10-16 12:57:43 | 显示全部楼层
我的网络调试助手连接不上是怎末回事啊??????求帮忙

出0入0汤圆

发表于 2014-10-16 14:36:21 | 显示全部楼层
谢谢楼主分享,学习

出0入0汤圆

发表于 2014-10-16 15:51:59 | 显示全部楼层
mark,物联网yeelink

出0入53汤圆

发表于 2014-10-17 08:43:44 | 显示全部楼层
不错 收藏了 用到的时候在过来下载学习一下

出0入0汤圆

发表于 2014-10-17 08:51:55 | 显示全部楼层
收藏一下

出0入0汤圆

发表于 2014-10-17 15:31:20 | 显示全部楼层
感觉好像不太好用,貌似消息是直接推给设备的,没有反馈机制的样子

出0入0汤圆

发表于 2014-12-2 16:59:19 | 显示全部楼层
谢谢楼主分享,学习

出0入0汤圆

发表于 2014-12-2 23:03:14 | 显示全部楼层
太好了、、感谢分享、、有时间我也可以自己弄一个玩玩了!

出0入0汤圆

发表于 2014-12-2 23:13:54 | 显示全部楼层
果断收藏,谢谢楼主

出0入0汤圆

发表于 2015-2-2 13:16:02 | 显示全部楼层
楼主请问 怎样通过LWP 访问yeelink ,我现在的程序内网可以工作。

出0入0汤圆

发表于 2015-2-2 20:36:46 | 显示全部楼层
好东西………………

出0入0汤圆

发表于 2015-2-3 08:55:36 | 显示全部楼层
很高端的样子,仔细研究下

出0入0汤圆

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

出0入0汤圆

发表于 2015-2-3 15:03:18 | 显示全部楼层
云平台做的很高大上!硬件如何使用Arduino的话,我们这行会不会涌入一大批做计算机软件的。鸭梨山大啊!

出0入0汤圆

发表于 2015-2-7 16:21:24 | 显示全部楼层
先mark一下,回头试试去

出0入0汤圆

发表于 2015-2-7 16:29:10 | 显示全部楼层
我想知道,不花钱的话,能够  不公开 自己的设备吗

出0入0汤圆

发表于 2015-2-7 16:43:09 | 显示全部楼层
网络调试助手有意思。

出0入4汤圆

发表于 2015-3-15 19:38:11 | 显示全部楼层
yeelink开发流程

出0入8汤圆

发表于 2016-12-1 14:14:28 | 显示全部楼层
mqkycy 发表于 2014-9-22 10:48
最近也在弄yeelink,可是我发送的数据一直错误,截图如下,请大侠指点一二,在下感激不尽。
...

{"value":65}

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

本版积分规则

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

GMT+8, 2024-5-5 11:00

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

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