简介
随着物联网概念的普及,越来越多的人想要了解并制作一款属于自己的物联网设备。通常的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,无法满足瞬时供电输出。
产品参数
- 供电电源 Vin:DC 7-23V
- 四频 850/900/1800/1900MHz
- GPRS multi-slot class 12/10
- GPRS mobile station class B
- GSM 2/2+标准
- Class 4 (2 W @ 850/900 MHz)
- Class 1 (1 W @ 1800/1900MHz)
- 通过AT指令控制(3GPP TS 27.007, 27.005和SIMCOM 增强AT命令集)
- 使用温度范围:-40 ~+85 ℃
- 串口波特率自适应
- 支持实时时钟(RTC)
- 支持SMS短信
- 支持彩信
- 支持电子邮箱
- 支持DTMF
- 支持蓝牙3.0
- 尺寸:70.0x53.3(mm)
接口说明
[]
- 注:除了按Boot按钮可实现开关机之外,也可以通过拉高D12引脚2秒,实现模块的开关机。
使用教程
通过下面的教程,使小伙伴们会使用该通信模块的,软件开关机、接打电话、收发短信、蓝牙等功能。让小伙伴们轻松的进入到 sim800系列模块的通信殿堂。
⚠注意:请使用7.5~12V外接电源供电。
准备
- 硬件
- 1 x UNO控制板
- 1 x SIM800C GPRS/GSM Shield V2.0通信模块
- 1 x 为UNO下载程序的USB线
- 1 x 12V直流电源
- 软件
- Arduino IDE 点击下载Arduino IDE
启动模块
按住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
* @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);
}
- 注:语音通话时 请注意天线的朝向 否则会影响语音通话质量
结果
- 这段程序结合前面的软件开机程序,用arduino 串口发送AT指令来控制模块 实现打电话功能,代码中“10086”为中国移动通信运营商“中国移动”客服电话 。这里你可以修改任何你想要拨打的电话(只要它是有效的)。
- 在烧录程序时 需要将模块上的“跳线帽”拔掉,因为烧录代码会占用串口。
- 程序烧录成功后,按“rest”键 几秒后耳机里会传出 移动客服语音通话声……
蓝牙串口
- 准备:手机端需下载蓝牙串口助手(仅支持安卓,iOS系统未开放蓝牙4.0以下的接口)
- 将跳线帽连接至D2-D3侧,本次使用软串口用作蓝牙通信。
/***************************************************
SIM800C GPRS/GSM Shield V2.0
***************************************************
This example show you how to use SIM800C GPRS/GSM Shield V2.0 BT-SPP.
@author Dongzi
@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';
}
}
结果
- 这个例程采用的是arduino的软串口,用2号和3号数字脚分别做串口的RX\TX。程序烧录后,手机端的 “spp”蓝牙串口可以通过模块的蓝牙实现和电脑端的串口助手间的无线通讯。
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指令表