一种基于微信的智能灯光控制系统的设计
2017-01-21郑艳华徐嘉顺朱耀臻
郑艳华++徐嘉顺++朱耀臻
摘 要:现有的智能灯光控制系统主要有遥控器控制和手机App控制两种方式,这些方式的用户体验较差。本设计的智能灯光控制系统利用广泛普及的微信和智能手机,通过网络和服务器来自主控制灯光。系统包括手机微信控制端,服务器和灯光控制端三部分。该智能灯光控制系统具有操作简单、体验愉悦、智能可靠等优点。
关键词:微信;智能灯光控制;WiFi;服务器;安卓单片机
中图分类号:TN911;TP273 文献标识码:A 文章编号:2095-1302(2016)12-0-03
0 引 言
目前,房间的灯大多通过实体按钮开关来控制,且每个按钮开关都可能分布在不同的位置。因此通过手动开关按钮控制灯光的操作非常繁琐,为用户带来诸多不便。随着用户体验要求的提高,传统的手动按钮开关控制灯光将会被智能灯光控制取代[1-4]。现阶段的智能灯光控制主要分为两种,一种是通过遥控器控制,另一种是通过手机App控制。不同地方的遥控器不尽相同,App的灯光控制要求每个地方的用户都下载一个手机控制App,而这无疑增添了用户的麻烦[5,6]。
本设计通过广泛使用的微信对灯光进行智能控制,实现在手机上的微信客户端输入相关指令就能控制灯的开关及调节灯光亮度的效果。
1 智能灯光控制系统的设计
该智能灯光控制系统主要由手机微信控制端、服务器和灯光控制端组成。系统控制流程如下所示:
(1)微信用户在公众号中输入控制指令,指令通过微信服务器经URL进入自己搭建的服务器;
(2)服务器对指令进行解读,合法指令将进入MySQL数据库修改相应的记录值;
(3)WiFi模块连接WiFi热点并建立TCP连接后发送HTTP请求到服务器,服务器访问MySQL数据库获取相应的记录值数据后返回给WiFi模块;
(4)WiFi模块通过串口通信将返回的数据发送给Arduino单片机,单片机对数据进行解析并以此控制灯光。
手机微信端、灯光控制端流程图如图1和图2所示。
1.1 手机微信公众号的开发
在开发模式下开发者能通过微信公众号在自己搭建的服务器上使用自己的程序与用户进行对话。首先需要在微信公众平台注册账号。在完成基本信息的填写登记后可以选择开通公众号运营主体和类型,然后开通开发模式。要求开发者完成填写服务器配置、验证服务器地址的有效性和依据接口文档实现业务逻辑3个步骤[6]。
在开发模式下,用户在微信公众号上发送的消息到达微信公众号服务器后通过对接的URL传到自己的服务器上,然后用自己的服务器处理消息,实现业务逻辑并达到设定的功能。如果开发者没有服务器资源可以通过使用云平台来搭建,也能非常简单、快速的实现自己的服务器。
1.2 服务器的设计
服务器是在新浪云SAE平台上搭建的,使用PHP嵌入式脚本语言。若要成为微信公众号开发者并搭建服务器,首先需要在搭建的服务器上将微信服务器发送的GET请求携带的参数signature、timestamp、nonce、echostr进行简单处理,且处理结果需满足微信服务器的要求。搭建服务器的第二部分是在同一个应用下新建一个名为hotel.php的文件。该新建文件也是WiFi模块与MySQL数据库之间沟通的桥梁。WiFi模块通过TCP连接到服务器上后,发送HTTP请求到此文件上,此文件便会判断HTTP请求是否合理,如果HTTP请求合理就连接到MySQL数据库,查找灯光表下的所有记录值,并将记录值输出发送给WiFi模块。
微信用户在公众号里编辑的指令经微信服务器封装成XML格式数据包,通过URL发送到自己搭建的服务器上。服务器再从XML格式数据包中找出用户发送的指令。用户发送的消息封装在某个参数里,我们将用户消息提取出来并与预设的关键字比较。如果和预设关键字匹配就会执行连接进入MySQL数据库中修改相应字段的记录。
回复信息是对微信服务器发送消息的一次回复。信息的回复也要经过将信息封装成XML格式这一过程。封装后的消息经微信服务器处理后,就会将参数中的信息发送到用户ID。
1.3 数据库的设计
当微信公众号中有指令输入时,就要更新数据库中的数据,即更改记录中的值。当对MySQL数据库使用完毕后需要用函数mysql_close()关闭连接。例如建立共享型MySQL数据库,表名为“灯光C”,在灯光C表中有4个字段分别为ID、灯光、VALUE、TIME。每个字段下都有五个记录,ID为1、2、3、4、5的记录代表着五个不同的灯;字段VALUE下的记录值代表着灯光不同的开关状态;字段TIME代表灯最后状态的改变时间,即字段VALUE下的记录改变的时间。用户发送的指令经服务器的预设关键字匹配后就进入灯光C表中修改VALUE和TIME的值,如图3所示。
1.4 灯光控制端的设计
灯光控制端主要包括WiFi模块和Arduino单片机以及各种类型的灯和连线。
1.4.1 WiFi模块设置
要使WiFi模块连上互联网,首先使用USB转TTL串口与esp8266连接,接好线后将USB转TTL插入电脑的USB接口。然后运行串口调试工具sscom42,在串口选择相应端口和波特率后,点击“打开串口”。WiFi模块的波特率默认为115 200,而Arduino单片机不支持太高的波特率,所以使用设置模块波特率的AT指令修改模块的波特率为9 600。语法为AT+CIOBAUD=9 600。
在字符串输入框中输入“AT+RST”重启模块,然后输入“AT+CWMODE=1”设置模块为station客户端模式,接着输入“AT+CWJAP=WiFiwork”,“544544544””连接到无线路由器。若响应为“OK”和“connect”,则说明成功连接上WiFi路由器。成功连接路由器后,WiFi模块能记住一个已连接过的WiFi名称与WiFi密码,等下次重启时发现该热点就会自动连接。接着设置WiFi模块为透传模式,指令为“AT+CIPMODE=1”,透传模式是将WiFi模块接收到的数据原封不动的发送到Arduino单片机上去。接着输入“AT+CIPSTART=‘TCP,1.13521003789.applinzi.com,80”指令建立TCP连接,与自己搭建的服务器建立起通讯连接。若响应为“CONNECT OK”则说明和服务器成功建立TCP连接。建立连接后再输入“AT+CIPSEND”就能发送HTTP请求到服务器。
发送“AT+CIPSEND”指令返回 “OK” 后,就说明可以发送HTTP请求消息了。若成功发送HTTP请求后WiFi模块就能够接收来自服务器端的响应。通过串口通信将响应数据传递到Arduino单片机上,Arduino单片机就会在HTTP响应的数据中解析出控制各灯光开关状态的字符。
1.4.2 Arduino单片机的设置
在Arduino编程中用analogWrite(pin, value)函数来控制灯光的状态。pin代表数字管脚号,value代表PWM输出的占空比,value值的范围在0255之间,所对应的占空比为0%100%。因此通过改变value值的大小来调节灯光亮度。
Arduino与WiFi模块之间通过软串口通信,使用代码“SoftwareSerial WiFi(8,9);”定义数字I/O接口8、9号脚分别为软串口通信的RX(接收)和TX(发送)。工作时,Arduino首先与WiFi模块使用串口通信,将相应的指令输入到WiFi模块中进行设置,使得WiFi模块可以接入WiFi热点进行联网并发送HTTP请求。然后Arduino作为控制端,将WiFi模块接收到的数据信息进行解析,从中找出控制相应灯光开关状态的字符并对灯光进行控制。
2 测试结果
单片机接入电源等待约10 s,WiFi模块会启动并自动连接WiFi热点,然后建立TCP连接,发送HTTP请求。这时就可以通过微信公众号编辑并发送指令来控制灯光的状态。在微信公众号端输入特定指令格式才能成功控制灯光,指令发送后会收到服务器的自动回复。输入“灯光名称+开/关”控制灯具的开和关;输入“灯光名称+数字(05)”调节灯光亮度。控制灯光亮灭和亮度调节的效果如图4所示。微信输入控制和系统自动回复如图5所示。
亮度调节控制
由于网络延迟和程序运行的原因,发送指令12 s后相应灯光的状态才会改变。通过串口监视器可以观察到,WiFi模块每隔约1.3 s便能从服务器上循环获取数据。
当按下实体开关按钮时,灯光的状态也会改变,即开关控制与微信控制形成双开关控制。由于开关使用了中断函数,而Arduino UNO r3 只有两个引脚支持中断函数的使用(D2和D3脚),其中一个引脚接灯光输出,所以本设计中只使用一个开关对灯光调节进行控制示范。当然,不使用中断函数也可以通过开关控制灯光,不过灯光响应控制时间会有延迟,延迟时间约为12 s。
3 结 语
文中利用微信设计了一种智能灯光控制系统。该系统由手机微信控制端、服务器端和灯光控制端三部分组成,实现了微信对灯光的智能控制,具有操作简单、体验愉悦、方便实用等优点。但在安全性、操作界面等方面有待加强和提升。
参 考 文 献
[1]弓盼,王嘉梅,孙善通.基于ZigBee-DALI协议的智能照明系统设计[J].现代电子技术,2016,39(4):63-66.
[2]张晓彬,张.基于蓝牙组网的灯光控制系统研究与设计[J].物联网技术,2015,5(8):22-24.
[3]项新建.基于CAN总线的灯光控制系统[J].照明工程学报,2004,15(2):28-30.
[4]李春雨,孙宪坤,陈涛.智能家居的灯光实时监控系统设计[J].单片机与嵌入式系统应用,2015,15(9):77-79.
[5]钟志勇,何威俊,冯煜博.微信公众平台应用开发实践[M].北京:机械工业出版社,2013.
[6]杨埙,董灿,谭锋.智慧教室灯光控制系统设计[J].物联网技术,2014,4(10):47-49.
[7]王润民,王健.基于ZigBee的道路照明智能控制系统的设计[J].物联网技术,2014,4(12):56-58.
[8]聂佰玲,刘亚,李宇,等.基于微信控制的智能家居系统研究与设计[J].山西农经,2016(2):97-98.