SIM900 GSM GPRS扩展板指南 – Arduino教程

释放双眼,带上耳机,听听看~!

这篇文章是Arduino SIM900 GSM GPRS扩展板的完整指南。了解如何发送和接收短信以及如何使用 Arduino 拨打和接听电话。

SIM900 GSM GPRS扩展板指南 - Arduino教程在本教程中,我们将介绍:

  • SIM900 GSM GPRS扩展板简介
  • SIM900 GSM GPRS扩展板硬件
  •  SIM900 AT命令
  •  测试shield
  • 发送和接收短信 
  • 拨打和接听电话 

SIM900 GSM GPRS扩展板简介

SIM900 GSM GPRS扩展板如下图所示。

SIM900 GSM GPRS扩展板指南 - Arduino教程

GSM代表全球移动通信系统,是移动通信的全球标准。

GPRS 代表 通用分组无线电服务。GPRS是2G和3G蜂窝通信上的移动服务。

 应用:

GSM GPRS扩展板特别有用,因为它允许:

  • 通过GPRS网络连接到互联网
  • 发送和接收短信
  • 拨打和接听电话

它的功能使其非常适合使用Arduino的项目,例如:

  • 远程控制电子设备 – 发送短信以打开某些东西;
  • 接收通知 – 如果检测到您家中的移动,请向您的手机发送短信;
  • 接收传感器数据 – 定期向您的手机发送包含每日天气数据的短信。

 特征

以下是shield的一些最重要的功能:

  • 与Arduino和克隆兼容
  • 基于SIMCOM的SIM900模块
  • 允许您使用 AT 命令通过 UART 发送短信、彩信、GPRS 和音频。
  • 它有 12 个 GPIO、2 个 PWM 和 SIM900 模块的内置 ADC
  • 四频:850;900;1800 和 1900 MHZ,因此它应该适用于所有具有 GSM (2G) 网络的国家/地区
  • 通过AT命令控制
  • 支持 RTC(实时时钟)——背面有一个用于 3V CR1220 电池的支架

SIM900 GSM GPRS扩展板指南 - Arduino教程

  • 有麦克风和耳机插孔,可拨打电话

SIM900 GSM GPRS扩展板指南 - Arduino教程

 哪里可以买到?

SIM900 GSM GPRS扩展板指南 - Arduino教程

您可以在 Maker Advisor 上查看 SIM900 GSM GPRS 扩展板并找到最优惠的价格。

您可以使用上述链接或直接转到 MakerAdvisor.com/tools 以最优惠的价格找到您项目的所有零件!

SIM900 GSM GPRS扩展板指南 - Arduino教程

 预备步骤

在开始使用SIM900 GSM GPRS模块之前,您需要考虑有关SIM卡和屏蔽电源的一些方面。

 GSM覆盖

确保您覆盖 GSM 850 MHz、GSM 900 MHz、DCS 1800 MHz 或 PCS 1900 MHz 网络。GSM是指2G。

 预付费SIM卡

我们建议您使用预付费计划或具有无限短信的计划进行测试。否则,如果出现问题,您可能需要为错误发送的数百条短信支付巨额账单。在本教程中,我们将使用具有无限短信的预付费计划。

SIM900 GSM GPRS扩展板指南 - Arduino教程

扩展板使用原始SIM卡尺寸,而不是micro或nano。如果您有微型或纳米,您可以考虑购买 SIM 卡尺寸的适配器。

关闭 PIN 锁

要将 SIM 卡与扩展板一起使用,您需要关闭密码锁。最简单的方法是将SIM卡插入智能手机,然后在手机安全设置中关闭密码锁。

就我而言,我需要完成:设置>高级设置>安全>SIM卡锁,然后用密码关闭SIM卡锁。

SIM900 GSM GPRS扩展板指南 - Arduino教程

获得合适的电源

屏蔽层有一个直流电源插座,如下图所示。

SIM900 GSM GPRS扩展板指南 - Arduino教程

在电源插孔旁边有一个拨动开关,用于选择电源。在板上的拨动开关旁边,有一个箭头指示拨动位置以使用外部电源 – 移动拨动开关以使用外部电源,如上图所示。

要为扩展板供电,建议使用可提供 5A 的 2V 电源,如下所示。它也可以用 9V 1A 或 12V 1A 供电。

SIM900 GSM GPRS扩展板指南 - Arduino教程

您可以在此处找到适合此扩展板的电源适配器。确保选择具有 5V 和 2A 的型号。

SIM900 GSM GPRS扩展板硬件

下图显示了防护罩的背面。它有一个用于 SIM 卡的支架和一个用于 RTC(实时时钟)的 3V CR1220 电池。

SIM900 GSM GPRS扩展板指南 - Arduino教程

下图显示了电路板上需要注意的屏蔽最重要的组件。

SIM900 GSM GPRS扩展板指南 - Arduino教程

 开始

1) 将 SIM 卡插入 SIM 卡座 – 确保您已阅读上一节中的预备步骤.2) 确保天线连接良好。

3) 在串口选择上,确保跳线帽如下图所示连接,以使用软件串口。

SIM900 GSM GPRS扩展板指南 - Arduino教程

4) 使用外部 5V 电源为扩展板供电。确保选择带有 DC 插孔旁边的拨动开关的外部电源。

SIM900 GSM GPRS扩展板指南 - Arduino教程

5) 要打开/关闭扩展板,请按住电源键约 2 秒钟。

SIM900 GSM GPRS扩展板指南 - Arduino教程

6) 然后,状态 LED 将亮起,NetLight LED 将每 800 毫秒闪烁一次,直到找到网络。当它找到网络时,NetLight LED 将开始每三秒闪烁一次。

请注意: 您可以通过软件自动打开扩展板。在代码示例之后的“自动打开防护罩”部分中,请参阅如何执行此操作。

7) 您可以通过使用 FTDI 编程器从 Arduino IDE 发送 AT 命令来测试扩展板是否正常工作——我们将在本教程后面展示。

 SIM900 AT命令

使用 FTDI 编程器测试 Shield

要测试一切是否正常工作,您可以通过从 Arduino IDE 串行监视器发送 AT 命令来测试扩展板。为此,您需要一个FTDI编程器,如下图所示。你可以在这里得到一个这样的FTDI程序员。

SIM900 GSM GPRS扩展板指南 - Arduino教程

1) 如下图所示,将FTDI编程器连接到GSM扩展板。

2) 打开Arduino IDE,选择正确的COM端口。

3) 打开串口监视器SIM900 GSM GPRS扩展板指南 - Arduino教程

4) 选择 19200 波特率 – 屏蔽默认设置为 19200 – 和回车。在以红色突出显示的框中写入 AT,然后按 Enter。见下图。

5) 如果一切正常,防护板将响应 OK。

SIM900 GSM GPRS扩展板指南 - Arduino教程

将扩展板连接到Arduino

将扩展板连接到Arduino,如下图所示。

SIM900 GSM GPRS扩展板指南 - Arduino教程

 发送短信

要发送短信,请将以下代码上传到您的Arduino板。

/*********
  Complete project details at https://www.qutaojiao.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);   
  
  // Send the SMS
  sendSMS();
}

void loop() { 
  
}

void sendSMS() {
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("AT+CMGS="+XXXXXXXXXXXX""); 
  delay(100);
  
  // REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
  SIM900.println("Message example from Arduino Uno."); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000); 
}

 

在此代码中,首先包括 SoftwareSerial.h 库,并在引脚 7 和 8 上创建软件串行端口。(引脚 7 设置为 RX,引脚 8 设置为 TX)

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);

创建的 sendSMS() 函数是实际发送短信的函数。此函数使用 AT 命令:AT+CMGF=1r 和 AT + CMGS。

您需要在以下位置更改收件人的手机号码:(将 X 替换为收件人的电话号码)

SIM900.println("AT + CMGS = "++++++++++++++"");

收件人的手机号码应为国际格式。

然后,在下一行中,您可以编辑要发送的文本。

// REPLACE WITH YOUR OWN SMS MESSAGE CONTENT
SIM900.println("Message example from Arduino Uno.")

 阅读收到的短信

要阅读传入的短信,请将以下代码上传到您的 Arduino。上传后,等待 20 秒,让扩展板建立通信。然后,通过向扩展板 SIM 卡号发送短信来测试脚本。SMS 显示在 Arduino 串行监视器上 – 波特率:19200。

/*********
  Complete project details at https://www.qutaojiao.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8);
//Variable to save incoming SMS characters
char incoming_char=0;

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // For serial monitor
  Serial.begin(19200); 
  // Give time to your GSM shield log on to network
  delay(20000);

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0r");
  delay(100);
}

void loop() {
  // Display any text that the GSM shield sends out on the serial monitor
  if(SIM900.available() >0) {
    //Get the character from the cellular serial port
    incoming_char=SIM900.read(); 
    //Print the incoming character to the terminal
    Serial.print(incoming_char); 
  }
}

 

在此代码中,您将模块设置为将 SMS 数据发送到串行输出:

SIM900.print("AT+CNMI=2,2,0,0,0r");

将 SMS 消息中的传入字符存储在 incoming_char 变量上。您可以使用 SIM900.read() 函数读取字符。

拨打电话

要拨打电话,请将以下代码上传到您的 Arduino。

不要忘记使用您要拨打的电话号码编辑代码。

/*********
  Complete project details at https://www.qutaojiao.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200);
  // Give time to your GSM shield log on to network
  delay(20000);

  // Make the phone call
  callSomeone();
}

void loop() {
  
}

void callSomeone() {
  // REPLACE THE X's WITH THE NUMER YOU WANT TO DIAL
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("ATD + +XXXXXXXXX;");
  delay(100);
  SIM900.println();
  
 // In this example, the call only last 30 seconds
 // You can edit the phone call duration in the delay time
  delay(30000);
  // AT command to hang up
  SIM900.println("ATH"); // hang up
}

 

若要进行调用,请使用使用 ATD 命令的 callSomeone() 函数。

SIM900.println("ATD + +XXXXXXXXX;");

您需要将 X(以红色突出显示)替换为您要呼叫的电话号码。

不要忘记连接麦克风和耳机来拨打电话。

在此代码示例中,使用 ATH 命令在 30 秒后挂断呼叫:

SIM900.println("ATH"); 

30 秒后挂断电话不是很有用,但举个例子效果很好。这个想法是在触发事件时使用 ATH 命令。例如,将按钮连接到Arduino,按下按钮会发送ATH命令以挂断电话。

接听来电

以下代码应答传入呼叫。

/*********
  Complete project details at https://www.qutaojiao.com  
*********/

#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8); 
char incoming_char=0;

void setup() {
  // Arduino communicates with SIM900 GSM shield at a baud rate of 19200
  // Make sure that corresponds to the baud rate of your module
  SIM900.begin(19200); // for GSM shield
  // For serial monitor
  Serial.begin(19200); 
  // Give time to log on to network.
  delay(20000); 
  
  SIM900.print("AT+CLIP=1r"); // turn on caller ID notification
  delay(100);
}

void loop() {
  // Display any text that the GSM shield sends out on the serial monitor
  if(SIM900.available() >0) {
    // Get the character from the cellular serial por
    // With an incomming call, a "RING" message is sent out
    incoming_char=SIM900.read();
    //  Check if the shield is sending a "RING" message
    if (incoming_char=='R') {
      delay(10);
      Serial.print(incoming_char);
      incoming_char=SIM900.read();
      if (incoming_char =='I') {
        delay(10);
        Serial.print(incoming_char);
        incoming_char=SIM900.read();
        if (incoming_char=='N') {
          delay(10);
          Serial.print(incoming_char);
          incoming_char=SIM900.read();
          if (incoming_char=='G') {
            delay(10);
            Serial.print(incoming_char);
            // If the message received from the shield is RING
            // Send ATA commands to answer the phone
            SIM900.print("ATAr");
          }
        }
      }
    }
  }
}

 

当有人拨打 SIM900 号码时,它会发送一条消息,说“响铃”。要知道是否有人在给您打电话,您可以等待来自 SIM900 的传入字符,然后比较它是否是 RING 消息。这就是此代码中所做的。当它收到 RING 消息时,您将发送 ATA 命令来应答电话。

自动打开屏蔽罩

您可以通过软件自动打开扩展板,而不是手动按“电源”键打开扩展板。

1) 首先,您需要将 R13 连接焊接在屏蔽层上,如下图所示 – 以红色突出显示。

SIM900 GSM GPRS扩展板指南 - Arduino教程

2) 将扩展板上的 D9 连接到 D9 Arduino 引脚,如下图所示。

SIM900 GSM GPRS扩展板指南 - Arduino教程

3) 在 setup() 函数中添加以下代码片段。这相当于按下shield“电源”按钮。

digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);

 故障 排除

Shield 未响应 OK

检查与Arduino的TX和RX连接。尝试通过使用 RX 引脚更改 TX 来重复该过程。

此外,通过将跳线帽放在串行选择器上的适当位置,检查是否选择了软件序列号。

SIM900 GSM GPRS扩展板指南 - Arduino教程

在串行监视器中看不到消息

要查看串行监视器中的消息,扩展板和Arduino的串行端口波特率应相同。SIM900 GSM GPRS屏蔽默认波特率为19200。因此,将Arduino的波特率选择为19200。

但是,如果需要更改屏蔽波特率,可以发送以下AT命令将其更改为19200或其他合适的波特率。

AT+IPR=19200

 总结

本教程向您展示如何使用Arduino发送和接收短信以及拨打和接听电话。您可以应用在本教程中学到的概念来构建自己的项目,以通过蜂窝网络进行通信。

给TA打赏
共{{data.count}}人
人已打赏
ArduinoArduino-进阶动态

带中继的Arduino以太网Web服务器

2023-12-9 11:40:49

ArduinoArduino-进阶动态

通过SMS控制12V的灯 - Arduino联网教程

2023-12-9 11:55:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();