基于STC89C52和TC35模块的智能家居控制.docx
- 文档编号:9030053
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:26
- 大小:3.13MB
基于STC89C52和TC35模块的智能家居控制.docx
《基于STC89C52和TC35模块的智能家居控制.docx》由会员分享,可在线阅读,更多相关《基于STC89C52和TC35模块的智能家居控制.docx(26页珍藏版)》请在冰点文库上搜索。
基于STC89C52和TC35模块的智能家居控制
嵌入式系统技术实验报告
题目:
基于MSP430和TC35模块的
智能家电控制系统设计
姓名:
张若愚
学号:
1012121109
导师:
楼顺天
基于STC89C52和TC35模块的智能家居控制
摘要
本文提出一种基于为实现温室环境监测的便捷化,设计一种基于STC89S52和TC35i的温室环境短信监测系统。
该系统采用多种传感器实现对温度、湿度、光照强度、CO2浓度等参数的实时采集,实现数据的获取、处理功能,提高了对环境数据采集的自动化水平,具有扩展性好、实用性强、便于操作等特点,并具有较高的推广价值。
关键字:
TC35i智能家居GSM
第一章绪论
1.1引言
随着通信技术、计算机技术、网络技术、控制技术的迅猛发展与提高,促使了家庭实现了生活现代化,居住环境舒适化、安全化。
这些高科技已经渗透到生温室环境的各项参数是否符合规定要求需进行检测得知,而科技的发展为温室环境的监测自动化、高效化提供了重要条件。
GSM短信息以其覆盖区域广、快捷、高效、准确、费用低廉、受环境影响小等特点,逐步应用于工业控制、移动作
业环境、远程数据采集和监控中,可随时随地通过GSM模块以短消息方式发送和接收现场采集到的数据,具有实时性强、精度高的优点,便于数据信息的集中管理和远程控制。
智能家电控制系统是以HFC、以太网、现场总线、公共电话网、无线网的传输网络为物理平台,计算机网络技术为技术平台,现场总线为应用操作平台,构成一个完整的集家庭通信、家庭设备自动控制、家庭安全防范等控制系统。
以GSM网络作为数据无线传输网络,利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了一个强大的支持平台。
1.2系统功能
单片机连接8颗LED灯,模拟家电,灯亮表示相应家电打开,灯灭表示相应家电关闭。
TC35模块插入SIM卡,单片机通过AT指令控制TC35模块发送信息和接收信息。
开机,单片机发送向主控手机发送握手信号“Hi,Iamready.”,主控手机收到握手信号后,则可以对控制系统进行短信控制,如发送“open1”,则对应的led1灯亮,发送“shut1”,则对应的led1灯熄灭。
控制系统操作成功后,再向主控手机反馈信息,“Operatesuccessfully!
”,若操作失败则发送“Operatefail,tryagain!
”。
第二章硬件平台
2.1系统硬件构成
该控制系统以STC89C52单片机为核心,组成单片机最小系统,通过串口连接TC35模块,P0口作为8位控制输出端口。
因为该系统是用的单片机学习板,P1、P2、P3端口已作其他用途,只有P0口有引出,故选用P0口作为输出,只需要添加加上拉电阻即可。
图1系统结构图
2.251单片机及外围电路
单片机主要控制TC35模块的收发短信,并对短信内容进行处理,得到相应的控制目的。
试验中用的是单片机的学习板,但实际上只用到很少的一部分硬件资源,主要是通过串口与TC35进行通信和P0口得控制输出。
单片机及外围电路图如下:
图2单片机及外围电路图
选用STC89C52单片机,选用22.1184MHz的外部晶振,以方便进行串口通信波特率设置;采用USB供电,也可以外接电池供电;串口通过MAX232进行电平转换,这里不通过转换也可以,为了下载程序方便,故用了232电平转换电路;P1.0口接蜂鸣器,方便调试跟踪程序;将P0口上拉作为输出端口,接8颗LED状态灯,模拟家电的开启和关闭。
2.3TC35模块
2.3.1TC35模块简介
TC35是Siemens公司推出的新一代无线通信GSM模块,它自带RS232通讯接口,可以方便地与PC机、单片机连机通讯。
可以快速、安全、可靠地实现系统方案中的数据、语音传输、短消息服务和传真。
TC35模块的工作电压为3.3~5.5V,可以工作在900MHz和1800MHz两个频段,所在频段功耗分别为2W(900MHz)和1W(1800MHz)。
模块有AT命令集接口,支持文本和PDU模式的短消息、第三组的二类传真以及2.4k、4.8k、9.6k的非透明模式。
此外,该模块还具有电话簿功能、多方通话、漫游检测功能,常用工作模式有省电模式、IDLE、TALK等模式。
通过独特的40引脚的ZIF连接器,实现电源连接、指令、数据、语音信号及控制信号的双向传输。
通过ZIF连接器及50Ω天线连接器,可分别连接SIM卡支架和天线。
TC35模块主要由GSM基带处理器、GSM射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分组成。
作为TC35的核心,基带处理器主要处理GSM终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟和数字功能。
在不需要额外硬件电路的前提下,可支持FR、HR和EFR语音信道编码。
图3TC35模块结构框图
GSM基带处理器是整个模块的核心,它控制着模块内各种信号的传输、转换、放大等处理过程。
GSM射频部分是一个单片收发器,它完成对射频信号的接收和发送等处理。
GSM模块电源把外部输入的电源电压进行稳压处理后供GSM基带处理器和GSM射频部分使用。
Flash用来存储一些用户配置信息、电话本和其他信息。
TC35的数据输入/输出接口实际上是一个串行异步收发器,符合RS232接口标准,有固定的参数:
8位数据位和1位停止位,无校验位,波特率在300bps~115kbps之间可选,硬件握手信号用RTS0/CTS0,软件流量控制用XON/XOFF,CMOS电平,支持标准AT命令集。
通过这一接口可以用AT命令切换操作模式,使它处于语音、数据、短消息或传真模式。
2.3.2AT指令
GSM引擎模块提供的命令接口符合GSM07.05和GSM07.07规范。
GSM07.07中定义的ATCommand接口,提供了一种移动平台与数据终端设备之间的通用接口;GSM07.05对短消息作了详细的规定。
在短消息模块收到网络发来的短消息时,能够通过串口发送指示消息,数据终端设备可以向GSM模块发送各种命令。
与SMS有关的GSMAT指令如表1所列。
GSMAT指令集,是由诺基亚、爱立信、摩托罗拉和HP等厂家共同为GSM系统研制的,其中包含了对SMS(ShortMessageService)的控制。
常见的AT指令:
AT+CMGF选择短信息格式
AT+CSCA短信息中心地址
AT+CNMI显示新收到的短信息
AT+CMGR读短信息
AT+CMGS发送短信息
2.3.3短信收发原理及程序设计
要使用TC35模块实现短信收发,就必须理解串口通信、AT指令和短信的编码、解码。
PC机或单片机通过串口向TC35模块发送AT命令,完成对TC35模块的控制和通信。
对于短信的收发控制模式,按时间先后,共有三种模式:
BlockMode、基于AT指令的TextMode、基于AT指令的PDUMode(ProtocolDataUnit)。
使用Block模式需要模块生产厂家提供驱动支持,使用Text模式收发短信代码简单,实现容易,但只能发送英文短信(纯文本格式),而使用PDU模式编码的短信内容则可以是中文、英文、声音或图像,本文主要介绍利用AT指令在Text模式下通过GSM无线模块收发短消息。
发送:
AT+CSCA=+8613800290500即设置短信中心为西安移动,设置成功TC35模块通过串口返回:
AT+CSCA=+86138********
OK
发送:
AT+CMGF=1设置短信格式为Text模式,设置成功TC35返回:
AT+CMGF=1
OK
2.3.4TC35外围电路
图4TC35模块外围电路图
电源模块系统由5V供电,通过REG117-3.3产生TC35需要的3.3V电压。
TC35模块通过一个40针的卡座连接在电路板上。
在电路板上接SIM卡和串口电路以及电源部分。
SYNC引脚可以用来输出一个同步信号(synchronization signal),也可以在应用使来控制一个LED灯的输出状态。
:
SYNC端通过一个三极管或门电路来控制LED。
一个简单的电路接法是:
SYNC端通过一电阻接到NPN三极管(如9013)的基极,射极直接接地,集电极通过一个接限流电阻接到LED的负端,LED的正端接VCC。
LED的工作模式完全类同于同步信号,显示的是TC35的工作状态:
1〉LED灯灭,表示TC35电源关闭,处于休眠、报警或单纯的充电模式
2〉600 ms 亮 / 600ms 灭,表示未插入SIM卡,或者个人身份未登记/已注销,或者网络正在搜寻中,或者正在进行用户身份鉴定,或者网络注册正在进行中
3〉75ms 亮 / 3s 灭,表示网络注册成功(控制通道和用户交换信息完成),无来电
4〉LED灯亮,依据不同的呼叫类型:
声音呼叫,数据呼叫,在建立或者完毕时的状态。
TC35的触发点火信号端/IGT, 用OC门或者一个简单的开关拉低该端电平来开启模块,低电平有效。
在空闲/通话/关机模式:
Vout = 2.0V,Vlow,max = 0.45V @ Iout = 10µA,tlow ≥ 100ms。
对于点火信号IGT的处理,需要首先拉低该脚电平到地,并至少维持100ms。
第三章软件设计
3.1设计要求
当系统开启,系统初始化,完成后向主控手机发送准备好信号“Hi,Iamready!
”,则表示系统通信没问题,主控手机可以发送命令实行远程控制了。
主控手机收到准备好信号后,可向系统发送“open1”,打开第一颗led灯,或者“shut1”,关闭第一颗led灯。
操作成功后,系统回馈给主控手机信息“operatesuccessfully!
”,若失败则返回“operatefail,tryagain!
”。
单片机与TC35模块串口通信,设置串口波特率9600bps,8位数据位和1位停止位,无校验位。
在串口接收中断处理函数把TC35返回的内容拷贝到一个全局变量,以便后续判读,处理信息。
3.2程序流程图
图5程序流程图
3.3程序举例
单片机实现短信自动发送
进行短信发送的前提是短信内容的正确编码。
经过以上对短信发送过程的分析,可以通过单片机对其进行实现。
下面是实现程序例程:
函数名:
PDU_SMS()
功能:
发送短信
参数说明:
SMS_Center为短信中心号码11位
SMS_Telenum为短信接收方的号码11位
SMS_Context为短信的内容
--------------------------------------------------------------------------------*/
intPDU_SMS(char*SMS_Center,char*SMS_Telenum,
char*SMS_Context,charis_GB)
{
inti,j;
unsignedcharlen,time;
charlens[3];
time=0;
for(i=0;i<300;i++)PDU_Code[i]=PDU_t[i];
/*----------设置短信中心号码--------------*/
for(i=0,j=0;i { PDU_Code[6+(j++)]=SMS_Center[2*i+1]; PDU_Code[6+(j++)]=SMS_Center[2*i]; } PDU_Code[6+j++]='F';//在最后补上的F PDU_Code[6+j]=SMS_Center[strlen(SMS_Center)-1]; /*----------设置接收号码--------------*/ for(i=0,j=0;i { PDU_Code[26+(j++)]=SMS_Telenum[2*i+1]; PDU_Code[26+(j++)]=SMS_Telenum[2*i]; } PDU_Code[26+j++]='F'; PDU_Code[26+j]=SMS_Telenum[strlen(SMS_Telenum)-1]; /*----------设置短信内容长度--------------*/ if(is_GB==0) len=strlen(SMS_Context)*2; else len=strlen(SMS_Context); PDU_Code[44]=(len>>4)>9? (len>>4)+55: (len>>4)+48; PDU_Code[45]=(len&0x0f)>9? (len&0x0f)+55: (len&0x0f)+48; /*----------编码短信内容--------------*/ if(is_GB==0)//如果不是GB码,短信内容为ascii码字符串 { for(i=0,j=0;i { szzh16(SMS_Context[j++],lens); PDU_Code[46+i*4]='0'; PDU_Code[46+i*4+1]='0'; PDU_Code[46+i*4+2]=lens[0]; PDU_Code[46+i*4+3]=lens[1]; } PDU_Code[46+i*4]=0x1a; PDU_Code[46+i*4+1]=0xff; } else//短信内容为GB码,如果要使手机能够显示,改到UNICODE编码 { for(i=0,j=0;i { szzh16((int)SMS_Context[j++],lens); PDU_Code[46+i*2]=lens[0]; PDU_Code[46+i*2+1]=lens[1]; } PDU_Code[46+i*2]=0x1a; PDU_Code[46+i*2+1]=0xff; } /*---------------------------------------------*/ if(PDU_HandShake()) { do { //LCD_PutChn(5,96,"SS..."); //if(is_GB) PDU_EnablePDU(); if(is_GB==0) PDU_SetLength(Strlen(SMS_Context)*2); else PDU_SetLength(Strlen(SMS_Context)); PDU_Send(PDU_Code); //LCD_PutEng(5,96,"SS"); for(i=0;i<25;i++) delay(20000); sbuf[counter]=0; //LCD_PutNum16(5,96,time); counter=0; time++; } //判断是否发送成功,如果不成功继续发送,最多4次,如仍不成功,返回0 while(strpos(sbuf+strlen(sbuf)-20,'G')==-1&&time<4) if(strpos(sbuf+strlen(sbuf)-20,'G')==-1) return0; else return1;//成功的话返回0 } else { //LCD_PutEng(5,96,"LL"); sbuf[counter]=0; //LCD_PutEng(0,0,sbuf); counter=0; return0; } } 以上程序成功实现短信的发送,其中的一些函数限于篇幅可自行实现。 (6)单片机对短信的读取与解码 单片机可以通过AT指令对短信猫中的短信进行读取,并对读入的短信数据进行分析与解码。 读出的短信格式与发送时的短信编码大致是相同的。 下面给出相应的程序例程,读者可以在自行实验中对照验证。 1.读取某一条短信,并将其进行显示 函数名: LAD_SMS()(shortfor"LoadAndDisplaytheShortMessageS") 功能: 用户函数,读取第n条短信,并在LCD的(x,y)位置显示出来 unsignedcharLAD_SMS(unsignedcharn,unsignedcharx,unsignedchary) { unsignedchari,len,t; chartemp[5]; chartemp1[3]; //IN_Draw_BlankorBlackRect(0,20,30,72,0); szzh10(n,temp1); //将n转为相应的字符串,如n=21,则字符串为"21",用以与AT指令拼接。 t=85; clear_sbuf(); counter=0; send_s("AT+CMGR=");//AT+CMGR为读取短信的AT指令 send_s(temp1);//上面所得的字符串 send(0x0d); send(0x0a); for(i=0;i<10;i++)delay(10000);//等待读取完毕 sbuf[counter]=0;//在收到的数据末尾附加'\0' temp[0]=sbuf[23]; temp[1]=sbuf[24]; temp[2]=sbuf[25]; temp[3]=0; if(sbuf[25]! =0x0d)t++; for(i=0;i len=atoi(temp);//获取收到的短信内容长度 //LCD_PutEng(23,76,"(SM: "); //LCD_PutNum16(27,76,n); //LCD_PutEng(29,76,")"); if(len==0) { //LCD_PutEng(5,96,"EMP"); //LCD_PutChn(x,y,">短信空"); delay(50000); return0; } len-=20; if(len>90) { //LCD_PutEng(5,96,"MTL"); //LCD_PutChn(x,y,">短信太长"); delay(50000); return0; for(i=0;i { temp[0]=sbuf[t+2*i]; temp[1]=sbuf[t+2*i+1]; temp[2]=0; sbuf[i]=_hex_(temp); //收到的短信内容是内存方式的显示表示,转为十六进制数 } sbuf[i]=0; Analysis_Pro();//解码后的内容在sbuf中,此函数对其进行显示输出 //LCD_PutEng(x,y,inf_bw.Date); //LCD_PutEng(x,y,sbuf+29); delay(50000); clear_sbuf(); counter=0; return1; } 由于本文的宗旨在于讲解串口通信,因此,我们屏蔽图形用户界面的细节,制作一个简单的短信收发软件,它包含了控制短信终端的所有串口通信内容。 实际上,一个理想的短信收发软件的界面应类似于Outlook或Foxmail,包含收件箱、发件箱、已发送短信箱等内容,但是这些东西都与我们要介绍的串口通信无关 第四章调试结果 经实验调试,智能家电系统已经达到设计要求,通过GSM网络能够准确的控制各led灯的亮灭。 开机,系统发送准备好信号“Hi,Iamready! ”,主控手机发送“open1”、“shut1”,“open2”、“shut2”…能准确控制各led灯的亮和灭,“openA”则打开所有的灯,“shutA”则关闭所有的灯。 主控手机能收到系统的反馈信息“operatesuccessfully! ”。 图6系统实物图 图7开机系统向主控手机发送“Hi,Iamready.” 图8发送命令“open1”,打开第1路led 图9第一路led亮,操作成功,返回信息“OperateSuccessfully! ” 图10发送命令“open4”,打开第4路led 图11第4路led亮,操作成功,返回信息“OperateSuccessfully! ” 图12打开第8路led 图13关闭第8路led 图14关闭第8路led成功 图15打开全部led 图16打开全部led成功 图17短信读取函数 图18短信发送函数 调试过程中遇到的问题及解决 1、TC35的电流消耗指标: 1〉通话模式的峰值电流(TALK mode of peak),1.8A 2〉通话模式的典型电流(TALK mode),300mA @900MHz / 270mA @1800MHz 3〉空闲模式(IDLE mode)的消耗电流,10mA 4〉休眠模式(SLEEP mode)的消耗电流,3mA 5〉关机模式(Power Down mode)的消耗电流,50µA 2、关于LED灯显示的状态 SYNC引脚可以用来输出一个同步信号(synchronization signal),也可以在应用使来控制一个LED灯的输出状态。 : SYNC端通过一个三极管或门电路来控制LED。 一个简单的电路接法是: SYNC端通过一电阻接到NPN三极管(如9013)的基极,射极直接接地,集电极通过一个接限流电阻接到LED的负端,LED的正端接VCC。 LED的工作模式完全类同于同步信号,显示的是TC35的工作状态: 1〉LED灯灭,表示TC35电源关闭,处于休眠、报警或单纯的充电模式 2〉600 ms 亮 / 600ms 灭,表示未插入SIM卡,或者个人身份未登记/已注销,或者网络正在搜寻中,或者正在进行用户身份鉴定,或者网络注册正在进行中 3〉75ms 亮 / 3s 灭,表示网络注册成功(控制通道和用户交换信息完成),无来电 4〉LED灯亮,依据不同的呼叫类型: 声音呼叫,数据呼叫,在建立或者完毕时的状态。 2、关于VDD端: TC35正常工作时,VDD引脚输出信号的幅度(大约在开机后60ms产生): 2.9V/70mA,可作为外部应用。 空闲或者通话模式: VDDout = 2.9V ±3% @ 70mA Imax = 70mA;电源关闭模式: VDDout = 0V。 3、关于VBATT+端: TC35的工作电压输入端VBATT+,电压幅度为 3.3V-5.5V,Vtyp = 4.2V,最大电流Imax ≤ 2 A @ GSM天线回波损耗(return loss)≥ 6 dB。 必须注意: 最低工作电压不能低于3.3V,否则电压将会跌落,从而导致TC35停止工作。 由于VBATT+引脚的峰值电流为 2A ,一个GSM发射脉冲(transmission burst)可能引起相当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STC89C52 TC35 模块 智能家居 控制