测试 GSM 调制解调器

本教程用来学习如何测试 GSM Shield 调制解调器(Modem),本教程不需要使用 SIM 卡。

硬件准备

  • Arduino 主控板
  • GSM Shield 扩展模块

硬件图示

arduino-gsm-shield-vector-800x500

首先,我们要引入 GSM 库文件:

#include <GSM.h>

实利化一个 GSMModem 类

GSMModem modem;

声明一个变量,用来保存读取调制解调器中的 IMEI 编码

String IMEI = "";

在 setup 区块中,程序开启串口并输出 “Starting modem test…”

void setup()
{
  Serial.begin(9600);
  Serial.print("Starting modem test...");

调用 modem.begin() 函数,开启 Modem

  if(modem.begin())
    Serial.println("modem.begin() succeeded");
  else
    Serial.println("ERROR, no modem answer.");
}

在 loop 循环体中,, 通过 modem.getIMEI() 获取调制解调器的 IMEI 值. 每个 GSM 扩展都有一个唯一的 IMEI 值。

void loop()
{
  //@获取调制解调器 IMEI 号码
  Serial.print("Checking IMEI...");
  IMEI = modem.getIMEI();

通过 getIMEI() 得到数据后,通过串口监视器输出,并通过 modem.begin() 复位调制解调器。

  if(IMEI != NULL)
  {
    //@show IMEI in serial monitor
    Serial.println("Modem's IMEI: " + IMEI);
    // reset modem to check booting:
    Serial.print("Reseting modem...");
    modem.begin();

Arduino 复位之后,通过串口监视器检查 IMEI 信息

if(modem.getIMEI() != NULL)
{
  Serial.println("Modem is functoning properly");
}

如果 getIMEI() 不成功,则报告错误。

else
{
  Serial.println("Error: getIMEI() failed after modem.begin()");
}

如果程序启动后,一直没有返回 IMEI 信息,程序报错。

    }
    else
    {
      Serial.println("Error: Could not get IMEI");
    }

  //@do nothing:
  while(true);
}

当程序成功下载到Arduino 之后,打开串口监视器,就可以看到 Modem 的测试信息了

/*
This example test if your modem is working correctly.
Circuit:
* GSM shield attached (using digital pins 2, 3, and 7)
Created 12 Jun 2012
by David del Peral
modified 21 Nov 2012
by Tom Igoe
*/

//@libraries
#include <GSM.h>

//@modem verification object
GSMModem modem;
// IMEI variable
String IMEI = "";

void setup()
{
  // initialize serial communications
  Serial.begin(9600);
  //@Start modem test (reset and check response)
  Serial.print("Starting modem test...");

  if(modem.begin())
    Serial.println("modem.begin() succeeded");
  else
    Serial.println("ERROR, no modem answer.");
}

void loop()
{
  //@get modem IMEI
  Serial.print("Checking IMEI...");

  IMEI = modem.getIMEI();
&nbsp; // check IMEI response
  if(IMEI != NULL)
  {
    // show IMEI in serial monitor
    Serial.println("Modem's IMEI: " + IMEI);

    // reset modem to check booting:
    Serial.print("Reseting modem...");
    modem.begin();
    // get and check IMEI one more time
    if(modem.getIMEI() != NULL)
    {
      Serial.println("Modem is functoning properly");
    }
    else
    {
      Serial.println("Error: getIMEI() failed after modem.begin()");
    }
  }
  else
  {
    Serial.println("Error: Could not get IMEI");
  }
  // do nothing:
  while(true);
}