彭卫星+邹文欢+毋茂盛
摘 要:随着网络技术和通信技术的发展,利用移动通信设备控制家居技术成为人们目前的研究热点。由于平板具有显示屏幕大等优点,用平板控制家居,操作更方便,特别适合老年人群。文中开发了一个平板App程序和对应的硬件电路,实现了通过WiFi和ZigBee技术控制家中电灯、空调与门锁等设备的目的。
关键词:App;WiFi;红外;智能家居;
中图分类号:TP277 文献标识码:A 文章编号:2095-1302(2017)12-00-03
0 引 言
随着互联网技术和3G、4G通信技术的不断发展,WiFi已成为目前最普遍的无线通信方式之一。如今90%以上的家庭都拥有WiFi,主要用于手机上网。利用WiFi通信,无需布线,因此,利用WiFi进行智能家居的自动化控制成为目前工程师们研究的热点。由于老年人反应迟钝,视力欠佳,操作手机时,经常会因看不清或抖动出现按错键的情况,更有甚者可能无法操作手机,而平板具有比手机更大的屏幕,因此,本文开发了一个基于平板和WiFi技术的智能家居监控系统,通过在平板电脑上“指指戳戳”实现开灯、开门和开关空调。
1 系统结构与功能
1.1 总体设计
系统的总体硬件结构如图1所示。
1.2 系统的工作原理
平板通过ESP8266 WiFi模块与基于CC2530的协调器相连。WiFi选择AP模式,默认的IP地址为:192.168.4.1;通过AT指令可以查看或修改WiFi模块的IP地址(具体方法见ESP8266中AT指令手册)。为了控制空调、电灯和门锁等设备,采用积木式结构,每个设备对應一个终端节点,终端节点与CC2530协调器之间通过ZigBee协议进行组网通信。不同的终端节点具有不同的硬件电路和控制功能,由此最终实现通过平板对家中设备如电灯、空调以及门锁的控制。
2 系统硬件设计
系统硬件主要由基于CC2530的协调器和基于CC2530的终端节点组成,其工作原理如图2所示。
CC2530是由美国TI公司设计的SoC芯片,它采用8051内核,含有可编程闪存、8 KB RAM、UART和SPI接口等,最重要的是具有采用ZigBee协议进行数据无线发射和接收的功能,适用于智能家居、工业控制等特定场合,能够省去连线的麻烦,被广泛应用于物联网技术领域[1]。本项目中用CC2530分别设计了协调器和终端节点,两者之间通过ZigBee进行无线通信。协调器作为平板和终端节点之间的桥梁,用以转发各种命令和数据;终端节点用于数据采集或执行平板发送的命令,实现室内温度数据采集、控制电灯开关、开启门锁和空调等。对于不同的终端节点,仅焊接相关的电子元件即可。
2.1 WiFi模块
WiFi模块的主芯片为高性能无线 SOC esp8266-01,在较小尺寸封装集成了业界领先的 Tensilica L106 超低功耗 32 位 MCU以及WiFi MAC/ BB/RF/PA/LNA等,支持 16 位精简模式和RTOS,支持标准的 IEEE 802.11 b/g/n 协议和完整的 TCP/IP 协议栈。WiFi模块的工作电路如图3所示。
2.2 空调控制电路设计
为了控制空调,用CC2530的P2.0通过电阻外接三极管9013的基极,9013的集电极接红外发光二极管。通过CC2530的P2.0引脚输出脉冲可以开启和关闭空调。
2.3 电灯和开锁电路设计
用CC2530的P1.3和 P1.5 输出两路控制信号,经三极管驱动后接继电器,由继电器控制灯泡的220 V电源和12 V开锁电源,最终实现开关灯泡和门锁。
2.4 室内温度采集电路设计
DS18B20是美国DALLAS半导体公司设计的数字温度传感器[2],它可直接将温度转换成数字温度值,温度测量范围为 -55 ~ 125℃;采用1-Wire 接口。可以编程设置上限和下限报警温度和温度转换分辨,使用方便。在本系统中,CC2530的P1.1 接DS18B20的数据线,可实现室内温度的采集。
3 系统软件设计
线性布局(Linear Layout)是一种比较灵活的布局方式,具有操作简单、修改方便以及界面友好等特点[3]。因此,该平板APP的设计采用线性布局的方法实现。首先,将页面母板分成若干部分,母板Linear Layout使用Android:orientation="vertical"将各个部分垂直分布;然后,每个部分中的对象通过Android:orientation="horizontal"实现横向分布。且采用了TextView,Editext,ToggleButton , Button,ImageView等控件。通过对每一个Button设置setOnCheckedChangeListener()语句实现对该控件的监听。当Button被按下时,会触发一个事件。平板App软件大致分为3个模块,分别是连接模块、控制模块和接收模块。App运行界面如图4所示。
3.1 IP连接模块设计
App默认端口号为8080,默认IP地址为:192.168.1.1,如果需要也可以在IP地址栏输入新的IP。点击连接,会触发Socket事件,进行Socket通信。连接成功后,App与硬件的通信都通过Socket进行,进而控制硬件操作。具体开启线程代码如下:
toggleButton2.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {endprint
toggleButton2.setChecked(isChecked);
if(isChecked == true)
{
socket = null;
ReceiveMessageThread r1 = new ReceiveMessageThread();// 开启客户端线程
r1.start();
//延时让子线程执行完毕后再执行下方程序
for(int i=1;i<10000;i++)
for(int j=1;j<10000;j++);
if(socket != null)
Toast.makeText(MainActivity.this,"正确连入", Toast.LENGTH_SHORT).show();
else {
Toast.makeText(MainActivity.this, "失败连入", Toast.LENGTH_SHORT).show();
}
}else{
socket = null;
Toast.makeText(MainActivity.this,"断开连接", Toast.LENGTH_SHORT).show();
}}})
3.2 控制模块
控制模块包括电灯控制,门锁控制,空调控制等。灯与门锁通过继电器控制,空调则用红外控制。软件通过Socket中的BufferedWriter将携带的所有控制信息发送给硬件。实现代码如下:
BufferedWriter writer = new BufferedWriter (new
InputStreamWriter(socket.getOutputStream()))
开关控制代码如下:
switch1.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton
buttonView, boolean isChecked) {
Toast.makeText(LampActivity.this, "LED1"+isChecked,
Toast.LENGTH_SHORT).show();
if(isChecked == true)
{
String up1 = "@LED1UP";
try {
writer2.write(up1);
writer2.newLine();
writer2.flush();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e){
System.out.println(e.toString());
}}else{
String down1 = "@LED1DOWN";
try {
writer2.write(down1);
writer2.newLine();
writer2.flush();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e){
System.out.println(e.toString());
}}}})
3.3 温度采集显示模块
连接后,温度采集终端节点每秒采集一次温度,通过Socket缓冲区BufferedReader将温度实时上传到平板。具体代码如下:
线程:class ReceiveMessageThread extends Thread {
public void run() {
try {
s1 = ed1.getText().toString().trim();
//s1是文本框填写的IP地址
socket = new Socket(s1,8080);
reader = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
while((valueString1=reader.readLine()) != null){
Message message1 = new Message();
message1.what = UPDATE_RECEIVEMSG;
handler.sendMessage(message1); }
} catch (IOException e) {
e.printStackTrace();
}}}
在onResume()中運行以下代码:
Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch(msg.what) {
case UPDATE_RECEIVEMSG:
ed2.setText(valueString1.toString());
valueString1 = null;
break;
default:
break;
}}}
4 结 语
本文研究了基于平板的家居智能控制技术,通过WiFi和ZigBee无线方式传送命令和数据,省去了布线的麻烦。一方面,通过平板可以开门,由于电插锁安装在室内,使得想通过开锁行窃的盗贼望而却步,起到了防盗的作用。另一方面,特别是夏天,用户无需打开蚊帐,躺在床上即可用平板开关电灯和空调,避免蚊子钻入蚊帐中,使生活变得非常方便。本文设计的系统经过实际使用,取得了良好的效果,所研究的技术具有非常重要的意义和广阔的应用前景。
参考文献
[1]董泽龙,毋茂盛. SPI/UART与ZigBee协议转换模块设计[J].物联网技术,2015,5(12):32-34.
[2]毋茂盛.单片机原理与开发[M].北京:高等教育出版社,2015.
[3]郭霖.Android第一行代码[M].北京:中国工信出版集团, 2016.
[4]王健权,王蒙.基于WiFi的智能家居的设计与实现[J].科技风,2016(2):61-62.
[5]何文乐.基于物联网和wifi的智能家居移动控制系统[J].信息通信,2016(2):90-91.
[6]朱祥贤.基于Android和ZigBee的智能家居系统设计[J].数字技术与应用,2014(9):131-133.
[7]薛誓颖,李捍东.基于ZigBee技术智能家居安防监控系统[J].物联网技术,2017,7(7):68-70.
[8]鲁玉军,刘振.ZigBee技术在智能家居系统中的应用[J].物联网技术,2017,7(4):40-43.endprint