socket 反向控制 (10分钟)

2013-07-10 09:23

  

 

目的:
用简单,快捷的Tcp长连接方式完成从互联网反向控制你的设备
用户组:
所有用户组
硬件设备:
LEWEI50 E-KIT  或者用具有以太网接入功能arduino(w5100)
发光LED
文中用到的LeweiTcpClientLite库文件下载地址:
 https://github.com/lewei50/LeweiTcpClient/tree/LeweiTcpClientLite
 (一定注意是LeweiTcpClient 的branch不是master,注意是LeweiTcpClientLite 不是LeweiClient)
 
实验过程:
前面做了那么多实验,想必你已经开始对物联网有个模糊的概念了。数据能往服务器上发,能分析,能发微博,能报警等等等等。这么多功能,但是不是总感觉少了点什么。
是的,上面所有的,其实从数据的方向上来看,都是你的设备往外发数据,你并不能实时控制你的设备,现在让我们来实验从外网反向控制你的设备。
什么,这个实验也10分钟?呃~~那你稍微晚点看表计时好了。
 
数据从你的设备往外发,跟从互联网上往你的设备上发数据,是2个概念,实现的方式完全不一样。举个例子来说,通过http协议往服务器上发数据,就像是握手,握完就松开了,松开对方就再也抓不到你了,抓不到你就没法跟你联系了。所以这里我们使用TCP长连接的方式来交互。这种方式就像是你跟服务器握手,然后就不分开,一直在一起了,在一起了,在一起,一起……
好,说清了原理,让我们开始计时做实验。
第一步,下载LeweiTcpClientLite库,解压、改名、放到特定文件夹、打开IDE、打开例程中的tutorial2_ekit_remote_control_led,修改userkey这些都不详叙。相信熟练的你可以在5秒内搞定(什么?5秒都搞不定,那你要加油了!)。
第二步,接线,这次我们我们把发光led接在板子的d3接口,另一个引脚接在gnd上。
第三步:建立一个网关,如果有了的话,编辑一下,保证配置如下
这里要注意:设置好网关,默认网关为01。API地址设置为 http://tcp.lewei50.com:9965/?method=send&gatewayNo=01
这里的01是你的网关的标识,公网IP设置成
tcp.lewei50.com
第四步:新建一个led的传感器,类型设置为“继电器”类型吧(这里不用“控制器”,因为在乐联网里,控制器是更高级的带状态反馈的设备),因为也就开、关两种状态。标识设置为“led3”(标识对控制没有影响,但是建议按照教程设置成led3),因为在板子的d3引脚插了一个我想控制的发光led(板子上自带的13号引脚的led被其他程序使用过了)
第五步,在"智能物联“-”控制命令管理“菜单中,建两个函数名,这个函数名是我们的代码中需要用到的。
 
 他们不需要设置任何参数
 
打开arduino的IDE,打开example-> LeweiTcpClient ->tutorial2_ekit_remote_control_led.只需要修改userkey,校验并上传该代码到arduino中即可。
 
让我们来看看代码中,是如何实现反向控制的。
在setup()函数中,有下面几个语句
  
  UserFunction uf2 (ledOn,"turnLedOn");
  client->addUserFunction(uf2);
  UserFunction uf3 (ledOff,"turnLedOff");
  client->addUserFunction(uf3);
 
把代码往下拉,会看到ledOn,ledOff是自己写的函数,用来控制led的引脚高低电平。
所以上面的这四句话,就是用来绑定本地的函数和网站上函数名的对应关系。
 
然后?然后就ok了啊!
试试看在网站上“智能物联”栏里面的“控制命令管理”,点点刚才设置的2个命令,测试下。看看你的LED灯是不是远程开关了?
你这个可是通过互联网控制的,也就是说,不管你在哪里都可以控制你的led了。拓展开来,led可以换成你的灯、你的插座、你的热水器等等等等。。
 

如果感兴趣,可以更进一步,看看后面的教程,实现更酷的玩法。

 

 

结束语:

如果你需要更详细的技术交流或者疑问咨询,可以加入乐为物联技术支持群:59162154
或关注乐为物联新浪微博 @乐为物联
或关注乐联网微信:搜索公众账号 “乐联网”。或者扫描下面的二维码来添加关注“乐联网”。