Skip to main content

GPRS Shield V2.0

使用GPRS扩展板将您的Arduino连接到GSM/GPRS蜂窝网络!您现在可以使用Arduino/Seeeduino或其他主板通过易于使用的AT命令拨打电话号码或向朋友发送短信。这个新版本采用了四频段低功耗GSM/GPRS模块SIM900以及紧凑的PCB天线。同时,对接口和基础电路进行了改进,使其更加简洁可靠。您有两种选择来实现GPRS扩展板与主板的通信——UART或SoftwareSerial

版本


版本描述发布日期
v0.9b初始公开发布(测试版)2011年3月3日
v1.2添加软件端口来控制SIM90的开/关2011年12月2日
v1.4重新设计电源电路,重新布局PCB2012年8月30日
v2.0四频段支持并重新设计PCB天线2013年2月3日
v3.0将arduino插座更改为最新的Arduino Uno标准2015年3月20日

V2.0与之前版本的区别是什么?

  • 外观变化

    • V2.0采用标准扩展板外形以及保护外壳;
    • 鸭嘴天线被紧凑的PCB天线取代;
    • 麦克风和耳机接口在V2.0上被2合1耳机插孔取代。
  • 电源电路变化

    • 用DC-DC电路替换原有的LDO电路。散热更低,效率更高,达到80%+。同时,V1.0上的EXT_PWR插孔被移除。V2.0现在可以直接从Arduino获取电流,无需额外的5V适配器。
  • 软启动电路

    • 新版本中添加了软启动电路,以平滑扩展板开启时的功率冲击,防止扩展板出现意外复位问题。
  • 天线改进

    • SIM900的最大发射功率为30dBm(1w)。然而V1.0的输出功率只有0.4W。在这个新版本中,发射功率提升到29dBm以上(0.8w+),为您提供更可靠和稳定的信号传输。

规格参数


项目
兼容性直接兼容 Arduino UNO/Seeeduino;通过跳线兼容其他主板
可选接口UART,软件串口
四频段支持850/900/1800/1900MHz
通信支持标准 - GSM 07.07 & 07.05 和增强 - SIMCOM AT 命令
工作温度-40°C 到 +85 °C
协议支持0710 MUX 协议,嵌入式 TCP/UDP 协议,FTP/HTTP,FOTA,MMS,嵌入式 AT
SIM900 认证CE,IC,FCC,ROHS,PTCRB,GCF,ICASA,REACH,AT&T
尺寸68.58 * 53.34mm
电源供应通过 5V 引脚供应 5v,通过 Vin 引脚供应 6.5~12v

注意事项


  • 确保您的 SIM 卡已激活。
  • GPRS Shield 没有 ESD 防护措施。在干燥天气下处理时请特别小心。

硬件概述


  • GPRS Shield UART 的出厂默认设置为 19200 bps 8-N-1。(可使用 AT 命令更改)。

  • 串口选择

    • 您有两种选择来实现 GPRS shield 与主板的通信,将两个跳线插到 SWserial 或 HWserial 位置。如果使用 SWserial,GPRS Shield 的 SIM900 将使用 D7 和 D8;如果使用 HWserial,将使用 D0 (RX) 和 D1 (TX)。

  • 通过 D9 开/关机

    • 默认未焊接 JP 焊盘。如果您想使用软件来开/关 GPRS shield,请焊接它。将 D9 设置为高电平,意味着按钮被按下。JP 焊盘位于 ISP 端口旁边。
  • SIM900 引脚引出

    • SIM900 的一些引脚在 ISP 端口旁边引出,包括 LINEIN_R、LINEIN_L、ADC、PWM1、PWM2、GPIO1~GPIO6、GND、FW_update (DISP_CLK、DISP_DATA、DISP_D/C、DISP_CS)、RI、DCD、DSR、CTS、VDD_EXT、LDTR、LRTS。这些引脚直接从 SIM900 引出,无任何设置。

  • RTC 电池座

    • 它可以通过 CR1220 电池为 SIM900 的 VRTC 提供 3v 电压。
  • 电源

    • 用 DC-DC 电路 -- TD1410 替换原来的 LDO 电路。散热更低,效率更高,可达 80%+。同时,输出可达 4.15V/2A。电源供应有两个输入: 5v 引脚:新版本中添加了软启动电路,以平滑 shield 开启时的电源冲击,防止 shield 出现意外复位问题。更详细的变化请参考相关阅读:版本
    • Vin 引脚:输入电压范围为 6.5v 到 12v。
  • 天线

    • 天线连接器类型为 IPEX,SIM900 的最大发射功率为 30dBm(1w)。更多信息请参见 GPRS 天线规格
  • LED 状态说明

    LED状态功能
    电源指示灯(绿色)关闭GPRS Shield 电源关闭
    开启GPRS Shield 电源开启
    状态指示灯(红色)关闭电源关闭
    开启电源开启
    网络指示灯(绿色)关闭SIM900 未工作
    64ms 开启/800ms 关闭SIM900 未找到网络
    64ms 开启/3000ms 关闭SIM900 找到网络
    64ms 开启/300ms 关闭GPRS 通信

开始使用


使用 AT 命令体验乐趣

当您收到 GPRS Shield 时,您想要做的第一件事是什么?发送短信(SMS)?还是给某人打电话(需要耳机)?您可以通过使用 AT 命令与 GPRS Shield 对话来完成所有这些操作 - 这是它能理解的一种特殊语言。

AT 命令是通过串行接口(UART)发送到 GPRS 调制解调器的简单文本命令,因此您可以使用任何串行终端软件与其通信。

硬件安装

  • 将激活的 SIM 卡插入 SIM 卡座 - 6 针 SIM 卡座。SIM900 支持 1.8 伏和 3.0 伏 SIM 卡 - 会自动检测 SIM 卡的电压类型。

    • 将 SIM 卡插入卡座
    • 锁定 SIM 卡座
  • 确保天线垫片正确扣合

  • 通信端口配置 GPRS shield 可以通过 Arduino 的硬件串口或软件串口进行控制。这里我们默认使用软件串口。通过插入跳线帽来选择,如下所示。

  • 插入 Arduino - GPRS Shield 像任何其他设计良好的扩展板一样,是可堆叠的。

  • 给 Arduino 供电 - 通过 USB 线或 DC 插孔给 Arduino 供电。连接后电源指示 LED 应该亮起。

软件

让我们来体验使用 AT 命令控制 GPRS shield 的乐趣。

GPRS Shield 配备了通过 GSM 网络发送数据所需的所有配件,除了 Arduino 板和 GSM SIM 卡。如果您想要进行语音通话,还需要带麦克风的耳机。

步骤 1:为 GPRS Shield 创建测试设置

note

几乎所有的 AT 命令都应该以回车符结尾发送,您需要在串口终端中选择"+CR"选项。

要使用 AT 命令进行实验,您需要一种为 GPRS Shield 供电并与其通信的方法。最好的方法是使用下面描述的 Arduino Duemilanove 板。相同的步骤适用于 SeeeduinoSeeeduino Stalker

  • 按照之前的硬件安装步骤设置硬件系统;
  • 确保 GPRS Shield 上的 GPRS_TX & GPRS_RX 跳线安装在 SWSerial 位置 - 这样 GPRS_TX 将连接到 D7(RX),GPRS_RX 连接到 D8(TX)。
  • 通过 USB 线将 Arduino Duemilanove(或 Seeeduino)连接到您的计算机。
  • Duemilanove 板上的 ATmega328P 微控制器只有一个 UART,用于与 PC 通信。我们需要的是在 ATmega328P 内运行的 Arduino 程序,通过在数字引脚 D8 和 D7 上使用软件串口来模拟第二个串口(UART)。所有通信都将通过软件串口和实际硬件串口进行。通过这样做,来自计算机(连接到实际硬件 UART)的所有数据都将路由到 GPRS Shield(连接到软件 UART)。然后我们就能够发出 AT 命令来控制 GPRS Shield。概述此方案的框图如下所示。

为了开发这样的程序,我们需要使用 SoftwareSerial 库。这是演示代码。

//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART

#include <SoftwareSerial.h>

SoftwareSerial GPRS(7, 8);
unsigned char buffer[64]; // buffer array for data recieve over serial port
int count=0; // counter for buffer array
void setup()
{
GPRS.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the Serial port of Arduino baud rate.

}

void loop()
{
if (GPRS.available()) // if date is comming from softwareserial port ==> data is comming from gprs shield
{
while(GPRS.available()) // reading data into char array
{
buffer[count++]=GPRS.read(); // writing data into array
if(count == 64)break;
}
Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port
clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
count = 0; // set counter of while loop to zero


}
if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook
GPRS.write(Serial.read()); // write it to the GPRS shield
}
void clearBufferArray() // function to clear buffer array
{
for (int i=0; i<count;i++)
{ buffer[i]=NULL;} // clear all index of array with command NULL
}
  • 将程序上传到 Arduino 板。如果您不知道如何上传代码,请按照说明操作。
  • 如果您没有串口工具,请下载并启动串口工具。为 Arduino 选择正确的 COM 端口,并将其设置为以 19200 8-N-1 运行,然后点击"Open COM"。您也可以使用 AT Command Tester 发送 AT 命令。如果您对此感兴趣,请点击这里
  • 按住电源按钮约 2 秒钟来启动 SIM900。红色 LED 将亮起。旁边的绿色 LED 将闪烁。如果扩展板成功加入网络,绿色 LED 将每 3 秒闪烁一次。
  • 您应该在串口监视器上看到如下消息,这是 SIM900 发送的通知您它已加入网络的信息。
RDY

+CFUN: 1

+CPIN: READY

Call Ready

如果您在串口监视器中看不到这些消息,您应该点击"send new"选项,这将在AT命令末尾添加回车符,然后发送AT命令"AT+IPR=19200"来设置SIM900的波特率。

步骤2:发送短信(SMS)

现在我们的测试设置已经准备好了,让我们在编程Arduino执行此操作之前,先手动尝试一些AT命令。让我们先尝试发送短信。

  • 按照上述步骤1中描述的方式创建设置。

  • 通过您的串口终端软件,发送AT+CMGF=1并按回车键。GPRS Shield可以在两种模式下发送短信:文本模式和PDU(或二进制)模式。由于我们想要发送人类可读的消息,我们将选择文本模式。GPRS Shield将响应OK

  • 点击"send new"选项并发送AT+CMGS="+18888888888"。这将指示GPRS Shield开始接受新消息的文本,数字表示指定的电话号码(将号码替换为目标电话的电话号码)。GPRS Shield将发送一个'**>'**来提醒您输入消息。请注意,任何AT命令中的电话号码都必须遵循E.123格式格式。

  • 开始输入您的消息,完成输入后,点击"send hex"选项,然后发送十六进制:1A。调制解调器将接受消息并响应OK。稍后,您指定号码的手机应该会收到消息。我发送了"How are you ?"。您可以通过点击"EXT"查看历史记录。命令历史记录列在"Set Multi Char"下方。

note

如果尽管按照上述指定步骤操作,您仍无法在目标手机上接收到消息,您可能需要设置短信消息中心号码。在AT+CMGF和AT+CMGS命令之间发送以下命令:AT+CSCA="+18888888888"。将指定的电话号码替换为您的GSM服务提供商的短信中心号码。消息中心号码对每个服务提供商都是特定的。您可以通过致电GSM服务提供商的客户服务中心并询问来获取消息中心号码。

步骤3:使用AT命令拨打电话

  • 如果从发送短信切换到拨打电话,请重启SIM900。
  • 将命令"ATD18888888888;"(不带引号)中的电话号码替换为您的目标号码,然后按回车键发送。如果成功,将显示消息"ATH OK",如下图所示。否则,将显示"No CRRLIER"。原因可能是电话号码不存在或命令格式不正确。

步骤4:进一步探索

现在您已经体验了AT命令的工作原理,您可以在继续使用GPRS Shield为Arduino开发草图之前尝试其他命令。

这涉及创建一个草图,用于代表您向GPRS Shield的串口发送相同的AT命令序列,以执行发送短信、拨打电话或通过GPRS连接发送数据的相同任务。

您可以查阅AT命令参考手册来了解命令序列。如果您开发了Arduino草图,发现GPRS Shield的行为不符合您的预期,那么您需要检查您的AT命令及其序列。为此,请将上述入门部分中附加的串口中继草图重新加载到ATmega328P中,手动输入AT命令并检查输出。GPRS Shield发送回来的响应将帮助您调试AT命令序列。

note

还开发并附加了一个执行相同任务的C程序:Softuart relay atmega328p.zip

该程序是在Windows PC上开发的。使用AVRStudio4作为IDE,使用WinAVR作为编译器。ZIP文件包含一个AVRStudio4项目。C编译器(WinAVR)将生成一个Intel Hex(.hex)文件。要在Arduino IDE之外将此.hex文件上传到Arduino板中,需要一个能够与Arduino板引导加载程序通信的程序。XLoader就是这样一个在Windows上运行的程序,可以将各种编译器生成的.hex文件上传到Arduino板中。

SoftwareSerial库注意事项

使用Arduino时,您应该能够使用发行版中包含的SoftwareSerial库(而不是NewSoftSerial)。但是,您必须注意,为传入消息保留的缓冲区在库头文件"SoftwareSerial.h"中硬编码为64字节:

 define _SS_MAX_RX_BUFF 64 // RX buffer size

这意味着如果GPRS模块接收到的数据超过缓冲区,您很可能会因缓冲区溢出而丢失数据!例如,使用"AT+CMGR=xx"(xx是消息索引)从模块中读取短信时,您甚至可能看不到消息部分,因为前面的头信息(如电话号码和时间)占用了大量空间。解决方法似乎是手动将_SS_MAX_RX_BUFF更改为更高的值(但要合理,这样您就不会用完所有内存!)

Softwareserial库有以下限制(摘自arduino页面)。如果使用多个软件串口,一次只能有一个接收数据。 这意味着如果您尝试添加另一个串口设备(如grove串口LCD),除非您仔细编写代码,否则可能会出现通信错误。

如何使用AT命令发送短信或拨打电话号码

在这个示例中,我们将创建一个Arduino草图,允许您在Arduino的串行通信窗口中分别输入't'或'd'时发送短信或拨打电话进行语音通话。

发送短信的AT命令

查看SIM900命令集,我们可以看到要发送短信,首先必须设置SMS格式,这需要使用AT+CMGF命令。

AT+CMGF命令可以是两个值之一:0或1,分别对应"PDU模式"和"文本模式"。在"文本模式"中,SMS消息表示为可读文本。在"PDU模式"中,SMS消息表示为用十六进制字符编码的二进制字符串。在这个示例中我们将使用"文本模式",所以我们需要发送给GPRS扩展板的命令是:

AT+CMGF=1\r

现在我们已经设置了SMS格式,可以继续发送短信。要发送短信,我们使用AT+CMGS命令。根据SIM900 AT命令集,CMGS命令遵循以下格式:

AT+CMGS=<da>[,<toda>]<CR>

其中<da>是目标地址(电话号码),<toda>是可选的目标地址类型,<CR>是回车符'\r'字符。一旦我们发送了这个命令,GPRS扩展板将回复'>'字符,提示我们输入实际消息。

note

电话号码必须包含国家代码,例如对于美国电话号码(555)123-4567,<da>值必须是+15551234567

语音通话命令

根据SIM900 AT命令集表,用于拨打号码进行语音通话的命令是"ATD+xxxxxxxxxx;",其中"xxxxxxxxxxx"是包含国家代码的电话号码。必须发送分号来建立语音通话,省略它将建立数据或传真通话。

用于发送简单短信或拨打语音电话的Arduino代码如下所示。不要忘记将电话号码"xxxxxxxxxx"和消息"How are you today?"更改为您自己的值。

Arduino代码
  #include <SoftwareSerial.h>


SoftwareSerial gprsSerial(7,8);

void setup()
{
gprsSerial.begin(19200); // GPRS shield baud rate
Serial.begin(19200);
delay(500);
}

void loop()
{

if (Serial.available()) // if there is incoming serial data
switch(Serial.read()) // read the character
{
case 't': // if the character is 't'
SendTextMessage(); // send the text message
break;
case 'd': // if the character is 'd'
DialVoiceCall(); // dial a number
break;

}

if (gprsSerial.available()){ // if the shield has something to say
Serial.write(gprsSerial.read()); // display the output of the shield
}
}

/*
* Name: SendTextMessage
* Description: Send a text message to a number
*/
void SendTextMessage()
{
Serial.println("Sending Text...");
gprsSerial.print("AT+CMGF=1\r"); // Set the shield to SMS mode
delay(100);
// send sms message, the phone number needs to include the country code e.g. if a U.S. phone number such as (540) 898-5543 then the string must be:
// +15408985543
gprsSerial.println("AT+CMGS = \"+xxxxxxxxxx\"");
delay(100);
gprsSerial.println("How are you today?"); //the content of the message
delay(100);
gprsSerial.print((char)26);//the ASCII code of the ctrl+z is 26 (required according to the datasheet)
delay(100);
gprsSerial.println();
Serial.println("Text Sent.");
}

/*
* Name: DialVoiceCall()
* Description: Can call/dial a phone number
*/
void DialVoiceCall()
{
gprsSerial.println("ATD+xxxxxxxxxx;");//dial the number, must include country code
delay(100);
gprsSerial.println();
}

常见问题

以下是 GPRS Shield 常见问题解答,使用前请先阅读:

  • 为什么 GPRS Shield 无法通过软件串口(D7/D8)与 Stalker v2.1/2.0 配合工作?

    Stalker v2.1/2.0 已经使用了数字引脚(D7/D8),您需要将 GPRS_TX/GPRS_RX 连接到其他数字引脚作为软件串口。这个问题在 Stalker 2.2 版本中已经解决。

  • 为什么将 GPRS Shield 组装到 Stalker 或其他 Arduino 板上时无法使用 I2C?

    因为 GPRS Shield 通过 I2C 与其他模块冲突。GPRS Shield 不使用 I2C 端口,您可以断开从 SIM900 I2C 端口到 A4/A5 的连接。

相关项目


这是一个使用 GPRS Shield V2.0 制作的演示。

通过这个演示,我们使用 Arduino、GPRS Shield 扩展板和其他模块制作了一个名为 Arduino Phone 的手机。

这是一个使用 GPRS Shield V2.0 制作的演示。

通过这个演示,我们可以在家中发生燃气泄漏时接收短信。

原理图在线查看器

资源

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...