(SKU:TOY0032)GSM GPRS Module 通信模块(Gadgeteer Compatible)

来自DFRobot Product Wiki
2015年11月16日 (一) 11:25Techsupport讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
SIM900-2.jpg

目录

概述

GSM模块使用上海SIMcom公司的SIM900高精度无线GSM/GPRS完全四频芯片,使用SMT封装且融 合了高性能的ARM926EJ-S内核。可以适应小型设备的高性价比解决方案。

模块采用标准工业级接口,SIM900配备支持GSM/GPRS 850/900/1800/1900MHz的语音、短信、 数据和传真,高内聚性且低功耗。

模块在通信时瞬时电流可达2A,所以需要给控制板外接电源,一般的7.5V 2000mA直流电源即可。也可另购直流7.5V电源或者电池盒

技术规格

  • 全四频 850/ 900/ 1800/ 1900 MHz
  • GPRS多热点类型10/8
  • GPRS符合B型基站
  • GSM 2/2+ 标准
  • 4型 (2 W @850/ 900 MHz)
  • 1型 (1 W @ 1800/1900MHz)
  • 支持SAIC (Single Antenna Interference Cancellation)
  • 采用兼容AT指令控制(GSM 07.07 ,07.05以及SIMCOM增强型指令)
  • 低电运行时0.1mA
  • 工作温度 -40°C to +85 °C

SIM900-1.jpg

适应性

  • 兼容蜂窝AT指令

AT指令简介

使用任何串口调试终端,需要勾选“添加新行”或者类似的。使用Arduino IDE 1.0以上版本的串口窗口需要选择“Both NL& CR”,低版本的IDE不支持这个功能。

所谓AT指令,就是通讯模块通信用的一种指令,以字母“AT”开头。发送AT指令后,会返回以"+"开头的执行结果,如果出错会返回“ERROR”信息,如果正常则会在消息最后发“OK”字样。

下面仅以常用功能举例,复杂的功能请参见SIM900_ATC文档。

  • 测试信号质量,用串口发送下面的指令:
 AT+CSQ

此时会收到形如下面这样的回复消息:

+CSQ: 11,0
OK
  • 拨打电话(这条指令后的分号不可少),可以把下面指令里的10086,替换成其他号码。
 ATD10086;
  • 挂断电话
 ATH
  • 接听电话
 ATA
  • 发送短信

首先设置成文本模式:

 AT+CMGF=1

设置使用模块默认的国际标准字母字符集发送短信

 AT+CSCS?

发送目标号码

 AT+CMGS="10086"

此时系统会出现“>”提示符,直接输入短信内容

> YE

这条短信的目的是发送给10086,用来查询余额。发送成功以后会收到系统如下提示,后面的数字表示发送短信的编号。

+CMGS: 115 
OK
  • 接收短信

如果接收到了短信,则系统会在串口输出如下的提示,后面的数字表示短信收件箱里的短信数目:

+CMTI: "SM",2

发送如下AT指令,后面的数字是短信索引号。由于使用的是IRA编码,中文短信不能显示,可以发英文短信用来测试。

AT+CMGR=2


正面和背面

SIM900-1.jpg
SIM900-3.jpg

与Arduino Dreamer连接示意

SIM900-4.jpg

示例代码


//////////////////////////////////////////////////////////////////
//            SIM900 GSM/GPRS模块驱动
//模块使用7.5V电源供电,在测试时必须插入SIM卡
//////////////////////////////////////////////////////////////////

#include <Wire.h>

#define  GprsPWR     37    //模块电源开关信号,处理器输出高电平会导致模块拉低PWRKEY来开启和关闭模块。 用户可以通过 拉低PWERKEY 保持至少1秒然后释放来开启和关闭模块。
#define  GprsNRST    2    //外部复位控制脚,处理器控制信号给高电平,导致模块管脚复位低电平复位。
#define  GprsSTATUS  10   //模块状态输出管脚,低电平:模块掉电,高电平:模块在工作状态,模块电源开关或者模块复位后至少需要等待2.5秒后才能检查STATUS管脚状态。


////////////////////////////////////////////////////////////////////////////////////
//函数原型:  void GprsPWRkey(void)                              	     
//参数说明:  无                                        
//返回值:    无                                                               
//说明:      GPRS模块开关机时序
///////////////////////////////////////////////////////////////////////////////////
void GprsPWRkey(void)
{
  digitalWrite(GprsPWR,HIGH);
  delay(1500);  //至少维持1秒钟
  digitalWrite(GprsPWR,LOW);
  delay(2500);  //等待2.5秒后,在去检测STATUS管脚,STATUS低电平:模块掉电,高电平:模块在工作状态
}

////////////////////////////////////////////////////////////////////////////////////
//函数原型:  void GprsReset(void)                            	     
//参数说明:  无                                        
//返回值:    无                                                               
//说明:      GPRS模块复位时序
///////////////////////////////////////////////////////////////////////////////////
void GprsReset(void)
{
  digitalWrite(GprsNRST,HIGH);
  delayMicroseconds(50);  //至少50US复位信号
  digitalWrite(GprsNRST,LOW);
  delay(2500);  //等待2.5秒后,在去检测STATUS管脚,STATUS低电平:模块掉电,高电平:模块在工作状态
}

////////////////////////////////////////////////////////////////////////////////////
//函数原型:  void GprsInit(void)                                	     
//参数说明:  无                                        
//返回值:    开机状态, 0:模块掉电  1:模块在工作状态                                                          
//说明:      GPRS初始化
///////////////////////////////////////////////////////////////////////////////////
int GprsInit(void)
{
  int temp = 0;
  pinMode(GprsPWR,OUTPUT); //将各个控制IO设置为输出
  pinMode(GprsNRST,OUTPUT);  
  pinMode(GprsSTATUS,INPUT); 
  Serial.begin(9600);      //使用serial 2 和 GPRS通信
  Serial2.begin(9600);      //使用serial 2 和 GPRS通信

  GprsReset();  //模块复位
  
  return temp;
}

////////////////////////////////////////////////////////////////////////////////////
//函数原型:  void GprsInit(void)                                	     
//参数说明:  无                                        
//返回值:    无                                                          
//说明:      GPRS模块测试,打电话,在串口调试终端输入ATDxxxxx13800138000;回车换行 拨打电话
//           发送AT+CSQ回车换行 查询信号强度。在这里可以测试各种AT指令 
///////////////////////////////////////////////////////////////////////////////////
void GprsTest(void)
{
   Serial2.print("A");  //发送一个大写字母A来同步GPRS模块的波特率  
  
          //发送短信
     Serial2.println("AT+CMGF=1");
     Serial.println("AT+CMGF=1");
     delay(1000);
     Serial2.println("AT+CMGS=\"13800138000\"");//xxx为电话号码
     Serial.println("AT+CMGS=\"13800138000\"");//xxx为电话号码
     delay(1000);
     Serial2.print("TEST");
     Serial.print("TEST");
     delay(1000);
     Serial2.write(26);
      Serial2.write(26);
      Serial2.println();
     delay(5000);

   // SMS to 10086 for Queky
     Serial2.println("AT+CMGS=\"10086\"");//xxx为电话号码
     Serial.println("AT+CMGS=\"10086\"");//xxx为电话号码
     delay(1000);
     Serial2.print("YE");
     Serial.print("YE");
     delay(1000);
     Serial2.write(26);
      Serial2.write(26);
      Serial2.println();

     while(1){
        if(Serial.available())  //读取 USB串口数据将数据发送给GPRS模块
       {
         char input = Serial.read();
        Serial2.print(input); 
       }
       if( Serial2.available())  //接收 GPRS模块返回数据,将数据显示到USB串口终端
      { 
        char input2 = Serial2.read();
        Serial.print(input2);
      }
     }
}


void setup()
{
    GprsPWRkey();
    GprsInit();
    delay(2000);
    //GprsReset();
   GprsTest();
}

void loop()
{

    
}


产品购买

Nextredirectltr.png购买 梦想家系列-SIM900 GSM 模块(兼容Gadgeteer) (SKU:TOY0032)

个人工具
名字空间

变换
操作
导航
工具箱