(SKU:TEL0051)GPS/GPRS/GSM 扩展板 V3.0
目录 |
简介
这是DFRobot研发的一款GPS/GPRS/GSM Arduino扩展板。它是一款四频GSM/GPRS驱动器,工作频率为EGSM 900MHz/DCS 1800MHz和GSM850 MHz/PCS 1900MHz。它也支持GPS卫星导航技术,能让你的机器人和控制系统来发送信息并使用GSM网络。它是通过AT指令(GSM07.07 ,07.05 和 SIMCom加强型AT指令)来控制的,您能直接通过电脑和Arduino板来启动它的GSM&GPS功能,其中安装有GPS&GSM高增益SMD天线。这款GPS/GPRS/GSM板内嵌有SIMCom公司的SIM908芯片,具有GPS定位功能和一个行业标准界面。这两项技术的完美结合,能让您在任意时间追踪任何地区内的货物,交通工具和人,只要这些地区有信号覆盖。
V3.0与V3.1的差别仅在于复位键旁边的GSM/GPS转换开关。V3.0采用了跳帽的形式,而V3.1采用了3档开关的形式。其他部分完全相同,产品信息和资料都可以共用。
V3.0相比V2.0版本,升级到SIM908芯片,GPS定位精确到2.5m,冷启动时间缩短到30s。接收器的频道由原来的20个升级到42个。新的芯片使得功耗更低,敏感度更高。另外,在扩展板布局方面。V3.0版本移除了SIM908旁边的排针,用户可以自己焊接。Sim卡槽从芯片顶部移到了左上角,为新的芯片方案提供空间。新版本还移除了右边的扬声器。更多的功能升级,请参考SIM908芯片的说明。同时还可以参考我们产品资料库,获得更多的端口示意图和示例代码。
技术规格
- 供电电源:6-12V
- 低电量消耗(100mA@7V-GSM模式)
- 四频 850/900/18001900MHz
- GPRS multi-slot class 10
- GPRS mobile station class B
- 采用GSM phase 2/2+标准
- CLass4(2 W @ 850/900 MHz)
- Class 1 (1 W @ 1800/1900MHz)
- 通过AT指令控制(GSM07.07 ,07.05 和SIMCom加强型AT指令)
- 支持GPS卫星导航技术
- 内嵌有GPS&GSM高增益SMD天线
- 支持4*4按钮垫
- USB/Arduino控制开关
- Arduino可编程交换机
- LED指示灯能显示电源供应状态,网络状态和工作模式
- 大小:81*70mm
扩展板接口功能
1、S1、S2开关:
S1:编程/通信模式切换,prog:编程模式,comm:通信模式。 S2:USB/arduino通信模式切换,USB:扩展板通信通过USB口,arduino:扩展板与arduino通信。
2、状态指示灯:
PWR:电源指示灯; STAT:模块启动状态指示灯; NET:网络状态指示灯; 熄灭——模块没有工作, 64ms亮/800ms熄灭——模块没有找到网络, 64ms亮/3000ms灭——模块注册到网络, 64ms亮/300ms熄灭——GPRS通讯。
3、J10/J11/J12:
J10:将D3引脚作为GSM部分串口控制引脚,LOW低电平使能GSM串口,HIGH高电平关闭GSM串口; J11:将D4引脚作为GPS部分串口控制引脚,LOW低电平使能GPS串口,HIGH高电平关闭GPS串口; J12:将D5引脚作为GSM开机引脚,控制模块GSM部分开机。
注意:默认短路帽接上即可,如果D3、D4、D5引脚您已经作为其它功能控制引脚,可以将J10/J11/J12相应引脚的短路帽拔掉,与其它空闲引脚相连接。
串口选择
扩展板有两种串口:GSM串口,GPS串口。主控板UNO只有一组串口,同一时间只能与一种串口通信,所以需要两种串口切换使用。
扩展板有两种串口切换选择方式:1、程序控制串口选择,同上面所述,控制D3、D4引脚可以切换两种串口。2、硬件串口选择,在Uart Select处通过切换开关切换串口。
GPS功能使用介绍
GPS通信通过USB口
注意:GPS天线必须置于室外,才可以获得GPS定位数据输出。
1、硬件连接
扩展板接到主控板UNO,USB线连接好。
2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。
void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } void loop() { //关闭引脚使能切换串口功能,启用硬件短路跳接切换串口功能 digitalWrite(3,HIGH);//关闭GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX }
3、打开串口助手软件
S1按键拨到Comm端,S2按键拨到USB端。
Uart Select串口选择开关拨到GSM端
打开串口助手软件,默认波特率为9600bps,勾选发送新行(在Arduino串口中是回车)。此时STAT灯亮,模块启动,如果没有启动可以按下RST复位键,重新开启。
4、发送AT命令控制GPS通信
发送AT命令(进行同步)
发送AT+CGPSIPR=9600 命令(设置GPS通信波特率为9600bps)
发送AT+CGPSPWR=1命令(turn on GPS power supply)
发送AT+CGPSRST=1命令 (reset GPS in autonomy mode)
5、将Uart Select处开关拨到GPS端
如果GPS天线已经放置露天位置,等待几分钟后,会有正确的GPS定位信息数据输出。
当想停止GPS信息输出,需将串口短路帽跳接到GSM(使能GSM串口通信,关闭GPS串口通信),
发送AT+CGPSPWR=0命令(turn off GPS power supply)
发送AT+CPOWD=1,将模块关机。
想重新开机再次按下RST按键。
GPS与Arduino通信
1、硬件连接
将扩展板接到主控板UNO上,插好USB线,Uart Select串口选择开关拨到中间。
2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。
double Datatransfer(char *data_buf,char num)//数据转换:将字符型数据转换为浮点型数据 { //*data_buf:要转换的数组;num:小数点的个数 double temp=0.0; unsigned char i,j; if(data_buf[0]=='-')//负数的情况 { i=1; //数组中的字符型数据转换成整数并累加 while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); //将转换后的整数转换成浮点数 for(j=0;j<num;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<num;j++) temp=temp*10+(data_buf[++i]-0x30); for(j=0;j<num;j++) temp=temp/10 ; } return temp; } char ID()//接收语句的ID { char i=0; char value[6]={ '$','G','P','G','G','A' };//要接收的GPS语句的ID内容 char val[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; return 1;//接收完毕返回1 } } else i=0; } } } void comma(char num)//接收逗号字符 { char val; char count=0;//对接收到的逗号计数 while(1) { if(Serial.available()) { val = Serial.read(); if(val==',') count++; } if(count==num)//数目正确结束接收 return; } } void UTC()//获取时间信息 { char i; char time[9]={ '0','0','0','0','0','0','0','0','0' }; double t=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; } } } } void latitude()//获取纬度信息 { char i; char lat[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; } } } } void lat_dir()//获取纬度方向信息 { char i=0,val; if( ID()) { comma(3); //读取语句第三个逗号后的数据 while(1) { if(Serial.available()) { val = Serial.read(); Serial.write(val);//输出方向信息 Serial.println(); i++; } if(i==1) { i=0; return; } } } } void longitude()//获取经度信息 { char i; char lon[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; } } } } void lon_dir()//获取经度方向信息 { char i=0,val; if( ID()) { comma(5); //读取语句第五个逗号后的数据 while(1) { if(Serial.available()) { val = Serial.read(); Serial.write(val);//输出经度方向 Serial.println(); i++; } if(i==1) { i=0; return; } } } } void altitude()//获取海拔信息 { char i,flag=0; char alt[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; } } } } void setup() { //设置引脚为输出模式 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); //等待GPS ready delay(5000); //发送AT命令同步 Serial.println("AT"); delay(2000); //turn on GPS power supply Serial.println("AT+CGPSPWR=1"); delay(1000); //reset GPS in autonomy mode Serial.println("AT+CGPSRST=1"); delay(1000); //使能GPS串口 digitalWrite(4,LOW); digitalWrite(3,HIGH); delay(2000); Serial.println("$GPGGA statement information: "); } void loop() { 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(' '); } }
3、设置扩展板与Arduino通信
S1按键拨到Comm端,S2按键拨到Arduino端。
GSM功能使用介绍
注意:在使用扩展板GSM功能时,需要接外接电源6-12V,因为GSM模式下电流需要在200mA左右。
GSM通信通过USB口
1、硬件连接
扩展板接到主控板UNO,SIM卡、麦克、耳机插好。
USB线、外接电源接好。
2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。
void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } void loop() { digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX }
3、打开串口助手软件
S1按键拨到Comm端,S2按键拨到USB端,S3按键拨到中间。
打开串口助手软件,默认波特率为9600bps,勾选发送新行。此时STAT灯亮,模块启动,如果没有启动可以按下RST复位键,重新开启。
打电话
步骤:
AT 同步
ATDXXXXXXX; 拨号
相关指令:
ATH 挂机命令 ATA 接电话
其它指令可参见扩展板销售网页所附链接:AT指令文档。
发短信
步骤:
AT 同步
AT+CMGF=1 (设置短消息的格式为文本格式)
AT+CMGS="XXXXX" (xxxx为目的地的电话号码)
出现“>”
在后面输入短信内容,输入完后 点击发送;
然后再勾选“HEX发送”
发送“1A”。(不区分大小写)
GSM通信与Arduino
硬件连接:
扩展板接到主控板UNO,SIM卡、麦克、耳机插好。
USB线、外接电源接好。
打电话
扩展板S1开关拨到Prog端,下载下面程序。
void setup() { //端口模式设置 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); //等待call ready delay(5000);delay(5000);delay(5000); } void loop() { //发送AT命令同步 Serial.println("AT"); delay(2000); Serial.println("AT"); delay(2000); //打电话 Serial.println("ATDXXXXXXXXXXX;");//对方电话号码 while(1); }
将S1开关拨到Comm,S2开关拨到Arduino,Uart Select串口选择开关拨到中间。
发短信
扩展板S1开关拨到Prog端,下载下面程序。
void setup() { //端口模式设置 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); //等待call ready delay(5000); delay(5000); delay(5000); } void loop() { //发送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.write(26); while(1); }
将S1开关拨到Comm,S2开关拨到Arduino,Uart Select串口选择开关拨到中间。
GPRS功能使用介绍
这里做了个简单的例子,模块建立TCP连接,传输数据到乐联网平台。首先需要在乐联网平台免费注册账号,添加自己的网关和设备,具体步骤参考乐联网使用详细手册。
传输数据时会产生流量,所以最好保证你的SIM卡有GPRS流量套餐。
例子看懂之后大家就可以根据自己的需要,将自己的数据传到相应的平台。
相关AT指令介绍
选择三个步骤完成初始化过程,在初始化失败的情况可以知道失败在哪一步骤。AT+CIPSTART一步骤完成就是方便快捷。
乐联网TCP服务器通讯协议
服务器信息
1、服务器域名tcp.lewei50.com
2、服务器IP:42.121.128.216
3、服务器端口号:9960
服务器后台设置准备工作:
参考文档 http://www.lewei50.com/dev/doc/126
1、注册并登录乐联网后台,记住你的userkey用户编号,图片黑体字部分。
userkey:5d3eeec03bc747d7a23ab7d99c9340ea
2、添加网关设备名称,记住网关标识编号,比如02。
如果你LED、继电器之类的需要服务器来控制的设备,可勾选“是否可控”。否则可不选。
API地址:http://tcp.lewei50.com:9965/?method=send&gatewayNo=02
完全复制上面的链接文字段,文字段前后不要有空格等隐含多余字符,02部分对应网关标识编号。
公网IP:tcp.lewei50.com
完全复制上面的链接文字段,文字段前后不要有空格等隐含多余字符
3、添加测量设备,比如我添加了1个温度传感器,标识为T1。
客户端主动向服务器上传数据过程
该方法主要用于测量类型设备,比如有1个温度传感器,测到温度25度。
客户端主动上传数据步骤:
1、连接tcp.lewei50.com 或者IP:42.121.128.216 端口号:9960
2、发送登录注册信息
{"method": "update","gatewayNo": "02","userkey": "5d3eeec03bc747d7a23ab7d99c9340ea"}&^!
完全复制上面的完整数据,02部分替换成你网关的编号,5d3eeec03bc747d7a23ab7d99c9340ea部分替换成你自己的userkey用户编号。
注意:发送后服务器不会有反馈响应。
3、发送具体数据
{"method": "upload","data":[{"Name":"T1","Value":"25"}]}&^!
完全复制上面的完整数据,T1部分替换成你设备的标识,25部分替换成对应的设备数据。
注意:发送后服务器不会有反馈响应。
4、客户端数据发送完毕可以主动断开链接。
通过USB口通信控制GPRS数据传输
1、硬件连接
扩展板接到主控板UNO,SIM卡插好。
USB线、外接电源接好。
2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。
void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); } void loop() { digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX }
3、打开串口助手软件
S1按键拨到Comm端,S2按键拨到USB端。
Uart Select串口选择开关拨到中间。
打开串口助手软件,默认波特率为9600bps,勾选发送新行。此时STAT灯亮,模块启动,如果没有启动可以按下RST复位键,重新开启。
4、上传数据
步骤:
AT 同步
AT+CSTT 设置APN
AT+CIICR 激活移动场景
AT+CIFSR 获得本地IP地址
AT+CIPSTART="TCP","tcp.lewei50.com",9960 建立TCP连接
AT+CIPSEND 发送数据
出现“>” ,发送下面数据
{"method": "update","gatewayNo": "02","userkey": "5d3eeec03bc747d7a23ab7d99c9340ea"}&^!
输入完后按‘ctrl+z’即可
AT+CIPSEND 发送数据
出现“>” ,发送下面数据
{"method": "upload","data":[{"Name":"T1","Value":"25"}]}&^!
输入完后按‘ctrl+z’即可
此时可以在乐联网平台看到传输的数据
通过Arduino通信控制GPRS数据传输
1、硬件连接
扩展板接到主控板UNO,SIM卡插好。
USB线、外接电源接好。
2、下载程序
扩展板S1开关拨到Prog端,下载下面程序。
void setup() { //设置引脚为输出模式 pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); //GSM开机时序 digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); digitalWrite(3,LOW);//使能GSM的TX、RX digitalWrite(4,HIGH);//关闭GPS的TX、RX //设置波特率 Serial.begin(9600); //等待call ready delay(5000); delay(5000); delay(5000); } void loop() { unsigned char t=25; //发送AT命令同步 Serial.println("AT"); delay(2000); Serial.println("AT"); delay(5000); Serial.println("AT+CIPSTART=\"TCP\",\"tcp.lewei50.com\",9960"); delay(5000); Serial.println("AT+CIPSEND"); delay(2000); Serial.print("{\"method\": \"update\",\"gatewayNo\": \"02\",\"userkey\": \"5d3eeec03bc747d7a23ab7d99c9340ea\"}&^!"); delay(2000); Serial.write(26); delay(5000); Serial.println("AT+CIPSEND"); delay(2000); Serial.print("{\"method\": \"upload\",\"data\":[{\"Name\":\"T1\",\"Value\":\""); Serial.print(t); Serial.print("\"}]}&^!"); delay(2000); Serial.write(26); delay(5000); while(1); }
将S1开关拨到Comm,S2开关拨到Arduino,Uart Select串口选择开关拨到中间。
疑难解答
更多问题及有趣的应用,请访问论坛