1、基于AVR单片机和GSM的短信网关 基于AVR单片机和GSM的短信网关 摘要:本产品以AVR系列单片机ATMEGA16为控制核心,以GSM短信息发送与接收模块wavecome为辅助设备,来实现短信的发送与接收功能,进而实现远程的通信与控制。 关键词:GSM ATMEGA16单片机 设计背景:随着3G网络的出现,以及3G手机的普及,无线通讯技术已经发展到相当成熟的水平,而无线控制也在各种场合极大的发挥着作用。GSM模块与单片机通信是GSM模块应用的一个核心技术。我们所设计的系统,利用单片机的串行口知识,来实现与GSM模块的通信,以对无线通
2、讯和无线控制有一个更加清晰的认识。 一、系统设计的目的、用途及功能: 目的:利用单片机的串口功能,实现与GSM模块的通讯,进而实现短信的发送功能。 用途与功能:可实现远程的无线通讯,也可增加扩展实现远程控制功能。 二、硬件设计思想与原理图 1.单片机的接口 我们使用的是Atmel公司的AVR高速8位微控制器ATmega16 。ATmega16芯片为40个引脚,内部集成了1K字节的RAM、512字节的EEPROM、16K字节的Flash以及2个UART串行接口等。由于采用了高性能的MCU,省掉了大量的外围器件,如外扩RAM、ROM存储器等,使硬件结构大大简化,提高了系统的可靠性。
3、 它与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单片机编译器的语言主要有汇编语言、C语言、BASI
4、C语言等。其中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、电源电压变换器,可以把输入的+5伏电源电压变换成RS232C输出电平所需的正负10v电压。此芯片工作电压为+5V。 3.GSM模块与单片机的硬件接口连接 我们所用的GSM模块具有数据引出与接收口,而且支持与GSM 短信息相关的 AT 控制指令(GSM-SMS-AT 指令),GSM模块通过数据口以串行方式接收指令并向外输出数据。硬件连接相当简单,在数据口中找出RXD、TXD 和 GND 引脚与单片机的串口对应连接即完成了硬件接口。 注: GSM模块数据线是专为连接PC 机9 针串口而设计的,其信号电平为标准的RS232 电平,而单片机的信号电平为TTL电平, 因此只要经过
6、电平转换,就可很方便的与模块相接。这里可以用开发板上的电平转换部分,也可以用Max232电平转换芯片。 连接电路如图 1 所示。 4.系统总体电路连接图 三、软件设计系统 1.GSM模块的软件接口及控制技术 在我们设计的系统中,采用的是GSM通信模块为WAVECOM,该模块具备GSM无线通信的全部功能,并提供标准的USART串行接口,支持GSM 07.05所定义的AT命令集的指令。 模块的通讯全部采用AT+XXXX完成。基本的AT指令如下所述: 短消息格式 AT+CMGF 选择短消息支持格式(TEXT or PDU) 显示TEXT参数 AT+CSDH 显示
7、当前TEXT模式下结果代码 新消息提示 AT+CNMI 选择当有新的短消息来时系统提示方式 读短消息 AT+CMGR 读取短消息 列短消息 AT+CMGL 将存储的短消息列表 发送短消息 AT+CMGS 发送短消息 设置TEXT参数 AT+CSMP 设置在TEXT模式下条件参数 删除短消息 AT+CMGD 删除保存的短消息 根据GSM 07.05的定义,SMS短信息的发送和接收模式共有三种:Block模式、基于AT命令的Text模式和基于AT命令的PDU模式。 其中发送和接收中文或中/英文混合的短信息必须采用PDU模式,Text模式
8、只支持传送英文及数字信息。由于Block模式的相关资料较少,PDU模式的编解码过程复杂,我们选择Text模式作为我们系统的通讯模式。 2. TEXT模式简介 Text模式只支持传送英文及数字信息,但它的编码要比PDU模式简单很多。 在Text Mode下,发送及接收到的数据均以ASCII码的形式来表示。TEXT模式在信息传送时通过串口传递的是十六进制ASCII码。其USART通讯默认使用9600比特率,8位数据信息,无奇偶校验,有一位开始位和一位结束位。 例如,我们要发送指令来读取第一条短信,使用命令:AT+CMGR=1;我们只需要通过串口发送十六进制数码:0x4
9、1,0x54,0x2b,0x43,0x4d,0x47,0x52,0x3d,0x31,0x0d 即可。其中0x41是A对应的ASCII码,0x54是T对应的ASCII码,以此类推,只要将相应英文字母的ASCII码以十六进制的形式发送即可。 3.GSM通讯模式说明(在实验中得出的一些结论) 鉴于TEXT模式在运行中的易操作性,我们最终选择了这种模式作为我们GSM模块与单片机之间的通信方式。我们首先编写了一个串口通信程序,使数据能从单片机的接口发送出来(利用串口调试助手观察)。下一步定义各种要用的AT指令及短信内容,将这些指令通过串口传给GSM模块,经由模块识别来发送短信内容。我们经过反复测
10、试,总结出来如下一些规律: ① 所有AT 指令的指令符号、常数、TEXT 数据包等都是以ASCII 编码形式传送的, 比如 “A ” 的ASCII 编码为41H,“T”的ASCII 编码为54H,数字“0”的 ASCII编码为30H 等。 ② 单片机控制GSM模块工作,必须把GSM模块的短信息工作模式设置为TEXT(只发英文和数字)格式,即通过指令 AT+CMGF=1 完成。指令可以写在程序里,也可通过电脑进行一次设置。以后使用时不需再次设置。 ③ 单片机向GSM模块发送每一条指令后,必须以回车符作为该条指令的结束,回车的ASCII 编码为0DH。例如,单片机向GSM模块发送
11、AT+CMGF=0” 这条指令,其ASCII编码序列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、3 0 H、0 D H”,最后一个字节0DH 就是回车符,表示该条指令结束,如果没有这个回车符,GSM模块将不识别这条指令。指令在程序中的定义方式为 char a[]="AT\r\n"; ④GSM模块向单片机传送短信息内容时,其TEXT数据包的内容是以十六进制表示的数据, 但并不是直接向单片机传递十六进制数据,而仍然是把每一位十六进制数以A S C I I 编码来发送。这样二个字节的十六进制数就变成4 字节的ASCII码。但是TEXT数据包中的数据字节长度部分仍然是实
12、际字节长度,而不是变成ASCII码的字节长度。 ⑤GSM模块执行指令的过程中,需要将短信内容凑够一定的字符数才往外发送,而且中间有一定时间的延时。 4.软件设计思想与流程图 本系统旨在完成对SMS短信的发送功能。软件流程图如下: 单片机初始化 GSM模块的初始化 发送AT联机指令 Y 设置短消息中心号码 发送短信内容 Y 软件代码: //ICC-AVR application builder : 2009-5-20 11:21:23 // Target : M16 // Crystal:
13、 7.3728Mhz
#include
14、 broken into your house.\r\n"; //定义短信内容
void delay250(unsigned int k) /*延时函数*/
{unsigned int j,i;
for (i=0;i 15、 PORTD = 0x03;
DDRD = 0x02; //PD0口接收数据,PD1口发送数据
}
//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
void uart0_init(void)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x2F; //set baud rate lo
UBRRH 16、 = 0x00; //set baud rate hi
UCSRB = 0x98;
}
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
uart0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peri 17、pherals are now initialized
}
void USART_TRANSMIT(char data) //发送数据函数
{
while(!(UCSRA&(1< 18、
for(m=0;m<180;m++)USART_TRANSMIT(c[m]); //发送短信内容
delay250(20000);
}
四.系统测试过程以及测试数据
1.测试仪器
ICCAVR( FOR IMAGE CRAFTING),AVR STUDIO 4.0,JTAG,串口调试助手,ATMEGA16单片机等
任何一个模块首次使用时,必须要测试其工作是否正常,由于其自带RS232接口,所以我们可以用PC机的串口调试软件进行调试。
2、启动串口调试软件(见界面)
1.串口调试软件有许多,可以使用任意一款软件,也可以使用WINDOWS自带的 19、超级终端"。设置波特率19.2k,这是模块的默认波特率,首次连机可以从2400~57.6k不断测试,直到模有应答。
2、发送“AT"’
AT 回车
3、改变波特率“AT+IPS=XXXX"
模块的默认波特率是19.2k,实际使用时,可以改成9600或38.4K,方法如下:
AT+IPR=9600 回车
4、短信模式的设置
(GSM模块的短信模式有2种。第1种是:TEXT模式;第2种是:PDU模式。PDU模式可以采用unicode编码发送英文、汉字。但合成PDU码比较复杂,而TEXT模式只能发送英文,但无须编码。实际使用可以采用TEXT模式。
设置如 20、下:
AT+CMFG=1 回车
5、短信模式简介
SMS是由Etsi所制定的一个规范(GSM 03.40和GSM 03.38)。当使用7-bits编码的时候它可以发送最多160个字符;8-bit编码(最多140个字符)。通常无法直接通过手机显示;通常被用来作为数据消息,例如:smart messaging中的图片和铃声和OTA WAP设置。16-bit信息(最多70个字符)被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。一个以class 0开头的16-bit的文本信息将在某些手机上作为Flash SMS显示(闪烁的SMS和警告SMS)。
21、有两种方式来发送和接收SMS信息:使用文本模式或者使用PDU(protocol description unit)模式。文本模式(可能某些手机不支持)实际上也是一种PDU编码的一种表现形式。在显示SMS信息,可能使用不同的字符集和不同的编码方式。
6、短信读取方法
AT+CMGR=X回车
如果有短信息,短信模块回应:
AT+CMGR=1
+CMGR:"REC UNREAD","13307496548",,"09/05/10,22:24:32+02
testOK
OK
短信息分析:
“test OK"就是短信息内容。
短信息的存储容量与Ic卡有关,序号从1-N。
22、
REC UNREAD":代表短信息未读过。
REC READ" :已读过。
13307496548" :接收的手机号码。
09/05/10,22:24:32+02":短信息发送的时间。
无短信息,模块回应:
AT+CMGR=3
+CMGR:0,,0
7、短信的删除方法
AT+CMGD=1回车
8、短信的发送方法
短信息的发送分成两步:
1:发送接收的手机号码,等待应答:“>"
AT+CMGS="13307496548"回车(目的地址)
模块回应:
AT+CMGS="13307496548" 23、>
2: 输入短信息的内容(只能是英文):Test 回车
下图为用PC机控制GSM的过程(通过串口调试助手)
3. 将PC机输出的控制命令转化成单片机输出的指令
1.先定义AT指令字符串。
char a[]="AT\r\n";
char b[]="AT+CMGS=15866695679\r\n";
char c[]="someone has broken into your house.。someone has broken into your house.。someone 24、 has broken into your house.。someone has broken into your house.。someone has broken into your house.\r\n";
2.串口通信程序
void USART_TRANSMIT(char data) //发送数据函数
{
while(!(UCSRA&(1< 25、
delay250(2000);
for(u=0;u<21;u++)USART_TRANSMIT(b[u]);
delay250(2000);
for(m=0;m<180;m++)USART_TRANSMIT(c[m]);
}
3.测试方法
我们按照如下的思路完成作品,因为单片机就是一个“微型化的计算机”,它将计算机的主要功能集成在一块芯片上,成为一个控制器。因此,我们先用计算机代替单片机,最后再将计算机的操作功能写进单片机,完成系统设计。
首先是计算机与GSM模块的通讯。此部分功能的实现需要用到“串口调试助手”这块软件(这里强烈推荐一下这款软件,若要用到串口功能,这 26、款软件是必不可少的),这可以很直观的看到到底从串口传出了什么数据。其中这一部分内容要用到AT指令,具体用法与格式参看论文,这里不详述。
其次是单片机与计算机的通讯,将程序写进单片机后,将单片机的串口与计算机的串口相连,点击运行,就可以从串口调试助手中看到从单片机中是否串出数据,以及数据的格式正确与否。
最后,将单片机与GSM模块直接相连,通过串出指令控制模块发送短信,模块的响应时间以及指令的格式问题需要在程序中调节优化。
4.测试结果总结
经实验验证,实现了通过单片机控制GSM Modem 进行短信息的发送。在发送过程中,有时会出现响应过慢的或发送内容不全情况,后经修改程序中的延时函数,以及对GSM 模块初始化后,问题解决,系统工作情况良好。
四. 成员分工及完成情况
成星 程序的编写与调试 论文修正
鲁得泂 程序的编写与调试 论文编写 开题报告与总结
王龙 电路板的焊接 硬件连接 ppt制作
马向超 html网页 进度报告
五. 课程设计使用资源
Atmega16单片机,GSM模块,串口线,7.3728MHz外部晶振,导线若干。
六.参考文献
[1] WAVECOM——AT COMMONDS
[2] 《AVR单片机嵌入式系统原理与应用实践》 (马潮)
[3] AVR323数据手册
11






