微信硬件开发步骤
一、 组册微信测试号
1、 首先登录http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,然后进行组册,可以申请到一个测试号
2、 填写调试时候的接口配置信息,这样调试的时候微信后台发来的信息都会传送到这个指定的URL网页上面
这里的token相当于一种验证码,可以随意设置,只要与后面自己编写的用来响应微信后台的PHP代码里面的token值一致就可以,类似于一种加密的措施。
二、 注册一台云服务器
由第一步我们可以知道,要开发微信公众号,首先要有自家的服务器,该服务器用来相应微信后台的消息。
我在阿里云上注册申请了一台云服务器,服务器的配置为(Linux+Apache+Mysql+PHP)。系统是ubuntu 64位的。
关于阿里云服务器的组册和服务器的配置不是我们本次项目的重点,这里就不再赘述。
1、 组册到阿里云后,会得到组册的云服务器的IP地址,该IP地址就是以后我们要经常访问的地址了,必须记下来。
2、 Apache的默认根文件目录为/var/www/html,也就是我们在IE浏览器上输入服务器IP地址,其实是跳转到服务器的这个目录下面的,默认会访问这个目录下面的index.php这个文件。
三、 编写响应微信的PHP程序
1、 编写响应微信的PHP程序前,我们先要在微信公众号的后台把我们自己的云服务器的IP告诉微信后台,配置如下
这样,以后微信后台就把消息发送到这个URL上。
2、 编写响应微信后台的PHP代码
在编写PHP代码之前,我们先来看一下微信硬件的两种数据链路。
第一种是基于蓝牙的信息传输模式;
第二种是基于WiFi的信息传输模式。
我用的是基于WiFi的信息传输模式,所以下面介绍的都是基于WiFi的内容,蓝牙的东西这里不进行介绍。
基于WiFi的信息传输数据链如下图所示
图1
这个图的数据链表示什么意思呢!就是说要想实现控制我们的wifi设备,基本流程是:
咱自己的wifi设备àà自己的服务器(指图中的厂商服务器)àà微信公众平台服务器àà微信手机。
也就是说,要想从手机发送控制信号或者数据信息到我们自己的WiFi设备上,首先消息要通过手机微信终端到达微信后台,然后由微信后台再传送到我们自己的云服务器上,最后再到达WiFi设备。
为什么要经过自己的云服务器呢,微信后台只是一个消息的传达机制而已,不会对我们发送的消息进行处理加工,微信后台纯粹是一个消息的搬运工。而我们自己的云服务器呢,则是对从微信后台传输过来的消息进行加工处理,然后再转发给WiFi设备。云服务器要做哪些消息的处理呢,最基本的就是设备和用户的一一映射关系的处理了,我们可以在云服务器上建立一个数据库,保存用户和WiFi设备的一一对应关系,也就是说甲用户的消息只能传达到甲用户绑定的WiFi设备上,乙用户的消息只能传达到乙用户自己绑定的WiFi设备上,这样消息的传输才能正确无误,尽然有序的完成我们下达的每一个指令和传输我们发送的文件数据。
3、 为什么要编写响应微信后台的PHP程序
经过上面的介绍,就很用意可以知道,PHP响应程序所要做的事情就是接收从微信后台传输过来的信息,也就是完成图1中,绿色圈圈到蓝色圈圈这两部分的数据通信。接收从绿色圈圈发送过来的信息,然后交给云服务器进行处理,云服务器处理完后在传输给我们的WiFi设备。所以,我们还要设计实现云服务器到WiFi设备的通信链路。
当然,既然要接收从微信后台传输过来的信息,那么微信后台怎么发送的,我们就要怎么接收,就是这么被动,凡事都要依着微信后台。
四、 云服务器的信息处理
前面第三节我们已经分析了云服务器存在的意义了。云服务器最主要的两个功能,也是本次项目的重点所在。
功能1:接收从微信后台传输过来的信息,然后对信息进行处理。
功能2:连接n多台WiFi设备,并给WiFi设备发消息
功能1:接收微信后台发送过来的信息,云服务器要判断是哪个微信手机终端发过来的,要转发给哪台WiFi设备。依据的是云服务器上的一个数据库,记录着用户和设备的一一对应关系。云服务器判断微信后台发过来的是文本消息还是图片、语音等文件消息,然后选择不同的消息传输机制进行传输。
功能2:连接多台设备到云服务器上,设备连接上的时候,要进行记录,并可以告知用户,设备在线。如果设备没连接上来,或者掉线, 则通知用户设备不在线。连接多台设备,就涉及到高并发,多进程的问题了。这一块的设计,是最难的地方,既要使云服务器能够同时响应多台WiFi设备,又要保证服务器的效应效率。
五、 微信硬件平台物联网架构
云服务器与WiFi设备端的通信机制完全是根据开发者的要求来自己设计的,微信没有提供任何的帮助,属于纯网络通信编程的范畴,代码设计的好坏,直接影响到整套系统的效率,所以是最关键的一部分。
要想理解整套系统,请看下面的“微信硬件平台的物联网架构”图示,可以帮你快速的理解整套系统的通信机制。
上图涵盖以下信息:
1. 基于微信硬件平台的物联网的架构组成,有微信公众平台/硬件平台、第三方厂商云后端、手机微信/公众号、微信硬件设备终端(Wifi和蓝牙BLE)。
2. 绿色代表腾讯向开发者和公众提供的基础平台和服务,并通过红色(airsync/airkiss)定义的硬件外设协议供硬件设备接入,红色(微信硬件平台接入协议,XML/JSON)供厂商云后端接入;蓝牙和紫色区域代表开发者所要完成的任务,其中蓝牙是嵌入式硬件设备终端的任务,紫色是第三方厂商云后端的任务。
3. 物联网各个组成部分之间的通信协议标识。除了红色标识的协议是微信公众平台和硬件平台制定的协议必须遵循外,其他组成部分的协议都是自定义的协议。
4. Wifi模组的供应商提供的SDK一般都提供socket通信接口,而云后端一般会使用JSP/PHP等web编程技术,因此wifi设备需要模拟HTTP协议跟云终端通信。HTTP是一个标准的公共的通信协议,应用层需要在HTTP之上建立自定义的应用协议来完成设备的控制和交互,而应用协议可以是XML/JSON等等。当然,如果云后端使用底层的socket编程,则wifi设备终端可以不需要模拟http。
5. 蓝牙通过airsync协议接入微信,该协议规定了设备发现、绑定、登陆、初始化、接收用户指令、主动发送消息等过程。
6. Airkiss是通过JSAPI的方式让用户可以在微信上输入路由器的用户名和密码,然后告知没有按键输入和屏幕显示的wifi设备,让该设备能够连上路由器进入网络在线状态。除此之外,Airkiss跟之后用户和厂商、设备的交互完成没有关系。本质上,Airkiss只是一个配置上网功能,跟物联网的控制和交互无关。
7. Wifi设备接入微信硬件平台是远场控制,设备只要处于联网在线状态,那手机用户无论在哪里,只要能上网都可以对设备进行控制,典型的例子是在公司上班可以通过手机控制家里的智能插座上电;蓝牙设备接入微信硬件平台必须依赖于手机,是近场控制,典型的场景是手机控制家里的灯和空调等。
六 、云服务器与设备的互联
看完第五节,很容易就知道下一步要做什么,就是自己设计服务器和设备的通信机制。因为是要实现高并发,多线程的后台,所以客户端与后台的通信最好采用TCP、IP这样的偏向底层的通信协议。
这里我模仿了Apache 的高并发功能,就是先让客户端以一个服务器端指定的端口,比如80端口,去与服务器建立连接。连接上后,让服务器端重起一个进程,用来响应该客户端。然后80端口释放出来,让其他的客户端可以连接上来,这样就实现了高并发的功能。客户端与服务器采用的是TCP/IP通信协议,但是考虑到采用TCP会让服务器负载太重,所以把部分协议改为UDP,在传输文件的时候还是启用TCP比较可靠。
下面是服务器端和客户端的两部门程序框图:
七 、 微信平台给开发者所提供的资源
本文是从开发者的角度去分析整个微信硬件平台物联网,不去探讨物联网运营之类等领域。那么,从开发的角度,物联网的核心要素什么,微信平台又支持了什么?我的理解是:
1. 设备的合法性和唯一性
微信硬件平台在物联网领域做的事情其实不多,只要仔细想想架构图中的这么多的紫色和蓝色都是留给开发者,而且都是要赤裸裸的编程。对于一般的设备商,他们想接入也是勉为其难啊。在这个体系架构中,微信硬件平台做的最重要的一件事情就是身份认证。
就像一个人出生后要办一张身份证(出生证明的号码也是身份证号码)一样,设备生产出来要想进入微信硬件领域,它就必须到微信硬件平台注册自己的身份,那它拿什么去注册呢,这个依据自然应该是独一无二的,就像每个人的指纹,如果我国的小孩办身份证都以录指纹为依据,那就不会出现那么多拐卖儿童了。现在公安局的做法是什么,是硬生生地把一串身份证数字跟人名绑在一起,跟自然人的生物特征没有一丁点关系!!!设备的独一无二的依据就是48位的MAC地址(或者是MAC地址通过某种加密运算得到的结果)。
接着办身份证/出生证不是要给小孩起个名字吗,以后大家交流就叫名字了,公安局也是叫名字的嘛,不可能每次喊话都把指纹的二进制数字读出来的啊。嗯,那硬件设备注册时也要报备自己的名字,即设备ID。设备ID也应该在微信硬件平台唯一啊,不然会乱的。就像MAC地址一样,有一部分是代表一个设备提供商向世界IETF组织申请的企业识别字段,另一部分是设备商内部的分配。或者像身份证那样,前面6个字段是代表一个人出生时的县区行政区划码,后面的数字才代表自身,但同时要保证在这个行政区里面的唯一性。那微信硬件平台怎么规范设备身份?设备身份包括两个部分,deviceType是设备商/销售商的微信公众号的原始ID,deviceID由设备商/销售商自定义,由设备商保证deviceID在其deviceType中的唯一性。
这就是设备的注册场景。设备注册了以后在微信硬件平台就具有合法性和唯一性了。
2. 设备被访问的合理性和正当性
设备最终是应该和人/手机用户交互的,否则就失去了物联的意义了。那么哪个用户能够访问这个设备呢?
微信用户要关注设备商的微信公众号和绑定设备才能对设备进行访问。如果不绑定就可以访问,那就是所有用户都能够访问这个设备,这显然是不合理的。你买的智能插座放家里,另一个人也能控制你的插座,多危险。微信硬件平台确保设备的唯一性,微信公众平台确保微信用户的唯一性,两者通过关注和绑定这个流程建立起完全权利的访问关系。
微信硬件平台是微信公众平台的一个子集,微信硬件平台会利用微信公众平台已有的功能来完成基础服务。
3. 设备和用户交互的消息触达能力
设备要成为物联网中的一员,必须能够联网,好比人体的神经元,具有能够和外界交流的能力。微信硬件平台主要从云后端接入和硬件接入两方面作出努力。一是通过airsync协议让蓝牙设备和微信互通,airkiss协议让简单的没有按键和UI交互的wifi设备联网;二是通过制定云后端接入协议来接纳厂商云,通过消息接口和API接口使用户和设备的消息能够相互触达。即设备发出的消息经过微信平台发送到厂商云,厂商云的消息也能主动推送给设备,完成交互。
4. 效率
扫一扫功能对微信的影响是巨大的,加关注,好友,移动支付等等都通过二维码来完成,设备绑定是二维码。微信硬件平台和公众平台产生的二维码关联了用户、设备ID等信息,通过扫一扫功能能方便地进行绑定,接入进入公众号的消息界面。
物联网涉及到终端、前端和后端等等,是一个大工程,无论从开发的角度,还是从用户使用的角度,都要始终强调便捷的效率,以让用户有足够好的体验,才能使得物联网得以壮大。
5. 消息处理能力—嵌入式系统
这一点并没有在物联网架构的图示中出现。物联网决不仅仅是一种控制,例如开灯和关灯之类,也不仅仅是简单的通过各种传感器来进行数据采集,未来的物联网一定会让用户不断地提高用户体验,例如多媒体、虚拟与实现、数据决策等等,这部分是由高级的嵌入式系统来完成的。嵌入式系统才是设备的大脑,物联网应该更好地拥抱嵌入式系统。
八 、微信平台的优劣
回过头来想想,国内这几年早已经有多家物联网平台,如机智云,yelink等等,它们除了充当公安局的角色确保设备的唯一性,还完成了后端的服务平台,甚至给用户提供物联设备模块,极大地简化了物联设备生产商的开发流程。在这样的基础上,微信硬件平台把那么多的任务丢给了开发者,但还是很多厂商拥抱它,只能说微信是一个超级APP,是一个极佳的入口,掌握了全社会大部分用户的入口。在移动互联网领域,用户数量就是王道。
诚然,用户量巨大和腾讯体量庞大是微信硬件平台物联网的优势,但要想做得更好,是不是考虑给用户多做一些像机智云一样的工作?
呵呵,腾讯又想到了,QQ物联就是。
不过腾讯什么都做了,那让方案开发公司怎么活啊!