SIM808

概 述

SIM808 with Leonardo mainboard是DFRobot最新开发的一款具备GSM/GPRS/GPS功能的Arduino兼容的多功能型控制板。板载SIM808模块是一个完整的四频GSM/GPRS以及卫星GPS导航技术相结合的通信模块。采用4层PCB板布线设计,使得主板的尺寸得以更加紧凑,大小仅与一张信用卡相当。所有的原件,包括麦克风,耳机接口,外接电源,GSM & GPS功能集中在一个标准的Arduino板中,能够为您节约大量的开发周期和材料成本。并且对尺寸上的限制也会大大减小。
SIM808主控板同时支持多种供电方式,包括USB,外接电源,3.7V锂电池供电,板载锂电池充电电路,可以在外接供电的同时为锂电池充电。此外,SIM808主板支持低功耗睡眠模式,可以极大地延长了待机时间。这些特性对实际的应用开发有着非常大的帮助,特别是在车辆追踪,安保安防和将来的物联网使用。
SIM808 主控板采用SIMCOM最新版SIM808模块,与市面上现有的SIM808模块相比,新版的模块具有更好的稳定性。(注意GPS部分的AT指令与老版的SIM808模块无法兼容,请参考下方;更多中的AT指令集)。

技术规格

  • AVR Arduino 微控制器:ATmega32u4(Bootloader:Arduino Leonardo)

  • 工作电压:5V

  • 输入电压:5V(USB)/ 7~23V(外接电源)/ 3.5~4.3V(电池)

  • 数字I/O管脚:20(7个PWM:3, 5, 6, 9, 10, 11, 13)

  • 模拟输入管脚:12

  • Flash内存:32 KB (4 KB 用于bootloader)

  • SRAM:2.5 KB

  • EEPROM:1 KB

  • Clock Speed:16 MHz

  • GSM芯片:SIM808 四频GSM/GPRS+GPS模块

  • 四频 850/900/1800/1900MHz

  • GPRS multi-slot class 12/10

  • GPRS mobile station class B

  • 符合 GSM phase 2/2+

    • Class 4 (2 W @ 850/900MHz)

    • Class 1 (1 W @ 1800/1900MHz)

  • Bluetoot协议h:3.0+EDR (当前固件不支持蓝牙)

  • 支持低功耗模式:100mA@7V-GSM模式

  • 通过AT指令控制(3GPP TS 27.007,27.005 和 SIMCOM enhanced AT Commands)

  • 支持GPS卫星导航技术

  • 支持LED状态显示:显示电源供应状态,网络状态和工作模式

  • 工作环境:-40℃ ~85℃

  • 大小:73*54mm

接口示意图

DFR0355_Layout.png

pin

模块接口及注意事项

  • 模块开/关机控制引脚

数字口“D12”已内部连接至SIM808模块开/关引脚,可用于SIM808模块开/关机控制。

  • BOOT按钮

SIM808模块开关,短按Boot开机,长按3s关机

注意:当模块通过外接电源供电的时候(VIN端接入7~23V直流电源,非锂电池供电),模块会自动开机(即使处在关机状态下),“D12”引脚及BOOT按钮此时将无法使模块开机,此问题受限于模块的充电功能,可通过复位Arduino重新开机 |

  • NO BAT? 3.7V锂电池供电切换跳帽

若使用3.7V锂电池供电时(接入BAT接口),请将接在下图黄色箭头所指“NO BAT?”的2-Pin排针上的跳线帽拔掉(若跳线帽存在)。

锂电池供电切换跳线帽

  • 跳帽切换说明

SIM808主板支持3.7V锂电池供电,当你外接3.7V锂电池至“BAT”口时,请将“A”、“B”两点断开(即拔掉跳帽)。其它情况将A、B点通过跳线连接起来。(接入锂电池的时候,即使外接USB,也请将跳帽断掉)

注意:若用户操作不当,即:VIN电源及BAT同时接在主板上,且“NO BAT?”口接上了跳线帽,虽然不会造成主板的损坏,但有可能会使得接入BAT接口的锂电池寿命减少。

  • JP2信号输出接口

JP2接口为SIM808模块RI引脚及DTR引脚的控制口,两个功能引脚可通过跳线帽进行切换(主板背面有详细的标注)。RI及DTR控制口介绍如下:

  • RI端口

RI端口是用来检测模块的通话状态,具体如下:

  • 在通话时,如果模块作为被呼叫一方,当有收到来电时RI电平会被拉低,当呼叫方或被呼叫方挂断又或者模块接通来电之后RI电平又会返回高电平状态,如下图所示。

被叫通话时RI电平变化

  • 在接收短信或串口主动上报(URC)时,RI电平将会产生一个120ms的低脉冲,之后恢复到高电平状态,如下图所示。

短信或URC上报时RI电平变化

  • 在通话时,如果模块作为主呼出一方,RI端口将一直保持高电平,不会有任何变化。

  • DTR端口

DTR端口为SIM808模块休眠唤醒使用的端口,未操作时DTR为高电平。当模块进入休眠,拉低DTR大概50ms后,模块会被唤醒。(即睡眠唤醒功能引脚)

通过 USB接/AT指令 调试SIM808模块

您需要做以下准备工作。

1. SIM卡安装

将一张可用的SIM卡插在板子背面。

安装SIM卡

2. 将天线插在板子上

如果您需要继续做GPS功能,也可以将GPS模块连上。

连接天线,启动模块

3. 供电并与电脑连接

  1. 插入外部供电,可通过外部供电插口或VIN管脚输入7-23V DC电源,也可以将**NO BAT?**接口上的跳帽拔掉,用3.7V锂电池供电。
  2. 插上USB线,并连接到电脑,如果您已经安装Arduino软件,会自动为板子安装Leonardo的驱动,设备管理器里可以看到COM串口。

注意:模块工作时一定要接外部供电(VIN或者BAT接口都可以)

4. 启动SIM808

按住BOOT键,启动SIM808模块,然后观察板子,Net指示灯开始闪烁,快速闪烁代表在寻找网络,慢速闪烁(约3S一次)代表已经找到网络。

5. 下载串口AT指令调试代码

注意:SIM808主控板采用与Leonardo主板,共有两个串口,其中**Serial**(Serial0)与USB通信; **Serial1**与SIM808通信,鉴于USB和SIM808无法直接通信,需要烧入一段调试代码

DFR0355 通信机制

将下面的代码下载到我们的主板上,之后便可以通过USB口调试SIM808模块了。

    void setup() {
      Serial.begin(115200); //初始化Serial(即USB串口)
      Serial1.begin(115200);//初始化Serial1
    }

    void loop() {
      while (Serial1.available()) {
        Serial.write(Serial1.read());//如果Serial1收到数据则通过Serial输出
      }
      while (Serial.available()) {
        Serial1.write(Serial.read());//如果Serial收到数据则通过Serial1输出
      }
      delay(1);//短暂延时,避免USB-COM不稳定
    }

}

GSM/GPRS/GPS的基本功能

**串口助手选择:**网络上的串口助手种类很多,调试过程可以在任意的串口工具上实现,也可以直接在Arduino IDE的串口监视器上完成。

NOTE: 对于用AT指令发短信的功能,Arduino串口窗不能发送结束符。推荐串口工具CooltermDF Serial Debugger by Lisper

下面将以图文方式演示教大家最基本的AT指令使用。指令具体参数含义及更多的AT指令介绍请参照本页末尾中“更多”中的AT指令手册。

拨打电话

SIM808拨打电话

接听与挂断电话

SIM808来电接听与挂断

发送短信

SIM808发送短信

读取短信

SIM808读取短信

TCP通讯

SIM808 TCP连接发送

GPS通信

注意:GPS天线必须置于室外,才可以获得稳定的GPS定位数据输出。

1. 硬件连接

DC2.1 VIN接口接入(7-23V)外接电源。(注意板上NO BAT提示,没有接锂电池时请将跳线帽接上。)

下载先前的**“串口AT指令调试代码”**到主板,通过Micro USB线将计算机与主板连接,通过串口调试助手调试SIM808模块。

注意: 将GSM天线及GPS天线接在板上对应的接口上。

2. 开机

可编程通过Leonardo控制D12控制开机,也可以按住Boot按钮开机。(当Net灯开始闪烁表示模块已经启动)

GPS测试.JPG

3. 打开串口助手软件发送AT命令控制GPS通信

  1. 发送AT+CGNSPWR=1命令(打开GPS电源)
  2. 发送AT+CGNSTST=1命令 (开始从串口接收GPS数据)

如果GPS天线已经放置露天位置并收到GPS数据,等待几分钟后,会有正确的GPS定位数据输出。

  • 当想暂停GPS数据输出,可发送AT+CGNSTST=0命令可暂停GPS数据输出。
  • 当想关闭GPS,可发送AT+CGNSPWR=0命令关断GPS电源。
  • 发送AT+CPOWD=1,将模块关机。
  • 想重新开机再次按下RST按键。

SIM808模块的省电模式

SIM808 with Leonardo mainboard在BAT供电的情况下,我们在硬件设计上已经尽量为用户考虑——降低功耗。SIM808模块包含两种省电模式: 休眠模式最小功能模式。当模块被设置为最小功能模式并且进入休眠模式后,模块的电流消耗值会达到最低。
参考数据:实际测试中使用4V电源接入VBAT,板上未接其它电源的情况下,使SIM808模块进入休眠模式,电流约为15mA。

1 休眠模式

用户可以通过命令"AT+CSCLK=1"使模块进入休眠模式(AT命令的使用方式,请参考章节6)。在休眠模式下,模块的电流消耗会变得非常小。设置"AT+CSCLK=1"后,如果模块处于待机状态并且DTR是高电平,没有其它中断产生(来电,短信等),模块将自动进入休眠模式。在这种模式下,模块仍然能接收来自网络的呼叫和短息。

注意:在休眠模式下,串口将不可使用。

当模块处于休眠模式下,可以通过以下几种方式唤醒模块:

  1. 接收到外部中断信号(DTR信号);
  2. 接收到语音或数据呼叫;
  3. 接收到短信消息(SMS);
  4. 拉低DTR引脚;

2 最小功能模式

最小功能模式就是将模块功能减小到最少,所以也使得模块的电流消耗减小到最少。可以通过命令"AT+CFUN="把模块设置到该模式下,这条命令提供三种选择,用于设置不同功能。

  1. AT+CFUN=0:最小功能模式。这种模式下,串口仍然可以继续使用,但是与射频和SIM卡相关的功能以及部分AT命令不能使用。
  2. AT+CFUN=1:全功能模式(默认)。
  3. AT+CFUN=4:飞行模式。这种模式下,模块仍然可以使用串口,但是与射频相关以及部分AT指令不能使用。

使用该主控板给3.7V锂电池充电

SIM808模块集成了3.7V锂电池充电功能,最大充电电流为1A。下面将介绍如何使用SIM808 with Leonardo mainboard主板为3.7V锂电池充电:

  1. 将3.7V锂电池接入BAT接口,锂电池购买链接,请注意将“NO BAT?”处的跳线帽去掉。
  2. USB口通过MicroUSB线连接到电脑上,下载调试代码。
  3. 短按BOOT按钮,让模块开机。
  4. 通过串口助手发送命令"AT+ECHARGE=1"控制模块进入充电模式。
  5. VIN电源接口接入7-23V外接直流电源。(如之前已经接入VIN,请断开后重新接入)

上述五个步骤完成之后通过发送"AT+CBC"指令可查询电池电量及充电状态。关于指令的详细介绍请参考AT指令手册(详见本页尾"更多")。

更多功能,请参考下方更多资料的AT指令表。

Arduino代码调试

打电话

本案例通过AT命令的方式实现打电话的功能,请先开机!并注意替换代码中的电话号码。


void setup() {
  serialInit();
}

void loop() {
  Serial1.println("AT");
  delay(2000);

  Serial1.println("ATDxxxxxxxxxxx;");//xxxxxxxxxxx为电话号码
  while(1);
}

void serialInit(void)
{
  Serial.begin(115200); //初始化Serial(即USB串口)
  Serial1.begin(115200);//初始化Serial1
}
}

发短信

本案例通过AT命令的方式实现发短信的功能,请先开机!并注意替换代码中的电话号码。


void setup() {
 serialInit();
}

void loop() {
     Serial1.println("AT");
     updateSerial();
     //发送短信
     Serial1.println("AT+CMGF=1");
     updateSerial();
     Serial1.println("AT+CMGS=\"xxxxxxxxxxx\"");//xxxxxxxxxxx为电话号码
     updateSerial();
     Serial1.print("Hello, this is a test"); //短信内容
     updateSerial();
     Serial1.write(26);
     while(1);
}

void serialInit(void)
{
   Serial.begin(115200); //初始化Serial(即USB串口)
   Serial1.begin(115200);//初始化Serial1
}

void updateSerial()
{
  delay(2000);
  while (Serial.available()) {
    Serial1.write(Serial.read());//如果Serial收到数据则通过Serial1输出
  }
  while(Serial1.available()) {
    Serial.write(Serial1.read());//如果Serial1收到数据则通过Serial输出
  }

 }
}

以上两个测试代码非常的简单,也非常地容易理解。只需要往串口中输入对应的AT 命令,就可以实现对应的功能。适合二次开发

常见问题

问: 板子上的板载天线是蓝牙的天线吗?怎么使用蓝牙的功能?

  • 答: 您好,是蓝牙的天线。但由于新的SIM808芯片中,固件对蓝牙的支持不稳定,很可能造成芯片固件擦除,故目前蓝牙功能还不开放使用。如果需要使用蓝牙功能,请购买蓝牙模块或带BLE功能的主板。

**问:**为什么插上USB线,调试没有反应

  • 答: 您好,需要接入外部电源。

**问:**为什么拨打电话还没有回应

  • 答: 需要在号码后面添加“;”

**问:**为什么烧程序时烧不进去,提示串口占用了

  • 答: 可能把调试软件关掉就可以了

**问:**为什么用代码测试打电话的时候出现“Not connected”

  • 答: 需要等一会

**问:**用Arduino IDE串口调试的话如下图

  • 答: 需要调到“Both NL&CR”,而且需要点击发送按钮

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!

更多

DFshopping_car1.png DFRobot商城购买链接