(SKU:TEL0097)SIM808 GPS/GPRS/GSM Shield V1.0通信模块
目录 |
概 述
SIM808 GPS/GPRS/GSM 是一款集成了四频段GSM/GPRS和GPS导航技术的Arduino扩展板。尺寸仅与一块信用卡相当,符合标准Arduino管脚分装,兼容Arduino UNO、 Leonardo、Mega等主控器。
SIM808相比上一代的SIM908在性能和稳定性上做了一定提升,除了正常的短信和电话功能外,还支持彩信、DTMF、FTP等功能。可以实现数据采集,无线数据收发等物联网应用。板载麦克风和耳机接口,节约了用户的使用成本,更加简单和方便,还可以通过外接天线接口直连GSM和GPS天线。
SIM808 GPS/GPRS/GSM Shield V1.0采用Simcom最新版SIM808模块,与市面上现有的SIM808模块相比,新版的模块具有更好的稳定性(注意GPS部分的AT指令与老版的SIM808模块无法兼容,请参考最下方“更多”中的AT指令)。
技术规格
- 工作电压:5V
- 输入电源:7-23V
- 四频 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)
- Class 4 (2 W @ 850/900MHz)
- 支持低功耗模式:100mA@7V-GSM模式
- 通过AT指令控制(3GPP TS 27.007,27.005 和 SIMCOM enhanced AT Commands)
- 支持GPS卫星导航技术
- 支持LED状态显示:显示电源供应状态,网络状态和工作模式
- 工作环境:-40℃ ~85℃
- 大小:69*54mm
接口示意图
模块接口及注意事项:
|
Arduino开发样例
在这一部分中,我们将演示如何通过Arduino控制SIM808 Shiel,DFRobot_SIM808是一个开源的类库,提供了简单且全面的调用接口,让任何人都可以快速完成项目开发。
准备
- 硬件
- Arduino UNO x1
- SIM808 扩展板 x1
- 外接电源 x1
- SIM手机卡
- 软件
- Arduino IDE 版本最新版 点击下载Arduino IDE
- 下载并安装 DFRobot_SIM808类库
步骤'
- 将插好SIM卡的扩展板插到Arduino UNO上去,确保外接电源和USB线已连接
- 拨动功能切换开关至None档,下载下方提供的样例代码
- 等待程序下载完毕,拨动开关至Arduino'档,这时SIM808即可与Arduino主板进行通信。
拨打电话
本样例样演示了如何通过DFRobot_SIM808 Shield 拨打电话
- 打开类库中的SIM808_CallUp样例或者粘贴下面的代码到你的工程里面
- 更换此处的电话号码为你希望拨打的号码:#define PHONE_NUMBER "187******39"
- 下载程序并将功能开关调整到“Arduino”
- sim808将会拨打电话到指定号码
#include <DFRobot_sim808.h> //Mobile phone number, need to change #define PHONE_NUMBER "187******39" DFRobot_SIM808 sim808(&Serial); void setup() { //mySerial.begin(9600); Serial.begin(9600); //********Initialize sim808 module************* while(!sim808.init()) { delay(1000); Serial.print("Sim808 init error\r\n"); } Serial.println("Sim808 init success"); Serial.println("Start to call ..."); //*********Call specified number*************** sim808.callUp(PHONE_NUMBER); } void loop() { //nothing to do } |
发送短信
本样例样演示了如何通过DFRobot_SIM808 Shield 发送短信
- 打开类库中的SIM808_SendSMS样例或者粘贴下面的代码到你的工程里面
- 更换此处的电话号码为你希望拨打的号码:#define PHONE_NUMBER "187******39"
- 下载程序并将功能开关调整到“Arduino”
- sim808将会发送短信到指定号码
#include <DFRobot_sim808.h> //Mobile phone number, need to change #define PHONE_NUMBER "187*******39" //The content of messages sent #define MESSAGE "hello,world" DFRobot_SIM808 sim808(&Serial); void setup() { //mySerial.begin(9600); Serial.begin(9600); //******** Initialize sim808 module ************* while(!sim808.init()) { delay(1000); Serial.print("Sim808 init error\r\n"); } Serial.println("Sim808 init success"); Serial.println("Start to send message ..."); //******** define phone number and text ********** sim808.sendSMS(PHONE_NUMBER,MESSAGE); } void loop() { //nothing to do } |
接听电话与读取短信
本样例样演示了如何通过DFRobot_SIM808 Shield 接听电话和读取短信
- 打开类库中的SIM808_LoopHandle样例或者粘贴下面的代码到你的工程里面
- 下载程序并将功能开关调整到“Arduino”
- 打开串口助手
- sim808自动接听电话并且将收到的短信发送到串口助手
#include <DFRobot_sim808.h> #define MESSAGE_LENGTH 20 char gprsBuffer[64]; char *s = NULL; DFRobot_SIM808 sim808(&Serial); void setup() { //mySerial.begin(9600); Serial.begin(9600); //******** Initialize sim808 module ************* while(!sim808.init()) { Serial.print("Sim808 init error\r\n"); delay(1000); } delay(3000); Serial.println("Init Success, please call or send SMS message to me!"); } void loop() { //******** Wait serial data ************* if(sim808.readable()){ sim808_read_buffer(gprsBuffer,32,DEFAULT_TIMEOUT); //Serial.print(gprsBuffer); //************** Detect the current state of the telephone or SMS ************************ if(NULL != strstr(gprsBuffer,"RING")) { sim808.answer(); }else if(NULL != (s = strstr(gprsBuffer,"+CMTI: \"SM\""))) { //SMS: $$+CMTI: "SM",24$$ char message[MESSAGE_LENGTH]; int messageIndex = atoi(s+12); sim808.readSMS(messageIndex, message,MESSAGE_LENGTH); Serial.print("Recv Message: "); Serial.println(message); } sim808_clean_buffer(gprsBuffer,32); } } |
读取短信
本样例样演示了如何通过DFRobot_SIM808 Shield 读取短信
- 打开类库中的SIM808_SMSread样例或者粘贴下面的代码到你的工程里面
- 下载程序并将功能开关调整到“Arduino”
- 打开串口助手
- Arduino会将SIM808会将收到的短信发送到串口助手
#include <DFRobot_sim808.h> #define MESSAGE_LENGTH 160 char message[MESSAGE_LENGTH]; int messageIndex = 0; char phone[16]; char datetime[24]; DFRobot_SIM808 sim808(&Serial); void setup() { //mySerial.begin(9600); Serial.begin(9600); //******** Initialize sim808 module ************* while(!sim808.init()) { Serial.print("Sim808 init error\r\n"); delay(1000); } delay(3000); Serial.println("Init Success, please send SMS message to me!"); } void loop() { //*********** Detecting unread SMS ************************ messageIndex = sim808.isSMSunread(); Serial.print("messageIndex: "); Serial.println(messageIndex); //*********** At least, there is one UNREAD SMS *********** if (messageIndex > 0) { sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime); //***********In order not to full SIM Memory, is better to delete it********** sim808.deleteSMS(messageIndex); Serial.print("From number: "); Serial.println(phone); Serial.print("Datetime: "); Serial.println(datetime); Serial.print("Recieved Message: "); Serial.println(message); } } |
建立TCP连接并发送GET请求
本样例样演示了如何通过DFRobot_SIM808 Shield 建立TCP连接并发送GET请求
- 打开类库中的SIM808_TCPConnection样例或者粘贴下面的代码到你的工程里面
- 下载程序并将功能开关调整到“Arduino”
- 打开串口助手
- 等待几分钟,直到串口输出"Connect mbed.org success",代表此时已经连接成功,否则请重试
- SIM808将会按照GET指令发送请求,在本样例中,串口会输出收到的数据“hello world!”
#include <DFRobot_sim808.h> //make sure that the baud rate of SIM900 is 9600! //you can use the AT Command(AT+IPR=9600) to set it through SerialDebug DFRobot_SIM808 sim808(&Serial); char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n"; char buffer[512]; void setup(){ //mySerial.begin(9600); Serial.begin(9600); //******** Initialize sim808 module ************* while(!sim808.init()) { delay(1000); Serial.print("Sim808 init error\r\n"); } delay(3000); //*********** Attempt DHCP ******************* while(!sim808.join(F("cmnet"))) { Serial.println("Sim808 join network error"); delay(2000); } //************ Successful DHCP **************** Serial.print("IP Address is "); Serial.println(sim808.getIPAddress()); //*********** Establish a TCP connection ************ if(!sim808.connect(TCP,"mbed.org", 80)) { Serial.println("Connect error"); }else{ Serial.println("Connect mbed.org success"); } //*********** Send a GET request ***************** Serial.println("waiting to fetch..."); sim808.send(http_cmd, sizeof(http_cmd)-1); while (true) { int ret = sim808.recv(buffer, sizeof(buffer)-1); if (ret <= 0){ Serial.println("fetch over..."); break; } buffer[ret] = '\0'; Serial.print("Recv: "); Serial.print(ret); Serial.print(" bytes: "); Serial.println(buffer); break; } //************* Close TCP or UDP connections ********** sim808.close(); //*** Disconnect wireless connection, Close Moving Scene ******* sim808.disconnect(); } void loop(){ } |
读取GPS数据
本样例样演示了如何通过DFRobot_SIM808 Shield 读取GPS数据
- 安装GPS天线
- 打开类库中的SIM808_GetGPS样例或者粘贴下面的代码到你的工程里面
- 下载程序并将功能开关调整到“Arduino”
- 打开串口助手
- 将其移至室外,等待几分钟,直到串口输出GPS数据
#include <DFRobot_sim808.h> DFRobot_SIM808 sim808(&Serial); void setup() { //mySerial.begin(9600); Serial.begin(9600); //******** Initialize sim808 module ************* while(!sim808.init()) { delay(1000); Serial.print("Sim808 init error\r\n"); } //************* Turn on the GPS power************ if( sim808.attachGPS()) Serial.println("Open the GPS power success"); else Serial.println("Open the GPS power failure"); } void loop() { //************** Get GPS data ******************* if (sim808.getGPS()) { Serial.print(sim808.GPSdata.year); Serial.print("/"); Serial.print(sim808.GPSdata.month); Serial.print("/"); Serial.print(sim808.GPSdata.day); Serial.print(" "); Serial.print(sim808.GPSdata.hour); Serial.print(":"); Serial.print(sim808.GPSdata.minute); Serial.print(":"); Serial.print(sim808.GPSdata.second); Serial.print(":"); Serial.println(sim808.GPSdata.centisecond); Serial.print("latitude :"); Serial.println(sim808.GPSdata.lat,6); sim808.latitudeConverToDMS(); Serial.print("latitude :"); Serial.print(sim808.latDMS.degrees); Serial.print("\^"); Serial.print(sim808.latDMS.minutes); Serial.print("\'"); Serial.print(sim808.latDMS.seconeds,6); Serial.println("\""); Serial.print("longitude :"); Serial.println(sim808.GPSdata.lon,6); sim808.LongitudeConverToDMS(); Serial.print("longitude :"); Serial.print(sim808.longDMS.degrees); Serial.print("\^"); Serial.print(sim808.longDMS.minutes); Serial.print("\'"); Serial.print(sim808.longDMS.seconeds,6); Serial.println("\""); Serial.print("speed_kph :"); Serial.println(sim808.GPSdata.speed_kph); Serial.print("heading :"); Serial.println(sim808.GPSdata.heading); //************* Turn off the GPS power ************ sim808.detachGPS(); } } |
功能调试(AT命令)
除了上述方式通过Arduino控制SIM808之外,你也可以在PC上通过串口发送AT指令的方式对SIM808扩展板进行调试。在这一部分中,我们将以图文形式,演示如何通过串口发送AT命令的方式来对SIM808扩展板进行调试。更多的指令和功能,请参考页末更多中的AT指令集。
准备
- 硬件
- Arduino UNO x1
- SIM808 扩展板 x1
- 外接电源 x1
- 软件
- Arduino IDE 版本最新版 点击下载Arduino IDE
- 串口调试助手(任意,能够发送16位进制数即可,可根据需要自己选择)
步骤
- 将SIM卡插在扩展板上,并把SIM808扩展板插上Arduino UNO,同时接上接上外接电源。
- 拨动功能切换开关至None档,下载一个样例代码Blink来确保串口不被占用(其他不占用串口的代码也可以)。
- 按下Boot开机键,等待SIM卡网络注册正常,既Net状态指示灯进入慢闪状态(3s一次)
- 拨动功能切换开关至USB_DBG档,此时我们就可以通过串口助手直接与SIM808芯片进行通信。
拨打电话
在串口助手中发送AT,得到返回OK代表通信正常。
按图所示,输入AT指令,应该得到相同内容。注意:电话号码后面需要跟一个英文分号“;”.
接听与挂断电话
发送短信
读取短信
TCP通讯
GPS信息输出
注意:GPS天线必须置于室外,才可以获得稳定的GPS定位数据输出。
发送AT+CGNSPWR=1命令(打开GPS电源) 发送AT+CGNSTST=1命令(开始从串口接收GPS数据)
如果GPS天线已经放置露天位置并收到GPS数据,等待几分钟后,会有正确的GPS定位数据输出。 当想暂停GPS数据输出,可发送AT+CGNSTST=0命令可暂停GPS数据输出。 当想关闭GPS,可发送AT+CGNSPWR=0命令关断GPS电源。 发送AT+CPOWD=1,将模块关机。
更多精彩指令,请参考页末的AT指令表。
SIM808省电模式
最小功能模式
最小功能模式就是将模块功能减小到最少,所以也使得模块的电流消耗减小到最少。可以通过命令"AT+CFUN=<fun>"把模块设置到该模式下,这条命令提供三种选择,用于设置不同功能。
- AT+CFUN=0:最小功能模式。这种模式下,串口仍然可以继续使用,但是与射频和SIM卡相关的功能以及部分AT命令不能使用。
- AT+CFUN=1:全功能模式(默认)。
- AT+CFUN=4:飞行模式。这种模式下,模块仍然可以使用串口,但是与射频相关以及部分AT指令不能使用。
更多功能请参考页末AT指令
说明与使用参考
说明:SIM808 GPS/GPRS/GSM Shield扩展板如果搭配Leonardo主板就相当于一块SIM808 with Leonardo mainboard,具体的使用方法可以参照SIM808 with Leonardo mainboard相关示例,鼠标单击以下链接跳转到相关WIKI。
注意:使用sim808的库的程序需要插上SIM卡,否则会初始化出错
更多