GMS短信模块编程汇总.docx
- 文档编号:29081778
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:20
- 大小:19.24KB
GMS短信模块编程汇总.docx
《GMS短信模块编程汇总.docx》由会员分享,可在线阅读,更多相关《GMS短信模块编程汇总.docx(20页珍藏版)》请在冰豆网上搜索。
GMS短信模块编程汇总
概述
GPS/GPRS/GSM是基于SIMCOM公司SIM548C设计的一款结合GSM/GPRS&GPS功能为一体的通信模块。
可通过GPS功能定位,通过GSM短信、GSM打电话、GPRS的TCP/IP协议将GPS数据或者其他数据信息发送到远端。
兼容Arduino接口规格。
注意:
下面程序适用于GPS/GPRS/GSM第二版本。
性能描述
GSM/GPRS指标
∙四频GSM850/900/1800/1900MHz
∙GPRSmulti-slotClass10标准
∙GPRSmobilestationClassB标准
∙满足GSM2/2+标准
-Class4(2W@GSM850/900MHz)
-Class1(1W@GSM1800/1900MHz)
∙AT命令控制(GSM07.07,07.05和SIMCom增强型AT命令集)
∙支持STK
∙支持低功耗模式
∙支持电压范围:
3.4…4.5V
∙正常工作温度:
–30°C至+80°C
∙受限运作温度:
–40°C至–30°C和+80°C至+85°C
∙存储温度:
–45°C至+90°C
GPS指标
∙接收20个通道,L11575.42MHz,C/A代码1,023MHz芯片率
∙准确定位2.5米CEP
-无SA/Velocity0.1m/s
-无SA/Time1μsGPS同步时间
∙DGPS/SBAS位置:
2.0CEP
∙DateWGS-84
∙捕获时间率(95%TTFF首个当地位置)
-热启时间:
<1秒,平均,室外
-温启时间:
35秒,平均,室外
-冷启时间:
35秒,平均,室外
∙支持AGPS
∙工作电压:
3.3VDC±5%
∙低功耗:
3.3V时,160mW
∙协议
-NMEA-0183(默认)
-SiRFbinary
-RTCMSC-104
∙晶体振荡器(TCXO),频率稳定的温度±0.5ppm
∙Memory:
4Mbflashand1MbSRAM
模块特性
∙通过串口执行AT命令
∙GSM串口波特率:
300,1200,2400,4800,9600,19200,38400,57600,115200bps(默认115200bps)
可通过AT命令更改波特率
GSM自动波特率:
4800,9600,19200,38400,57600,115200bps
∙通过串口输出GPS定位信息
∙GPS串口波特率:
1200,2400,4800,9600,19200,38400,57600,115200bps(默认4800bps)
∙支持6针翻盖式SIM卡座
∙支持耳机、麦克接口
∙支持4*4矩阵键盘接口
∙模块工作电压:
5V
∙模块尺寸:
长度82mm,宽度70mm
∙模块重量:
引脚定义
图片
按键切换功能说明
控制端口PD345可更改,换成别的IO
GPS功能
GPS部分与PC机通讯
GPS数据通过串口输出到PC机
∙硬件连接
主控板选用Arduino328作为例子说明。
将模块插在328板上,USB线一端接到328,另一端接到PC。
(同时利用USB线给328板供电,不外接电源)
硬件连接图片
∙下载GPS串口使能程序
S1开关拨到EN,即使能下载程序模式,下载下面程序:
voidsetup()
{
//设置引脚为输出模式
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
}
voidloop()
{
digitalWrite(3,HIGH);//关闭GSM的TX、RX
digitalWrite(4,LOW);//使能GPS的TX、RX
}
∙通讯模式选择
S1开关拨到Dis,不使能下载程序模式,即使能模块通讯模式
S2开关拨到USB,即选择串口与USB接口通讯
∙打开串口调试软件
选择波特率:
4800bps;数据位:
8;停止位:
1;校验位:
None
选择COM口,打开串口
∙打开GPS电源,输出GPS定位信息
S3开关拨到ON,给GPS供电,稍后在串口调试软件即可看到GPS数据
串口助手输出数据图片
注意:
必须使模块GPS天线露在室外(在室内置于窗台处即可),GPS才能接收到信号,输出GPS定位数据。
GPS部分与Arduino通讯
∙硬件连接
同上面的硬件连接
∙下载程序
S1开关拨到EN,即使能下载程序模式,下载下面程序:
doubleDatatransfer(char*data_buf,charnum)//数据转换:
将字符型数据转换为浮点型数据
{//*data_buf:
要转换的数组;num:
小数点的个数
doubletemp=0.0;
unsignedchari,j;
if(data_buf[0]=='-')//负数的情况
{
i=1;
//数组中的字符型数据转换成整数并累加
while(data_buf[i]!
='.')
temp=temp*10+(data_buf[i++]-0x30);
for(j=0;j temp=temp*10+(data_buf[++i]-0x30); //将转换后的整数转换成浮点数 for(j=0;j temp=temp/10; //转换成负数 temp=0-temp; } else//正数情况 { i=0; while(data_buf[i]! ='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j temp=temp*10+(data_buf[++i]-0x30); for(j=0;j temp=temp/10; } returntemp; } charID()//接收语句的ID { chari=0; charvalue[6]={ '$','G','P','G','G','A'};//要接收的GPS语句的ID内容 charval[6]={ '0','0','0','0','0','0'}; while (1) { if(Serial.available()) { val[i]=Serial.read();//接收串口的数据 if(val[i]==value[i])//对比是否是正确的ID { i++; if(i==6) { i=0; return1;//接收完毕返回1 } } else i=0; } } } voidcomma(charnum)//接收逗号字符 { charval; charcount=0;//对接收到的逗号计数 while (1) { if(Serial.available()) { val=Serial.read(); if(val==',') count++; } if(count==num)//数目正确结束接收 return; } } voidUTC()//获取时间信息 { chari; chartime[9]={ '0','0','0','0','0','0','0','0','0' }; doublet=0.0; if(ID())//语句正确 { comma (1);//接收1个逗号 //读取语句第一个逗号后的数据 while (1) { if(Serial.available()) { time[i]=Serial.read(); i++; } if(i==9) { i=0; t=Datatransfer(time,2);//转换成浮点型数据 t=t+80000.00;//将时间转换成北京时间 Serial.println(t);//输出时间数据 return; } } } } voidlatitude()//获取纬度信息 { chari; charlat[10]={ '0','0','0','0','0','0','0','0','0','0' }; if(ID()) { comma (2); //读取语句第二个逗号后的数据 while (1) { if(Serial.available()) { lat[i]=Serial.read(); i++; } if(i==10) { i=0; Serial.println(Datatransfer(lat,5),5);//输出纬度数据 return; } } } } voidlat_dir()//获取纬度方向信息 { chari=0,val; if(ID()) { comma(3); //读取语句第三个逗号后的数据 while (1) { if(Serial.available()) { val=Serial.read(); Serial.println(val,BYTE);//输出方向信息 i++; } if(i==1) { i=0; return; } } } } voidlongitude()//获取经度信息 { chari; charlon[11]={ '0','0','0','0','0','0','0','0','0','0','0' }; if(ID()) { comma(4); //读取语句第四个逗号后的数据 while (1) { if(Serial.available()) { lon[i]=Serial.read(); i++; } if(i==11) { i=0; Serial.println(Datatransfer(lon,5),5);//输出经度数据 return; } } } } voidlon_dir()//获取经度方向信息 { chari=0,val; if(ID()) { comma(5); //读取语句第五个逗号后的数据 while (1) { if(Serial.available()) { val=Serial.read(); Serial.println(val,BYTE);//输出经度方向 i++; } if(i==1) { i=0; return; } } } } voidaltitude()//获取海拔信息 { chari,flag=0; charalt[8]={ '0','0','0','0','0','0','0','0' }; if(ID()) { comma(9); //读取语句第九个逗号后的数据 while (1) { if(Serial.available()) { alt[i]=Serial.read(); if(alt[i]==',') flag=1; else i++; } if(flag) { i=0; Serial.println(Datatransfer(alt,1),1);//输出海拔数据 return; } } } } voidsetup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); digitalWrite(3,HIGH);//关闭GSM的TX、RX digitalWrite(4,LOW);//使能GPS的TX、RX Serial.begin(4800);//设置波特率 Serial.println("$GPGGAstatementinformation: "); } voidloop() { while (1) { Serial.print("UTC: "); UTC(); Serial.print("Lat: "); latitude(); Serial.print("Dir: "); lat_dir(); Serial.print("Lon: "); longitude(); Serial.print("Dir: "); lon_dir(); Serial.print("Alt: "); altitude(); Serial.println(''); Serial.println(''); } } 程序说明: Arduino328读取模块GPS定位信息中的GPGGA字段信息,为了验证读取的信息,328将读取到的信息输出到PC机。 其他字段信息的读取方法类似。 ∙打开GPS电源,GPS开始定位 S3开关拨到ON,给GPS供电。 ∙通讯模式选择 S1开关拨到Dis,不使能下载程序模式,即使能模块通讯模式 S2开关拨到USB,即选择串口与USB接口通讯 ∙打开串口调试软件 选择波特率: 4800bps;数据位: 8;停止位: 1;校验位: None 选择COM口,打开串口 稍后在串口调试软件即可看到GPS信息中的GPGGA字段信息。 NMEA-0183语句字段 GPS部分默认的协议: NMEA-0183 上面输出的GPS定位信息,都是NMEA-0183语句字段,每个字段详细解释请参考: 常用NMEA-0183语句字段定义解释 GSM功能 GSM与PC机通讯 ∙硬件连接 将SIM卡插到模块的卡槽内 图片 将模块插在328板上,USB线一端接到328,另一端接到PC。 5节电池组给328板供电 硬件连接图片 注意: 必须外接电源,模块GSM部分工作实际瞬态电流可达2A,USB供电无法满足。 ∙下载GSM串口使能及GSM开机程序 S1开关拨到EN,即使能下载程序模式,下载下面程序: voidsetup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(5,OUTPUT); pinMode(4,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } voidloop() { digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX } 程序功能: 让GSM模块开机,使能GSM模块通讯 此时模块上面的STAT灯保持亮,说明GSM模块开机 开机后起初NET灯以64mson/800msoff闪烁,即没有找到网络; 稍后NET灯以64mson/3000msoff闪烁,即找到网络。 ∙通讯模式选择 S1开关拨到Dis,不使能下载程序模式,即使能模块通讯模式 S2开关拨到USB,即选择串口与USB接口通讯 S3开关拨到off,即关闭GPS ∙打开串口调试软件 选择波特率: 115200bps;数据位: 8;停止位: 1;校验位: None 选择COM口,打开串口 将串口调试软件面板上,发送新行框内打√ ∙同步通讯 在串口调试软件字符串输入框输入: AT 点击发送,即发送AT到模块GSM GSM会返回OK,显示在软件接收区,即GSM模块与PC机通讯成功 ∙发短信 输入AT命令: AT+CMGF=1(设置短消息的格式为文本格式)点击发送 AT+CMGS="XXXXX"(xxxx为目的地的电话号码)点击发送 出现“>”,在后面输入短信内容,输入完成后按‘ctrl+z’即短信发送 图片 ∙打电话 插上耳机和麦克 输入AT命令: ATDXXXXXXX;拨号 接通电话后,即可通话 ATH挂机命令 ATA接电话 通话音量大小调节: AT+CLVL=n(n范围1~100,值越大声音越大) 调节麦克风音量大小: AT+CMIC=n(n范围1~15,值越大分贝越大) ∙更改波特率举例 例如: 默认波特率为115200bps,此时改为9600bps AT+IPR=9600&W 修改波特率为9600bps并保存修改的值 GSM部分还有很多不同功能的AT命令具体可参考: SIM548C_ATC_V1.00 (1).pdf GSM与Arduino通讯 ∙硬件连接 同上面硬件连接 ∙下载程序 S1开关拨到EN,即使能下载程序模式,下载下面程序: voidsetup() { //端口模式设置 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); //使能GSM串口 digitalWrite(3,LOW); digitalWrite(4,HIGH); delay(2000); //设置波特率 Serial.begin(9600); //等待callready delay(5000); delay(5000); delay(5000); } voidloop() { //发送AT命令同步 Serial.println("AT"); delay(2000); Serial.println("AT"); delay(2000); //发送短信 Serial.println("AT+CMGF=1"); delay(1000); Serial.println("AT+CMGS=\"xxxxxxxxxxx\"");//xxx为电话号码 delay(1000); Serial.print("TEST"); delay(1000); Serial.print(26,BYTE); //打电话 //Serial.println("ATDxxxxxxxxxxx;"); while (1); } 程序说明: Arduino328发送命令给模块,让模块发短信、打电话。 其他功能类似。 AT命令表 上述程序中,大家可以看到用到发短信、打电话AT命令等。 除了上述用到的AT命令,还有好多各种功能的AT命令,具体可参考SIM548C_ATC_V1.00 (1).pdf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GMS 短信 模块 编程 汇总