您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于GSM和AVR单片机的智能家居控制系统
基于AVR单片机和GSM的短信网关成员:成星鲁得泂王龙马向超学院:物理学院指导老师:李茂奎2009年6月基于AVR单片机和GSM的短信网关1基于AVR单片机和GSM的短信网关物理学院成星鲁得泂王龙马向超摘要:本产品以AVR系列单片机ATMEGA16为控制核心,以GSM短信息发送与接收模块wavecome为辅助设备,来实现短信的发送与接收功能,进而实现远程的通信与控制。关键词:GSMATMEGA16单片机设计背景:随着3G网络的出现,以及3G手机的普及,无线通讯技术已经发展到相当成熟的水平,而无线控制也在各种场合极大的发挥着作用。GSM模块与单片机通信是GSM模块应用的一个核心技术。我们所设计的系统,利用单片机的串行口知识,来实现与GSM模块的通信,以对无线通讯和无线控制有一个更加清晰的认识。一、系统设计的目的、用途及功能:目的:利用单片机的串口功能,实现与GSM模块的通讯,进而实现短信的发送功能。用途与功能:可实现远程的无线通讯,也可增加扩展实现远程控制功能。二、硬件设计思想与原理图1.单片机的接口我们使用的是Atmel公司的AVR高速8位微控制器ATmega16。ATmega16芯片为40个引脚,内部集成了1K字节的RAM、512字节的EEPROM、16K字节的Flash以及2个UART串行接口等。由于采用了高性能的MCU,省掉了大量的外围器件,如外扩RAM、ROM存储器等,使硬件结构大大简化,提高了系统的可靠性。它与51单片机、PIC单片机相比具有一系列的优点:1:在相同的系统时钟下AVR运行速度最快;2:芯片内部的Flsah、EEPROM、SRAM容量较大;3:所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;5:每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;6:内部资源丰富,一般都集成AD、DA模数器、PWM、SPI、USART、TWI、I2C通信口、丰富的中断源等。基于AVR单片机和GSM的短信网关2目前支持AVR单片机编译器的语言主要有汇编语言、C语言、BASIC语言等。其中C编译器主要有CodeVisionAVR、AVRGCC、IAR、ICCAVR等,C语言编译器由于它具有功能强大、运用灵活、代码小、运行速度快等先天性的优点,使得它在专业程序设计上具有不可代替的地位。ATmega16芯片的引脚图如下:其中的PD0即为RXD引脚(RXD是USART的数据接收引脚),PD1即为TXD引脚(TXD是USART的数据发送引脚),引脚11即为GND接地。2.Max232电平转换芯片接口Max232芯片是Maxim公司生产的包括2路接受器和驱动器,适用于各种EIA—232C和v.28/v.24的通信接口。Max232芯片内部有一个电源电压变换器,可以把输入的+5伏电源电压变换成RS232C输出电平所需的正负10v电压。此芯片工作电压为+5V。3.GSM模块与单片机的硬件接口连接基于AVR单片机和GSM的短信网关3我们所用的GSM模块具有数据引出与接收口,而且支持与GSM短信息相关的AT控制指令(GSM-SMS-AT指令),GSM模块通过数据口以串行方式接收指令并向外输出数据。硬件连接相当简单,在数据口中找出RXD、TXD和GND引脚与单片机的串口对应连接即完成了硬件接口。注:GSM模块数据线是专为连接PC机9针串口而设计的,其信号电平为标准的RS232电平,而单片机的信号电平为TTL电平,因此只要经过电平转换,就可很方便的与模块相接。这里可以用开发板上的电平转换部分,也可以用Max232电平转换芯片。连接电路如图1所示。4.系统总体电路连接图三、软件设计系统1.GSM模块的软件接口及控制技术在我们设计的系统中,采用的是GSM通信模块为WAVECOM,该模块具备GSM无线通信的全部功能,并提供标准的USART串行接口,支持GSM07.05所定义的AT命令集的指令。模块的通讯全部采用AT+XXXX完成。基本的AT指令如下所述:短消息格式AT+CMGF选择短消息支持格式(TEXTorPDU)显示TEXT参数AT+CSDH显示当前TEXT模式下结果代码新消息提示AT+CNMI选择当有新的短消息来时系统提示方式读短消息AT+CMGR读取短消息列短消息AT+CMGL将存储的短消息列表发送短消息AT+CMGS发送短消息设置TEXT参数AT+CSMP设置在TEXT模式下条件参数删除短消息AT+CMGD删除保存的短消息根据GSM07.05的定义,SMS短信息的发送和接收模式共有三种:Block模式、基于AT命令的Text模式和基于AT命令的PDU模式。其中发送和接收中文或中/英文混合的短信息必须采用PDU模式,Text模式只支持传送英文及数字信息。由于Block模式的相关资料较少,PDU模式的编解码过程复杂,我们选择Text模式作为我们系统的通讯模式。基于AVR单片机和GSM的短信网关42.TEXT模式简介Text模式只支持传送英文及数字信息,但它的编码要比PDU模式简单很多。在TextMode下,发送及接收到的数据均以ASCII码的形式来表示。TEXT模式在信息传送时通过串口传递的是十六进制ASCII码。其USART通讯默认使用9600比特率,8位数据信息,无奇偶校验,有一位开始位和一位结束位。例如,我们要发送指令来读取第一条短信,使用命令:AT+CMGR=1;我们只需要通过串口发送十六进制数码:0x41,0x54,0x2b,0x43,0x4d,0x47,0x52,0x3d,0x31,0x0d即可。其基于AVR单片机和GSM的短信网关5中0x41是A对应的ASCII码,0x54是T对应的ASCII码,以此类推,只要将相应英文字母的ASCII码以十六进制的形式发送即可。3.GSM通讯模式说明(在实验中得出的一些结论)鉴于TEXT模式在运行中的易操作性,我们最终选择了这种模式作为我们GSM模块与单片机之间的通信方式。我们首先编写了一个串口通信程序,使数据能从单片机的接口发送出来(利用串口调试助手观察)。下一步定义各种要用的AT指令及短信内容,将这些指令通过串口传给GSM模块,经由模块识别来发送短信内容。我们经过反复测试,总结出来如下一些规律:①所有AT指令的指令符号、常数、TEXT数据包等都是以ASCII编码形式传送的,比如“A”的ASCII编码为41H,“T”的ASCII编码为54H,数字“0”的ASCII编码为30H等。②单片机控制GSM模块工作,必须把GSM模块的短信息工作模式设置为TEXT(只发英文和数字)格式,即通过指令AT+CMGF=1完成。指令可以写在程序里,也可通过电脑进行一次设置。以后使用时不需再次设置。③单片机向GSM模块发送每一条指令后,必须以回车符作为该条指令的结束,回车的ASCII编码为0DH。例如,单片机向GSM模块发送“AT+CMGF=0”这条指令,其ASCII编码序列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一个字节0DH就是回车符,表示该条指令结束,如果没有这个回车符,GSM模块将不识别这条指令。指令在程序中的定义方式为chara[]=AT\r\n;④GSM模块向单片机传送短信息内容时,其TEXT数据包的内容是以十六进制表示的数据,但并不是直接向单片机传递十六进制数据,而仍然是把每一位十六进制数以ASCII编码来发送。这样二个字节的十六进制数就变成4字节的ASCII码。但是TEXT数据包中的数据字节长度部分仍然是实际字节长度,而不是变成ASCII码的字节长度。⑤GSM模块执行指令的过程中,需要将短信内容凑够一定的字符数才往外发送,而且中间有一定时间的延时。基于AVR单片机和GSM的短信网关64.软件设计思想与流程图本系统旨在完成对SMS短信的发送功能。软件流程图如下:YY软件代码://ICC-AVRapplicationbuilder:2009-5-2011:21:23//Target:M16//Crystal:7.3728Mhz#includeiom16v.h#includemacros.hchara[]=AT\r\n;//定义AT联机指令charb[]=AT+CMGS=15866695679\r\n;//设置接受手机号码charc[]=someonehasbrokenintoyourhouse.someonehasbrokenintoyourhouse.someonehasbrokenintoyourhouse.someonehasbrokenintoyourhouse.someonehasbrokenintoyourhouse.\r\n;//定义短信内容voiddelay250(unsignedintk)/*延时函数*/{unsignedintj,i;for(i=0;ik;i++){for(j=0;j25;j++);}}voidport_init(void)//端口初始化{PORTA=0xFF;DDRA=0xFF;PORTB=0x00;GSM模块的初始化发送AT联机指令单片机初始化设置短消息中心号码发送短信内容基于AVR单片机和GSM的短信网关7DDRB=0x00;PORTC=0x00;//m103outputonlyDDRC=0x00;PORTD=0x03;DDRD=0x02;//PD0口接收数据,PD1口发送数据}//UART0initialize//desiredbaudrate:9600//actual:baudrate:9600(0.0%)voiduart0_init(void){UCSRB=0x00;//disablewhilesettingbaudrateUCSRA=0x00;UCSRC=BIT(URSEL)|0x06;UBRRL=0x2F;//setbaudrateloUBRRH=0x00;//setbaudratehiUCSRB=0x98;}voidinit_devices(void){//stoperrantinterruptsuntilsetupCLI();//disableallinterruptsport_init();uart0_init();MCUCR=0x00;GICR=0x00;TIMSK=0x00;//timerinterruptsourcesSEI();//re-enableinterrupts//allperipheralsarenowinitialized}voidUSART_TRANSMIT(chardata)//发送数据函数{while(!(UCSRA&(1UDRE)));UDR=data;}voidmain(){intn,u,m;init_devices();for(n=0;n4;n++)USART_TRANSMIT(a[n]);//发送AT指令delay250(20000);for(u=0;u21;u++)USART_TRANSMIT(b[u]);//设置接受手机号码delay250(20000);基于AVR单片机和GSM的短信网关8for(m=0;m180;m++)USART_TRANSMIT(c[m]);//发送短信内容delay250(20000);}四.系统测试过程以及测试数据1.测试仪器ICCAVR(FORIMAGECRAFTING),AVRSTUDIO4.0,JTAG,串口调试助手,ATMEGA16单片机等任何一个模块首次使用时,必须要测试其工作是否正常,由于其自带RS232接口,所以我们可以用PC机的串口调试软件进行调试。2、启动串口调试软件(见界面)1.串口调试软件有许多,可以使用任意一款软件,也可以使用WINDOWS自带的“超级终端。设置波特率19.2k,这是模块的默认波特率,首次连机可以从2400~57.6k不断测试,直到模有应答。2、发送“AT’AT回车基于AVR单片机和GSM的短信网关93、改变波特率“AT+IP
本文标题:基于GSM和AVR单片机的智能家居控制系统
链接地址:https://www.777doc.com/doc-28577 .html