基于WiFi的智能LED照明控制系统的设计
2019-09-26卢超
卢 超
(陕西理工大学物理与电信工程学院,陕西 汉中 723000)
引言
随着互联网技术的不断发展,智能家居的出现为人们享受生活提供了一个广阔的平台。无线传输技术被广泛应用到具有远程控制功能的智能LED照明系统中,通过手机APP远程控制终端设备的应用越来越多。目前,主流的无线传输技术主要有NRF905或者NRF2401等短距离无线通信、Zigbee技术、蓝牙、GSM和WiFi等。WiFi技术具有速度快、可靠性高的特点,可以方便组建网络,对于普通的家庭照明控制,它是实现无线智能照明系统的较好的解决方案[1,2]。设计一个基于WiFi的智能LED照明控制系统,实现移动终端远程控制智能家居中的LED灯,具有很好的市场应用价值。
1 系统设计
系统设计主要分为三个部分:手机客户端、服务器和基于WiFi的无线模块客户端。
1)手机客户端:编写一个手机APP程序,通过TCP/IP协议连接到Internet网络;设计UI界面,设计人性化交互操作界面,通过APP程序发送数据给服务器。
2)服务器:接收手机客户端发送来的数据,对发送来的数据进行存储,然后将手机客户端发送来的数据发送给基于WiFi的无线模块客户端。
3)基于WiFi的无线模块客户端:根据设计要求,基于WiFi的无线模块选用HF-LPB100WiFi模块,采用Cortex-M3内核的ARM作为主控芯片,控制WiFi模块。通过TCP/IP协议连接服务器,然后接收手机客户端发送来的数据,识别后通过控制继电器来实现控制LED的通断、色度和亮度[3],系统总体设计如图1所示。
图1 系统框图
2 硬件电路设计
1)LED电路。为了实现LED的色度控制,选用RGB红绿蓝七彩色LED灯珠,控制器的P2口接地控制所有LED的通断,P1口控制蓝色LED,P3口控制绿色LED,P4口控制红色LED。通过P1、P3和P4三原色合成七种颜色,设计中通过一个GPIO和三个PWM可实现控制整个LED输出不同的颜色和亮度。
2)USB转UART电路。为了调试方便,调试时将数据收发通过串口调试助手进行测试,选用FT232实现USB到串口UART接口的转换,图2所示为USB转UART的电原理图。
3)HF-LPB100电路。WiFi模块采用HF-LPB100模块,HF-LPB100集成802.11b/g/n,单片机控制装置很容易接入WiFi无线网络,实现物联网控制与管理。HF-LPB100尺寸仅23.1 mm×32.8 mm×2.7 mm,配备了一个内置PCB天线、外置天线连接器。HF-LPB100的无线模块可以配置成一个无线STA(即无线站点,是一个无线网络的终端),也可以配置成AP(无线接入点,是一个无线网络的中心节点)。HF-LPB100模块支持串口透明传输模式,实现串口即插即用,仅需要配置必要的参数,上电后模块自动连接到默认的无线网络和服务器[4,5]。
图2 USB转UART电原理图
设计中,模块采用3.3 V供电,通过ARM普通的GPIO控制口作为输入输出,SPI接口用于Jlink下载程序调试,PWM输出不同占空比的脉冲,HF-LPB100电原理图如图3所示。
图3 HF-LPB100电原理图
3 软件设计
软件设计分为三个部分:HF-LPB100模块客户端软件设计,手机客户端的Android软件设计和服务器软件设计。具体实现是通过HF-LPB100客户端发送LED的属性状态给服务器,服务器接收后保存并转发给Android客户端,Android客户端发送控制信号给服务器,并转发给Hf-LPB100模块客户端,客户端接收到数据后识别控制LED的通断、色度和亮度。
3.1 系统编译和调试环境
HF-LPB100模块客户端软件设计采用KEIL MDK开发工具,包括μVision4集成开发环境和RealView编译器,支持ARM7、ARM9和Cortex-M3/M1/M0内核处理器,有处理器自动配置启动代码,集成了Flash烧写模块,Simulation设备模拟功能和性能分析功能。手机客户端的Android软件设计采用开源性的Eclipse,基于Java的集成开发平台。Eclipse提供了一套标准的插件给开发者,包括Java开发工具。服务器软件设计采用VC++6.0,基于Windows操作系统的可视化集成开发环境[6]。
调试软件采用SecureCRT和SocketTool。SecureCRT支持SSH,包括SSH1和SSH2终端仿真程序,可以登录UNIX或Linux服务器主机,登录后可以远程操作服务器主机,同时支持Telnet和Rlogin协议。SocketTool调试软件是一个可以进行网络的TCP/UDP通信调试工具,集成了TCP的服务器/客户端,和UDP的服务器/客户端,以及UDP广播/组播,可以建立服务器或者客户端,支持发送和接收十六进制的显示,支持汉字以及发送[7-10]。
3.2 HF-LPB100模块客户端软件设计
HF-LPB100模块客户端软件设计思路是:SDK先连接服务器,监听是否有客户端连接服务器,如果有客户端连接服务器,服务器告知SDK有客户端连接了服务器,这时SDK将采集的LED的通断状态,LED的色度值和亮度值发送给服务器器,由服务器发送给Android客户端,Android客户端收到SDK发放回来的数据,进行分离识别处理后,把LED的通断状态在按键上显示,把色度值在滑动条上显示,把亮度值在滑动条上显示,控制完毕后,关闭软件,等待下一次在打开软件时,上一次控制保留的数据会显示在Android手机上[11-14]。图4所示为HF-LPB100模块软件设计流程图,判断HF-LPB100模块客户端是否连接网络,连接后发送LED的状态,进入阻塞式等待状态,当接收到数据时,识别并判断发送来的数据是控制通断的还是控制色度亮度的,实现远程控制。
图4 HF-LPB100模块软件设计流程图
3.3 手机客户端Android软件设计
手机客户端Android软件主要是菜单设计,菜单包括首页、通断、色度、亮度和帮助。首页中添加一个按键,按键监听器监听是否按键按下,将结果发送给服务器,实现远程控制;通断中放置一个连接服务器按钮和六个按键,连接服务器按钮第一次按下后,会自动连接服务器,六个按键对应六组LED,分别设置LED的应用场景为:客厅、卧室、阳台、厨房、卫生间和餐厅,通过按键控制对应的LED通断,为了人机交互人性化,当LED打开时,按键会切换亮LED图片,使用户可以通过图片示意,清楚地看出LED的通断,另外设置了一个设置按钮,用于对IP和端口号存储,输入IP和端口号后,点击保存按钮,下次再进入后就不用再修改IP和端口号,直接可以点击连接服务器按钮,方便使用;色度中放的是六个滑动条,通过触摸滚动滑动条可以调节LED的色度;亮度中放的是六个滑动条,通过触摸滚动滑动条可以调节LED的亮度;滑动条的值是0~100,滑动条监听器用于监听滑动时间,每次滑动停止将数据发送给服务器;帮助菜单是APP的使用说明,点击按钮,读取指定位置的txt文件,显示在屏幕上。系统开始工作时,服务器先要发送客户端LED的通断状态和LED的色度、亮度,手机接收到服务器发送来的数据,进行分析处理,并初始化LED的通断按钮的状态和滑动条的初始化值,这样每次打开软件,手机都会显示LED的信息,在重新控制的时候,LED的属性不会错乱。图5所示为手机客户端APP软件设计流程图,首先是放置一个菜单,进入设置界面,输入IP和端口号保存,连接服务器,没有连接时重新连接,连接成功后,等待接收WiFi客户端发送来的状态,显示在UI界面上,点击按键发送通断信号,触摸滚动滑动条调节色度、亮度值,发送后,在UI中显示客户端连接服务器的状态和LED的开关状态,APP软件运行界面如图6所示。
图5 手机客户端APP软件设计流程图
内网到外网的的连接,通过花生壳软件和服务器做了一个地址映射,配置一个域名和端口号,手机Android客户端可以通过这个域名和端口号使用外网连接搭建的服务器[15]。
3.4 服务器软件设计
图6 APP运行界面
在TCP和UDP协议中为了识别通信实体中进行通信的进程,通过协议端口实现,端口使用了一个16位的数字表示,包括一些数据结构和I/O缓冲区,应用绑定后,传输层端口的数据端口是通过系统调用来实现。套接字用于通信的进程,将有共有特性的套接字综合在一起,在同一个区域的套接字进行数据交换,套接字的两种类型:流式套接字和数据报套接字。流式套接字是一种基于TCP协议的网络连接,是面向对象的可靠的网络数据通行方式,在通信过程中,数据时无差错的传输,接收数据时按顺序接收;数据报套接字是一种基于UDP协议的网络连接,是无连接的网络数据通行方式,在通信的过程中,数据包是以独立的方式发送的,不提供错误保证。服务器软件设计主要包含基于TCP(面向连接)的Socket编程和基于UDP(面向无连接)的socket编程[16-19]。
基于TCP(面向连接)的Socket编程创建服务器的顺序如下:
①加载所需要的套接字库;②创建所需要的套接字;③将所需要的套接字绑定到一个IP和端口上;④将所需要套接字设为监听模式,准备接收客户端的请求到来;⑤等待客户端请求的到来;当请求带来时,接收连接请求,返回一个新的,对应于和本次相同连接的套字,当请求没有到来时,继续监听模式,准备接收客户端的请求到来;⑥用返回的套接字和客户端进行通信,包括发送接收数据;⑦返回套接字,等待另一个客户端通信请求;⑧关闭所需要的套接字。
基于TCP(面向连接)的Socket编程创建服务器的顺序创建客户端的顺序如下:
①加载所需要的套接字库;②创建所需要的套接字;③客户端向服务器发送连接请求,请求连接服务器;④客户端要和服务器端进行通信,包括数据的发送和接收;⑤关闭所需要的套接字。
基于UDP(面向无连接)的socket编程创建服务器端顺序如下:
①加载所需要的套接字库;②创建所需要的套接字;③将所需要的套接字绑定到一个IP和端口上;④服务器等待接收客户端的数据;⑤关闭所需要的套接字。
基于UDP(面向无连接)的socket编程创建客户端的顺序如下:
①加载所需要的套接字库;②创建所需要的套接字;③客户端向服务器发送数据,包括数据的发送和接受;④关闭所需要的套接字。
图7所示为服务器软件的系统框图,服务器获取到客户端的输入流,将输入流中的数据放入输出流中发送。
图7 服务器软件系统框图
4 系统调试与测试分析
4.1 系统调试
设计中,数据传输主要包括三个部分:手机客户端和服务器网络建立连接后进行的数据传输;HF-LPB100模块客户端与服务器建立连接并进行数据传输;手机客户端与服务器、HF-LPB100客户端与服务器之间组网并进行数据传输。Android开发中主要用USB数据线在Eclipse中的lagcat中输出日志来调试,HF-LPB100WiFi模块数据传输中主要通过串口调试要显示的数据,在ARM的编程中,通过Jlink单步、全速、跳出、进入来调试。
测试HF-LPB100模块发送数据给服务器,前提是要和服务器建立连接,将要发送的数据放入BUFF中,发送给服务器,通过透传的方式,在串口中打印BUFF中的数据,只有发送的BUFF数据正确,才可以确定服务器接收的数据正确。测试HF-LPB100模块接收来自服务器的数据,通过在sockettool的发送区中写入要发送的内容,点击发送按钮,将数据发送给HF-LPB100模块,判断接收数据是否正确。
Android编程中测试是否和服务器建立连接,利用sockettool建立一个服务器,Android手机主动和服务器建立连接,建立连接后用USB数据线通过日志的形式在Eclipse中打印出来,同时在sockettool也可以看到客户端的IP和端口号。Android手机测试发送和接收可以控制LED通断,调节LED色度、亮度的控件,并添加监听器,通过点击UI中的控件测试发送数据给服务器,通过服务器保存和转发。
服务器的测试可以直接打印在控制台上进行查看数据。服务器发送接收数据测试完成后,添加线程,监听端口是否与客户端与之建立连接,判断是哪个客户端后,对数据进行转发保存。
HF-LPB100模组客户端与服务器可以建立连接并可以正确收发数据,Android手机客户端可以与服务器建立连接并可以正确收发数据,服务器也可以正常收发数据,三个部分单独调试成功后,进行系统联调,服务器先监听端口是否有客户端连接,并识别是哪个客户端,当时手机客户端时,服务器会将LED的属性发送给Android客户端,Android客户端接收到服务器发送来的数据后,在UI界面中告诉使用者,LED的开关状态、色度、亮度,当使用者点击了UI控件后,发送数据给服务器,服务器接收数据并保存,同时将数据转发给HF-LPB100模块客户端,HF-LPB100模块客户端接收到数据后识别控制信号是控制开关,还是调节色度或亮度的,然后通过ARM中的GPIO控制LED的状态,PWM调节LED色度、亮度。
4.2 数据测试与分析
HF-LPB100模块客户端发送LED的属性值,包括LED的色度,亮度和通断给服务器,经服务器保存并转发后,发送给Android客户端,Android客户端将接收到的数据显示在UI界面上,提供一个交互式的人机交互界面,智能LED系统设计了六组LED,其中包括:客厅、卧室、阳台、厨房、卫生间和餐厅,以客厅为例,测试数据如表1所示。
表1 测试数据
字符串中,open0代表打开LED,open1代表关闭LED,color_livingroom#17代表客厅LED的色度值为17,brightness_livingroom#90代表客厅LED的亮度值为90。通过观察LED的状态,可以看出和设定值相一致,完成控制功能。选取其中一组数据:亮-蓝红色-很亮,open0,color_livingroom#17,brightness_livingroom#90。退出服务器后,再次打开APP,连接网络后,HF-LPB100模块客户端会发送数据给服务器,并转发给Android客户端,Android客户端接收到的数据如表2所示。
表2 Android客户端接收初始状态数据分析
当APP再次打开后,接收到open0,color_livingroom#17,brightness_livingroom#90数据,LED的显示为亮-蓝红色-很亮,在UI界面上显示正常。由此可以说明,服务器保存了上一次的设置,存储功能正常。
5 结束语
本文设计了一个的智能LED照明控制系统,采用Cortex-M3内核的ARM作为主控单片机,WiFi模块采用支持串口透明传输模式的HF-LPB100模块,选用RGB红绿蓝三种LED灯珠,通过单片机I/O口控制继电器来实现LED的通断,利用PWM可控制LED输出不同的颜色和亮度。在Android环境下编写一个APP,通过TCP/IP协议连接网络,采用花生壳软件中地址映射生成的域名和端口号访问自己搭建的服务器,实现了通过触摸按键控制智能LED的通断,通过滑动条调节控制LED的色度和亮度。系统布置了客厅、卧室、阳台、厨房、卫生间和餐厅六个场景设计六组LED,在内网和外网中测试功能均正常,可应用于智能家居系统。