SIM800C GPRS GSM Shield 通信模块

简介

随着物联网概念的普及,越来越多的人想要了解并制作一款属于自己的物联网设备。通常的WiFi并不能满足移动应用场景,而新出现的NB-IoT网络覆盖范围有限,所以目前普及率最广的2G网络就成了最好的选择之一。 DFRobot更新了之前的GSM/GPRS扩展板,采用摩拜单车同系列SIM800C GSM/GPRS芯片。提供稳定可靠的物联网链接。用户可以通过UART通信接口来发送AT指令,实现拨打电话,发送短信,GPRS远程数据采集等功能。 SIM800C GPRS/GSM 扩展板采用Arduino标准封装,可外接Arduino UNO,Leonardo等控制器。扩展板外扩TX&RX接口,采用跳帽连接方式。可使用软串口连接通信,方便开发。内置蓝牙3.0无线通信功能,可与手机配合实现点对点通信,更多高级功能请参考SIM800C使用手册。

注意:由于GSM是脉冲式的发射功率,平均电流很低,但瞬时电流可达1.5A以上,所以使用GSM扩展板时,请使用外接供电。USB口只能提供5V@500mA,无法满足瞬时供电输出。

产品参数

接口说明

[]

使用教程

通过下面的教程,使小伙伴们会使用该通信模块的,软件开关机、接打电话、收发短信、蓝牙等功能。让小伙伴们轻松的进入到 sim800系列模块的通信殿堂。

注意:请使用7.5~12V外接电源供电。

准备

启动模块

按住boot键2秒或者下载下面程序启动模块。

void setup()
{
  //设置引脚为输出模式
  pinMode(12, OUTPUT);
  //GSM开机时序
  digitalWrite(12, HIGH);
  delay(2000);
  digitalWrite(12, LOW);
}
void loop()
{
}

结果

程序上传成功后,用跳线帽将串口连接至TX & RX侧,按下reset键,会观察到Net灯(网络状态指示)——闪烁:

NET:网络状态指示灯:
熄灭——模块没有工作,
64ms亮/800ms熄灭——模块没有找到网络,
64ms亮/3000ms熄灭——模块注册到网络。

注意:每一次打开串口或者按下复位键都会让模块开机或者关机一次,如发现NET灯没有反应(关机),请再按一下Reset按键启动模块。

打电话


/***************************************************
 * SIM800C GPRS/GSM  Shield V1.0
 *
 ***************************************************
 * This example show you how to use SIM800C GPRS/GSM  Shield V1.0 to make a call.
 *
 * @author Dongzi(1185787528@qq.com)
 * @version  V1.0
 * @date  2016-9-1
 * All above must be included in any redistribution
 *This code is tested on SIM800C GPRS/GSM Shield V1.0.
 ****************************************************/
#define power_key 12       //power key is connected to digital pin 12
void inint();
void power_on();
void setup() {
  inint();
}
void loop() {
  Serial.println("ATD10086;"); //对方电话号码为10086,别漏了最后的分号“;”
  while(1);
}
void inint()
{
  pinMode(power_key, OUTPUT);
  Serial.begin(115200);
  power_on();
  delay(500);
}
void power_on()
{
  digitalWrite(power_key,HIGH);
  delay(1500);
  digitalWrite(power_key, LOW);
  Serial.println("AT");
  delay(300);
  Serial.println("AT");
  delay(8000);
}

结果

  1. 这段程序结合前面的软件开机程序,用arduino 串口发送AT指令来控制模块 实现打电话功能,代码中“10086”为中国移动通信运营商“中国移动”客服电话 。这里你可以修改任何你想要拨打的电话(只要它是有效的)。
  2. 在烧录程序时 需要将模块上的“跳线帽”拔掉,因为烧录代码会占用串口。
  3. 程序烧录成功后,按“rest”键 几秒后耳机里会传出 移动客服语音通话声……

蓝牙串口

/***************************************************
       SIM800C GPRS/GSM  Shield V2.0

     ***************************************************
       This example show you how to use SIM800C GPRS/GSM  Shield V2.0 BT-SPP.

       @author Dongzi(1185787528@qq.com)
       @version  V2.0
       @date  2016-9-1
       All above must be included in any redistribution
       This code is tested on SIM800C GPRS/GSM Shield V2.0.
     ****************************************************/
#include <SoftwareSerial.h>
SoftwareSerial bt_cmd(2, 3);

void blue_spp();
void splitString_t(char *data);
#define power_key 12

String cmd[6] = {
  "AT", "AT+BTHOST?", "AT+BTPOWER=1", "AT+BTPAIR=1,1", "AT+BTACPT=1", "AT+BTSPPSEND"
};
char buffer[50], power_mark = 0; // Serialbuffer and power flag

void setup()
{
  pinMode(power_key, OUTPUT);
  Serial.begin(9600);
  bt_cmd.begin(9600);
  blue_spp();
  delay(800);
  bt_cmd.println(cmd[4]);
  delay(800);
  bt_cmd.println(cmd[3]);
  delay(800);
}
void loop()
{
  data_R1();
  data_R();
}
void data_R1()  {
  if (bt_cmd.available() > 0)
  {
    int index = 0;
    delay(100);             //wait data end
    int numChar = bt_cmd.available();
    if (numChar > 50)
    {
      numChar = 50;
    }
    while (numChar--)
    {
      buffer[index++] = bt_cmd.read();
    }
    splitString(buffer);
  }
}
void blue_spp()
{
  bt_cmd.println(cmd[0]);
  delay(20);
  data_R1();
  delay(20);
  bt_cmd.println(cmd[2]);
  delay(200);
  bt_cmd.println(cmd[1]);
  data_R1();
  if (bt_cmd.find("ERROR"))
  {
    bt_cmd.println(cmd[1]);
    Serial.println("start again");
  }
  else
    Serial.println("bt_power_on");

}

void splitString(char *data)
{
  Serial.print("Data entered:");
  Serial.println(data);
  for (int x = 0; x < 50; x++)
  {
    buffer[x] = '\0';
  }
}
void data_R()  {
  if (Serial.available() > 0)
  {
    int index = 0;
    delay(100);
    int numChar = Serial.available();
    if (numChar > 50)
    {
      numChar = 50;
    }
    while (numChar--)
    {
      buffer[index++] = Serial.read();
    }
    splitString_t(buffer);
  }
}
void splitString_t(char *data)
{
  bt_cmd.println(cmd[5]);
  delay(5);
  bt_cmd.print(data);
  bt_cmd.write(0x1a);
  delay(5);
  for (int x = 0; x < 50; x++)
  {
    buffer[x] = '\0';
  }
}

结果

TEL0089 SIM800C Bluetooth Communication

常用AT指令说明

1、“AT\r\n”

返回:AT\r\n OK\r\n
说明:AT指令测试,可以用于检测模块时候启动

2、“ATE0\r\n”

返回:ATE0\r\n OK\r\n
说明:关闭回显

3、“AT+CNMI=2,1,0,1,0\r\n”

返回:OK\r\n
说明:设置新短消息URC上报格式 此命令要在SMS ready后才能设置,即当SIM800C模块告知Arduino“SMS ready”后才能设置,收到短信后URC上报,1为短信息在存储器中的序号,+CMTI:"SM",1

4、“AT+CSCS="UCS2"\r\n”

返回:OK\r\n
说明:设置短消息使用UCS2编码

5、“AT+CSQ\r\n”

   返回:+CSQ:`<rssi>`,`<ber>`  OK\r\n
                `<rssi>
                      0 小于等于-115dBm
                      1 -111dBm
                      2...30 -110... -54dBm
                      31 大于等于-52dBm
                      99 未知或者不可测
                `<ber>` (百分比):
                     0...7 表中的RXQUA值,参考GSM 05.08 [20] 章节7.2.4
                     99 未知或者不可测

6、“ATA\r\n”

返回:OK\r\n
说明:接听电话

7、“ATH0\r\n”

返回:OK\r\n
说明:挂掉电话

8、“AT+CLIP=1\r\n”

返回:OK\r\n
说明:开启来电显示

9、“ATD15982373181;\r\n”

返回:OK\r\n
说明:拨打电话

10、“AT+DDET=1\r\n”

返回:OK\r\n
说明:开启DTMF功能

11、“AT+CMGS="00310038003600310036003300360036003500340037"\r\n”

返回:>
说明:引号内为手机号码的UCS2-BIG编码。发送短信,当返回“>”字符后,输入要发送的短信内容,内容编码为UCS2编码(前面设置的),然后勾选HEX发送,发送“1a”,表示以CTRL+Z(0x1A)结束。

12、“AT+CMGR=1\r\n”

返回:+CMTI:........
说明:读取短信,返回为短信的内容
参数说明:“1”为短信在SIM800H模块中存储的序号

13、“AT+CMGD=1\r\n”

返回:OK\r\n
说明:删除存储器中序号为1的短消息

注意:更多的AT指令请参考AT指令表

更多

DFshopping_car1.png DFRobot商城购买链接