gsm模块电路图
1 引言
随着通信技术的发展,基于移动通信网络的服务功能正向工业控制和遥控领域扩展。为了适应这种需要,西门子公司推出新一代TC35i型无线通信GSM模块,基于该模块的短消息功能,可以快速、安全、可靠地实现用户信息处理等功能,特别适用于控制中心与终端设备距离很远或不便采用有线通信介质的场合。该系统由控制中心和若干显示屏组成,控制中心实时将最新信息发送到各显示屏,构成控制中心与显示屏端的通信链路。
2 TC35i与单片机的硬件接口电路
TC35i可以快速安全可靠地实现系统方案中的数据、语音传输、短消息服务和传真。模块的工作电压为33 V~55 V,可以工作在900 MHz~1800MHz。模块有AT命令集接口,支持文本和PDU模式的短消息。此外,该模块还具有电话薄、多方通话、漫游检测等功能,常用工作模式有省电模式、I-DLE和TALK等模式。通过40引脚的ZIF连接器实现电源连接、指令、数据、语音信号及控制信号的双向传输。通过ZIF连接器及50 Ω的天线连接器可分别连接SIM卡支架和天线。
在控制系统中,采用AT89C51型单片机同时扩展RAM6264用于存放与显示屏对应的要显示的128 B数据以及从GSM模块读取的信息。为了增大存放数据的容量,本设计采用了AM29F040型FlashMemory(512 KB),它存储容量大、集成度高、成本低,具有灵活的读写性和较好的数据非易失性。它有15条地址线,其中低8位地址由P0口经74HC373锁存后提供,高11位地址由P2口与P14、P15、P16共同提供。8位数据由PO口直接提供。
采用动态扫描方式,用74HCl54及74HC595进行16行的逐行扫描,利用人眼的视觉暂留效果,可以节省I/O资源,减少发热量。
3 工作原理
如图l所示,在接收终端,单片机通过读取TC35i模块以短消息形式承载的数据,经处理后把它显示到 LED显示屏上。因为短信息中的汉字仅仅是1个编码,单片机应用系统将编码变为汉字点阵数据,必须配置汉字字库。因此,设计单片机应用系统时,控制中心编辑PDU数据包数据,采用自定义数据方式。其中,代表汉字的数据直接用汉字的机内码,系统配置的字库为GB-2312编码的汉字库,即区位码汉字库。下面通过对存储在手机中的待发信息的分析来介绍SMSPDU的数据格式。首先,用手机写一条信息,发送手机号码为13605696031,信息内容为 “HelloWorld!”。通过执行AT+CMGL=2可以读出此条信息。 操作过程如下(斜体字符为响应信息,{}内为注释): 单片机与手机的软件接口其实就是单片机通过与GSM短信息有关的AT指令控制手机的技术,如读取手机的短信息内容、删除短信息内容、列出手机中还未读的短消息等。执行l条指令,并非某些资料介绍的那么简单,事实上,指令的执行过程需要单片机与手机交互应答完成,每一次发送或接收的字节数有严格的规定,二者必须依据这些规定实现数据交换,否则,通信就是失败的。表l列出AT指令执行过程。 所有AT指令的指令符号、常数、PDU数据包等都以ASCⅡ编码形式传送,比如“A”的ASCⅡ编码为41H,“T”的ASCⅡ编码为54H,数字“0”的ASCⅡ编码为30H等。 单片机控制手机工作,必须把手机的短信息工作模式设置为PDU格式,即通过指令AT+CMGF=0完成。 单片机向手机发送每l条指令后,必须以回车符作为该条指令的结束,回车的ASCⅡ编码为ODH,例如单片机向手机发送“AT+CMGF=0"指令,其ASCⅡ编码列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后1个字节0DH就是回车符,表示该条指令结束,如果没有这个回车符,手机将不识别这条指令。 当手机接收到一条完整的AT指令后,手机并不立即执行这条指令,而是首先把刚才接收到的AT指令的全部ASCⅡ编码序列全部反发送出来(含ODH),其次发送1个回车符和换行符的ASCⅡ编码即0DH和OAH,最后执行该条指令。 手机向单片机发送短信息内容时,其PDU数据包的内容是16进制表示的数据,但并不是直接向单片机传递16进制数据,而是仍然把每一位16进制数以ASCⅡ编码来发送,这样,2个字节的16进制数就变成4个字节的ASCⅡ码。但是,PDU数据包中的数据字节长度部分仍然是实际字节长度,而不是变成ASCⅡ码的字节长度,这在编程时应特别注意,否则,接收的数据就不完整。单片机接收到PDU数据包数据后,必须将其恢复成16进制数据,其算法如下: 设a为接收的ASCⅡ码.b为转换后的16进制数,那么,如果a<39H,则b=a-30H;如果a>39H,则b=a-30H-07H。最后把前后2个数合并为1个字节。 你在去核实下 !应该是 完全的对 ! 谢谢采纳!
1wifi热点初始密码配的路由器说明书上有写;
2wifi热点名称是用户是可以自己设置的,一般密码要设置wifi热点的人才知道;
3如果要知道无线热点路由器上密码,除了问设置者,其他任何破解方法都是违法的
GSM模块具有发送SMS短信,语音通话,GPRS数据传输等基于GSM网络进行通信的所有基本功能。简单来讲,GSM模块加上键盘、显示屏和电池,就是一部手机。
开发人员使用ARM或者单片机通过RS232串口与GSM模块通信,使用标准的AT命令来控制GSM模块实现各种无线通信功能,例如:发送短信,拨打电话,GPRS拨号上网等。基于GSM模块产品的开发往往都是基于ARM平台,使用嵌入式系统进行开发。有些GSM模块具有“开放内置平台”功能,可以让客户将自己的程序嵌入到模块内的软件平台中。
早期的GSM模块主要是供手机厂使用,手机厂直接购买模块,配上外围的器件就是可以生产一部手机。GSM模块解决了手机设计中复杂的射频发送和基带处理问题,并提供了标准的通信接口,厂商不用再从底层的芯片级开始进行手机的设计,缩短了设计周期。5年前,国内的手机厂家几乎都是购买国外的成品GSM模块进行二次开发生产手机的,近几年,随着国内手机设计公司的逐渐成熟,手机厂家才摆脱对GSM模块的依赖,转为直接从芯片级入手生产手机。
由于工作年限、环境要求等因素,目前,GSM模块依然在广泛的工业应用领域使用,在各行各业都能看到GSM模块应用的产品。例如,在车载监控领域,使用GSM模块将车辆行驶的GPS数据传输回车辆管理中心;在电力、水务系统,通过GSM模块实现了远程智能抄表,可以实时监控用户的用电和用水量;在测绘行业,为很多偏僻的测绘点安装了GSM模块实现了实时的监控,不必再人工收集数据; 在家庭,可以安装无线报警系统,一旦发生火情或盗窃行为,可以立即通知户主和报警;在国外,很多老人小孩带了个人跟踪器,防止老人和小孩走失或意外发生,里面也是集成了GSM模块。可以说,随着GSM的网络建设的完善,GSM模块的应用范围也越来越广。
把单片机和GSM模块连接,直接把异步串行通信口的TX和RX连上就可以,别忘了地线。但是需要注意几点:
1、不同的单片机有不同的电压,一般GSM模块的输入输出电平是285V,51系列的电平是5V,一般在51输出的TX那根线上串联2K的电阻,基本上可以使用。如果是33V的单片机,这个电阻就可以很小,几百欧姆就可以。
2、GSM模块本身的电源和SIM卡电路很麻烦,首先是大多数GSM模块都是用FPC40的接口,排线的间距只有零点五毫米,而且是塑料外壳,不好焊接。焊不好的话工作不稳定。
其次是电源部分较麻烦,GSM模块的发射电流较大,最大瞬间电流2A。所以电源部分一般要用LM2576这种大电流的DC-DC变换器来提供4V的电压,DCDC电路设计本身就很不容易,个人应用比较难,需要做电路板。
我以前编写的51单片机通过SIM300模块用GPRS把采集到的温度发送到设定的TCP服务器,你可以看看,发短信很简单,根据AT指令修改一下前面的代码即可。
/8位共阳数码管,18b20接P3^3,110592晶振/
#include<reg52h>
#include<intrinsh>
#define uchar unsigned char
#define uint unsigned int
uchar th,tl;//存放采集温度高8位,低8位
uchar temp_int,temp_dot;//存放转换后的温度整数部分和小数部分
sbit dq=P3^3; //18b20数据接口
bit stat_18b20; //18b20初始化返回状态
uchar ctrl_z=0x1a;//GPRS数据发送结束标识ctrl+z键16进制码
uchar ATCLPORT[]="AT+CLPORT=\"TCP\",\"5256\"\r"; //设置本地GPRS通信协议以及端口号
uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"121233142158\",\"6000\"\r"; //连接TCP服务器
uchar ATCIPSEND[]="AT+CIPSEND\r"; //启动数据发送命令
void uart_init(); //串口初始化
void delayus(uint xus); //延时微秒
void delayms(uint xms); //延时毫秒
init_18b20(); //18b20初始化
readchar(); //读一个字节
void writechar(uchar dat); //写一个字节
void get_temp(); //取温度
void temp_convert(); //转换温度
void send_string(uchar gprs_string); //给GPRS模块发送字符串
void send_char(uchar);
void gprs_init(); //GPRS模块初始化
void send_temp(); //通过GPRS模块发送温度
//--------------下面为主函数----------------
void main(void)
{
uart_init();
gprs_init();
while(1)
{
get_temp();
temp_convert();
send_temp();
}
}
void uart_init()
{
TMOD=0X20;
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
//--------------下面为延时操作函数----------------
void delayus(uint xus)
{
for(;xus>0;xus--);
}
void delayms(uint xms)
{
uint i;
uchar j;
for(i=0;i<xms;i++)
for(j=0;j<112;j++);
}
//--------------下面为DS18B20操作函数----------------
init_18b20()
{
stat_18b20=1;
dq=1;
delayus(5);
dq=0;
delayus(50);
dq=1;
delayus(5);
stat_18b20=dq;
delayus(60);
dq=1;
return(stat_18b20);
writechar(0x4e);
writechar(0x02);
writechar(0x01);
writechar(0x7f);
}
readchar()
{
uchar i,dat;
for(i=8;i>0;i--)
{
dq=0;
dat=dat>>1;
dq=1;
if(dq)
dat=dat|0x80;
delayus(4);
}
return(dat);
}
void writechar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
delayus(5);
dq=1;
dat=dat>>1;
}
}
void get_temp()
{
init_18b20();
if(stat_18b20==0)
{
writechar(0xcc);
writechar(0x44);
delayms(50);
init_18b20();
writechar(0xcc);
writechar(0xbe);
tl=readchar();
th=readchar();
}
else
{
; //错误处理模块
}
}
void temp_convert()
{
temp_int=((th&0x07)<<4)|((tl&0xf0)>>4);
temp_dot=tl&0x0f;
}
//--------------下面为SIM300操作函数----------------
void send_string(uchar gprs_string)//指令字符串发送指令
{
while(gprs_string)
{
SBUF = gprs_string;
while(TI==0);
TI=0;
gprs_string++;
}
}
void send_char(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void gprs_init()
{
send_string(ATCLPORT);
delayms(1000);
send_string(ATCIPSTART);
delayms(1000);
}
void send_temp()
{
send_string(ATCIPSEND);
send_char(temp_int);
send_char(temp_dot);
send_char(ctrl_z);
delayms(1000);
}
0条评论