1. 引言
智能家居是近两年来比较热门的研究方向 [1] [2] ,微信是我们日常生活中经常用到的通信软件,将智能家居和微信结合起来,可以实现智能家居控制的即时化和简易化,使得大多数智能家居项目不在仅仅停留在实验室阶段,通过微信来拉近普通民众和智能家居的距离。
2. 系统的原理与构架
系统可以分为三个部分:微信端、服务器端以及控制端,微信端即我们日常使用的微信软件,通过所申请的公众测试号向服务器发送命令,服务器端本文以新浪云为例做介绍,负责微信命令的处理以及数据储存工作,控制端采取ESP8266模块加ARDUINO MEGA2560开发板实现对智能家居的控制。
三个部分之间的工作关系如图1所示,当三部分部署完成后,微信端向服务器发送命令,例如:“开灯”、“关灯”等等,服务器解析命令后会打开数据库,根据命令要求查询或者更改数据库数据,将结果返回给微信端;同样的,控制端也会不断的向服务器发送命令,查询或者更改数据库中的参数,同时根据查询到参数对一些设备进行控制。
总的来说,服务器是一个数据中转站,同时也带有数据储存功能,使得微信端和控制端能够通过服务器进行数据交换,实现远距离实时控制的效果。
3. 准备工作
在微信端我们需要有一个微信测试号 [3] ,可通过微信微信公众平台进行申请,申请到测试号之后我们进入测试号的管理界面,如图2所示,可以看到我们所申请的测试号的appID、appsecret以及接口配置信息设置窗口。
图中的接口已经为配置成功的状态,新用户可以根据要求填写URL和Token进行验证,具体方法可以参照微信公众平台→服务号→开发文档→开始开发中的接入指南进行操作。同时,设置中我们也可以看到测试号二维码以及用户列表,用户可以用手机微信扫描二维码进入测试号,测试号所申请完毕后需要详细阅读微信公众平台的技术文档,如图3所示,其中详细介绍了微信测试号的使用规范以及信息交流规范,这些是我们在之后的服务器端进行开发时所应该遵守的,否则服务器将无法和微信测试号进行通信。
服务器端需要申请到一台稳定的服务器以及MySQL数据库,本文将以新浪云服务器以及其MySQL数据库为例进行讲解,申请步骤以及应用和数据库的创建细节不再过多赘述。
控制端本文以Arduino mege2560开发板和ESP8266模块为例,控制设备为一颗绿色LED,传感器使用的是光敏电阻,可以将光照数据返回给数据库。硬件相对比较简单,连接完成之后需要进行检查和短路测试,确定没有问题之后可以上电。

Figure 2. The management interface of test number
图2. 测试号管理界面

Figure 3. The technical documentation screen of WeChat public platform
图3. 微信公众平台的技术文档画面
4. 测试与数据交流
完成准备工作后将相应的代码分别部署到服务器端与控制端,测试无误后三部分便可以相互传递数据了。
微信端和服务器端都部署完成之后,便可以开始部署控制端了,控制端主要由单片机开发板和WiFi模块以及一些传感器组成,负责将本地传感器的数据上传至数据库,并且查询数据库中的开关数据等,然后做出相应的动作。
本文以Arduino mege2560开发板和ESP8266WiFi模块为例,控制设备为一颗绿色LED,传感器使用的是光敏电阻,可以将光照数据返回给数据库。实物如图4所示,硬件相对比较简单,连接完成之后需要进行检查和短路测试,确定没有问题之后可以上电。
打开串口监视器查看控制端的返回数据,如图5所示,为一个周期的数据记录:
“ON LINE”表示WiFi已经连接。
“loops7”表示loop函数的第七次循环。
“22813”表示此时的光敏电阻阻值。
“CONNECT done at 14”表示已经建立TCP连接。
“GET /httpget.php?light=22813 HTTP/1.1
Host:1.blink.applinzi.com
Cache-Control:no-cache”是发送给服务器的协议内容。
“SENDHTTP done at 58”表示已经完成HTTP协议的发送 [4] 。

Figure 4. The physical drawing of control terminal
图4. 控制端实物图
其余数据为服务器的返回数据,可以看到返回数据中有开关数据以及时间戳,当单片机接收到数据时,将会分析其中的“blinkdatapagex135”字符串,如果结尾是“35”,则打开LED,如果结尾是“34”,则关闭LED。此时,我们就可以通过微信发送“打开”、“关闭”命令控制LED的点亮与熄灭,以及“光照”命令获取光敏电阻的阻值了。
5. 系统特性
完成三部分的部署后,微信端和控制端就可以通过远程服务器进行信息交流了 [5] ,给予互联网的强大功能,实现使用微信进行远程控制的目的。
5.1. 系统物理构成及介绍
系统中微信端以及服务器端的设备维护分别由腾讯、新浪公司负责,我们不必担心;在接收端采用的是ESP8266模块加ARDUINO MEGA2560开发板的组合,在正确的接线情况下同样值得信赖。
ESP8266模块:一块专为移动设备、可穿戴电子产品和物联应用设计的WIFI模块,功耗小,稳定性高,可通过串口与其他模块通信。
ARDUINO MEGA2560开发板:一种AVR单片机的开发板,此开发板共有54路数字接口,其中有16路模拟输入接口,4路uart接口,14路PWM输出接口,具有强大的信息处理、IO输入、输出能力,能够连接较多的外围设备。
5.2. 系统延迟
1) 微信端与服务器端的延迟:本文以新浪云服务器为例,当关闭微信签名验证时,服务器与微信端的信息交换十分迅速,但是为了安全起见,建议打开微信签名验证,此时发送命令时有较小的几率出现“命令无应答”的情况,需要重复发送命令,一般两到三次即可。
2) 控制端与服务器端的延迟:系统控制端大约每秒与服务器进行一次通信,在单片机程序中表现为每执行一次通讯语句后存在着一秒延时,即语句“delay (1000);”,(此语句的延时时间可以更改,具体延时大小需要实际需求以及服务器要求确定)也就是说,理论上LED状态的更新延迟最大为一秒左右,实际的使用效果与网络速度以及微信端命令的发送时间有关,与理论值相差不大。
5.3. 系统可扩展性与兼容性
本系统控制端的ESP8266模块与ARDUINO MEGA2560开发板之间使用串口通信,可以兼容大多数具有串口功能的单片机以及其他模块。
本文中以ARDUINO MEGA2560开发板为例,能够控制非常多的外围设备(参考前文对此模块的介绍),同时也可通过串口通信无限扩展此类模块,使得系统的扩展性极强。
5.4. 系统可靠性
一般来说服务器端与微信端都有较强的可靠性,不必过多担心,而本系统的控制端仅需要一个稳定的的WiFi热点以及5v电源就可以与服务器通信,条件少,效果好,同时单片机中的程序中还加入了在无法连接网络时的处理对策,能够保证控制端在无网络连接时对外围控制设备进行保护性处理,所以系统在正常使用时具有很高的可靠性。
6. 总结
本文简单介绍了通过微信进行远程控制系统中的信息交流原理以及实现方法,以一些简单的硬件元件为例介绍了系统的具体设计方法。
基金项目
国家自然科学基金资助项目(61703307);天津市应用基础与前沿技术研究计划青年项目(15JCQNJC04200);天津市高等学校科技发展基金资助项目(JWK1614);天津市大学生创新创业训练项目(201710066159);天津职业技术师范大学科研启动基金资助项目(KYQD14032)。