产品简介
这款NB-IoT扩展板专为Arduino控制器设计,兼容全球频段,支持CAT-M、NB-IoT、GSM、GPRS、EDGE的通信方式以及GNSS的卫星定位功能。
其超低功耗和精准定位特性,加上对CAT-M和GNSS卫星定位的支持,使它成为智慧物流、资产跟踪、智慧城市等领域的理想选择。
该扩展板不仅适用于原型开发,也适用于小批量生产,是低功耗、低延迟、中等吞吐量应用的最佳选择。它内置了GNSS卫星定位,如GPS、GLONASS、Galileo和BD,非常适合用于远程控制、移动追踪等物联网应用。
SIM7070G还内置了丰富的AT指令,并提供了详细的库、使用手册和应用文档,包括HTTP、MQTT、FTP、CoAP、NIDD、PING等网络通信协议的使用方法,让你无需深入学习底层网络协议,即可快速上手。
最重要的是,SIM7070G已通过全球多个国家和地区的相关认证,具体如下:
Anatel:巴西电信设备认证
AT&T:美国电信公司认证
CCC:中国3C强制认证
CE:欧洲CE认证
UKCA:英国UK Conformity Assessed认证
FCC:美国的联邦通信委员会认证
GCF:全球认证论坛(GCF)
IC:加拿⼤电信设备认证
JATE:日本工业标准(Japanese Industrial Standards,JIS)认证
TA:中国无线电发射认证
NCC:台湾电信终端认证
KC:韩国认证 (Korea Certification - KC)
PTCRB:PTCRB认证组织
RCM:澳大利亚新西兰合规认证
REACH:欧洲化学品认证
RoHS:欧洲环保认证
TELEC:日本电信设备认证
T-mobile:T-mobile移动通讯服务商认证
US Cellular:US Cellular移动通讯服务商认证
Verizon:Verizon移动通讯服务商认证
Deutsche Telekom:德国电信认证
有了以上的相关机构的检测和认证,你可以放心的将SIM7070G用于你的产品或项⽬,无需担心合规问题。
产品特点
- NBIoT支持全球频段
- ⽀持CAT-M通信
- ⽀持GNSS卫星定位(GPS、CLONASS、Galileo、BD)
- 支持CAT-NB/CAT-M/GSM/GPRS/EDGE多种频段
- 内置AT指令,软件库已封装,⽆需底层开发
- 认证齐全
应用场景
- 物流和供应链管理
- 智慧路灯、污水检测、环境检测等城市监测
- 物联网数据传输和远程控制
产品参数
工作电压:5V(注意:模块在连接网络瞬间会消耗大量电流,工作时,需外接电源)
输入电压:7~12VDC
数据传输
- GPRS:85.6Kbps(UL),107Kbps(DL)
- EDGE:296Kbps(UL),236.8Kbps(DL)
- LTE 类别 M1 :589Kbps (DL)
- LTE 类别 M1 :1119Kbps (UL)
- LTE 类别 NB1/NB2 :127Kbps (DL)
- LTE 类别 NB1/NB2 :158.5Kbps (UL)
- EGPRS:兼容 MCS 12
⽀持频段
NBIoT
- B1 B2 B3 B4 B5 B8 B12 B13 B18 B19 B20 B25 B26 B28 B66 B71 B85
CAT-M(LTE-HD-FDD)
- B1 B2 B3 B4 B5 B8 B12 B13 B14 B18 B19 B20 B25 B26 B27 B28 B66 B85
GSM/GPRS
- GSM850MHz
EDGE
EGSM900MHz
DCS1800MHz
PCS1900MHz
GNSS
- GPS
- GLONASS
- BeiDou
- Galileo
- 协议:NMEA
接口
NBIoT天线接⼝:IPEX1
GNSS天线接⼝:IPEX1
SIM卡:NBIoT/CAT-M/2G卡(仅⽀持1.8V的SIM卡,不⽀持3V卡)
功能示意图
注意:
1.软硬串口切换开关:由于Arduino UNO/Mega等控制器默认D0和D1为硬件串口,与USB端相连。很多需要使用串口的扩展板,在使用时会出现串口冲突的问题,所有特别设计了一个软串口接口,用户可以使用软串口和Arduino进行通信。扩展阅读:
2.为了方便程序控制,Boot按键默认引至D12引脚,可以通过拉高D12引脚2秒实现模块的开机。SIM7070G开机后会有2秒左右初始化时间,初始化完成后可正常使用。
尺寸图
使用教程(基于SIM7070库)
准备工作
硬件
- 1 x Arduino UNO控制板(可兼容LEONARDO和MEGA,请参考演示程序的注释做出相应改动)
- 1 x SIM7070G Arduino NB-IoT/LTE/GPRS 扩展板
- 1 x 为UNO下载程序的USB线
- 1 x 7V~12V直流电源
- GPS天线
- LTE天线
软件
- 安装驱动:下载驱动文件并在桌面解压,将扩展板接入电脑,在设备管理器中安装5个驱动,安装好后如下图
Arduino IDE, 点击下载Arduino IDE
如何安装库文件,点击链接
硬件连接
将扩展板插在Arduino UNO控制器上
样例代码(串口AT指令)
- 由于Arduino UNO 只有一个硬件串口,使用时,推荐使用软串口通信,SIM7000库文件默认使用软串口,请将软硬件串口控制开关切换至TX>D8,RX>D7。
- 本示例使用串口发送AT指令控制SIM7070G扩展板
#include <DFRobot_SIM7070G.h>
#define PIN_TX 7
#define PIN_RX 8
SoftwareSerial mySerial(PIN_RX, PIN_TX);
DFRobot_SIM7070G sim7070g(&mySerial);
void setup()
{
delay(1500);
Serial.begin(19200);
mySerial.begin(19200);
Serial.println("Turn ON SIM7070G......");
if (sim7070g.turnON()) {
Serial.println("Turn ON !");
}
Serial.println("Set baud rate......");
while (1) {
if (sim7070g.setBaudRate(19200)) {
Serial.println("Set baud rate:19200");
break;
} else {
Serial.println("Faile to set baud rate");
delay(1000);
}
}
Serial.println("For example, if you type AT\\r\\n, OK\\r\\n will be responsed!");
Serial.println("Enter your AT command :");
}
void loop()
{
mySerial.listen();
while (mySerial.available()) {
Serial.write(mySerial.read());
}
mySerial.flush();
while (Serial.available()) {
mySerial.write(Serial.read());
}
}
结果
在串口监视器里发送AT命令来控制SIM7070G扩展板,并查看扩展板的响应
样例代码(GNSS定位)
- 使用GNSS定位时,先插上GPS天线,并将扩展板放到室外。
#include <DFRobot_SIM7070G.h>
#define PIN_TX 7
#define PIN_RX 8
SoftwareSerial mySerial(PIN_RX, PIN_TX);
DFRobot_SIM7070G sim7070g(&mySerial);
void setup()
{
delay(1500);
Serial.begin(115200);
mySerial.begin(19200);
Serial.println("Turn ON SIM7070G......");
if (sim7070g.turnON()) {
Serial.println("Turn ON !");
}
Serial.println("Set baud rate......");
while (1) {
if (sim7070g.setBaudRate(19200)) {
Serial.println("Set baud rate:19200");
break;
} else {
Serial.println("Faile to set baud rate");
delay(1000);
}
}
Serial.println("Check SIM card......");
if (sim7070g.checkSIMStatus()) {
Serial.println("SIM card READY");
} else {
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart SIM7070G");
while (1);
}
Serial.println("Init positioning function......");
while (1) {
if (sim7070g.initPos()) {
Serial.println("Positioning function initialized");
break;
} else {
Serial.println("Fail to init positioning function");
delay(1000);
}
}
}
void loop()
{
Serial.println("Enter anything end with CRLF to get positioning ");
char loge[10];
readSerial(loge);
Serial.println("Getting position......");
if (sim7070g.getPosition()) {
Serial.print(" Longitude : ");
Serial.println(sim7070g.getLongitude());
Serial.print(" Latitude : ");
Serial.println(sim7070g.getLatitude());
} else {
Serial.println("Wrong data try again");
}
}
int readSerial(char result[])
{
int i = 0;
while (1) {
while (Serial.available() > 0) {
char inChar = Serial.read();
if (inChar == '\n') {
result[i] = '\0';
Serial.flush();
return 0;
}
if (inChar != '\r') {
result[i] = inChar;
i++;
}
}
}
}
结果
串口监视器上会打印一些初始化成功的信息,之后会打印经纬度信息
样例代码(MQTT连接)
- 本示例是操作SIM7070G扩展板来进行MQTT通信
#include <DFRobot_SIM7070G.h>
#define serverIP "iot.dfrobot.com"
#define IOT_USERNAME "USERNAME"
#define IOT_KEY "PASSWORD"
#define IOT_TOPIC "TOPIC"
#define IOT_CLIENT "dfrobot"
#define PIN_TX 7
#define PIN_RX 8
SoftwareSerial mySerial(PIN_RX, PIN_TX);
DFRobot_SIM7070G sim7070g(&mySerial);
void setup()
{
delay(1500);
int signalStrength;
Serial.begin(115200);
mySerial.begin(19200);
Serial.println("Turn ON SIM7070G......");
if (sim7070g.turnON()) {
Serial.println("Turn ON !");
}
Serial.println("Set baud rate......");
while (1) {
if (sim7070g.setBaudRate(19200)) {
Serial.println("Set baud rate:19200");
break;
} else {
Serial.println("Faile to set baud rate");
delay(1000);
}
}
Serial.println("Check SIM card......");
if (sim7070g.checkSIMStatus()) {
Serial.println("SIM card READY");
} else {
Serial.println("SIM card ERROR, Check if you have insert SIM card and restart SIM7070G");
while (1);
}
Serial.println("Set net mode......");
while (1) {
if (sim7070g.setNetMode(sim7070g.eNB)) {
Serial.println("Set NB mode");
break;
} else {
Serial.println("Fail to set mode");
delay(1000);
}
}
Serial.println("Get signal quality......");
delay(1500);
signalStrength = sim7070g.checkSignalQuality();
Serial.print("signalStrength =");
Serial.println(signalStrength);
delay(500);
Serial.println("Attaching service......");
while (1) {
if (sim7070g.attacthService()) {
Serial.println("Attach service");
break;
} else {
Serial.println("Fail to Attach service");
delay(1000);
}
}
}
void loop()
{
String sendData;
Serial.print("Connect to :");
Serial.println(serverIP);
if (sim7070g.openNetwork(sim7070g.eTCP, serverIP, 1883)) { //Connect to server
Serial.println("Connected !");
} else {
Serial.println("Failed to connect");
return;
}
delay(200);
Serial.print("Connect to : ");
Serial.println(IOT_USERNAME);
if (sim7070g.mqttConnect(IOT_CLIENT, IOT_USERNAME, IOT_KEY)) {
Serial.println("Connected !");
} else {
Serial.println("Failed to connect");
return;
}
delay(200);
Serial.println("Input data end with CRLF : ");
sendData = readSerial(sendData);
Serial.print("Send data : ");
Serial.print(sendData);
Serial.println(" ......");
if (sim7070g.mqttPublish(IOT_TOPIC, sendData)) {
Serial.println("Send OK");
} else {
Serial.println("Failed to send");
return;
}
delay(200);
Serial.println("Close connection......");
if (sim7070g.closeNetwork()) {
Serial.println("Close connection !");
} else {
Serial.println("Fail to close connection !");
return;
}
delay(2000);
}
String readSerial(String result)
{
int i = 0;
while (1) {
while (Serial.available() > 0) {
char inChar = Serial.read();
if (inChar == '\n') {
result += '\0';
while (Serial.read() >= 0);
return result;
}
if (i == 50) {
Serial.println("The data is too long");
result += '\0';
while (Serial.read() >= 0);
return result;
}
if (inChar != '\r') {
result += inChar;
i++;
}
}
}
}
结果
串口监视器会打印一些信息,读取你输入的数据,并将数据发送到指定的主题
API函数
/**
* @fn DFRobot_SIM7070G
* @brief DFRobot_SIMcore 抽象类的构造函数。构建串行端口。
* @param s 抽象类的类指针对象,这里可以填入串口对象的指针。
* @return None
*/
DFRobot_SIM7070G(Stream *s);
~DFRobot_SIM7070G(){};
/**
* @fn recv
* @brief 接收数据
* @param buf 接收数据内容
* @param maxlen 接收数据长度
* @return int 获取数据长度
*/
int recv(char* buf, int maxlen);
/**
* @fn checkSignalQuality
* @brief 检查信号质量
* @return 0-30:信号质量
*/
int checkSignalQuality(void);
/**
* @fn batteryPower
* @brief 充电等级
* @return int 充电等级
*/
int batteryPower(void);
/**
* @fn setNetMode
* @brief 设置网络模式
* @param net 网络模式
* @n GPRS: GPRS 模式
* @n NB: NB-IOT 模式
* @return bool类型,表示设置状态
* @retval ture Success
* @retval false Failed
*/
bool setNetMode(eNet net);
/**
* @fn attacthService
* @brief 打开连接
* @return bool类型,表示打开连接状态
* @retval true Success
* @retval false Failed
*/
bool attacthService(void);
/**
* @fn setBaudRate
* @brief 修改波特率避免出错
* @param rate 波特率值
* @n 可选值:1200 2400 4800 9600 19200 38400
* @note SIM7070G默认波特率为115200,请降低波特率,避免失真
* @return bool类型,表示设置状态
* @retval true Success
* @retval false Failed
*/
bool setBaudRate(long rate);
/**
* @fn checkSIMStatus
* @brief 检测SIM卡
* @return bool类型,表示检测卡状态
* @retval true 有卡
* @retval false 无卡
*/
bool checkSIMStatus(void);
/**
* @fn openNetwork
* @brief 开始连接
* @param ptl 选择连接协议
* @n TCP 选择 TCP
* @n UDP 选择 UDP
* @param host 主机域名
* @param port 端口号
* @return bool类型,表示打开状态
* @retval true Success
* @retval false Failed
*/
bool openNetwork(eProtocol ptl, const char *host, uint16_t port);
/**
* @fn closeNetwork
* @brief 结束连接
* @return bool类型,表示关闭状态
* @retval true Success
* @retval false Failed
*/
bool closeNetwork(void);
/**
* @fn turnON
* @brief 打开SIM7070G
* @return bool类型,表示开机状态
* @retval true Success
* @retval false Failed
*/
bool turnON(void);
/**
* @fn initPos
* @brief 初始化 SIM7070G 定位模式
* @return bool类型,表示初始化状态
* @retval true Success
* @retval false Failed
*/
bool initPos(void);
/**
* @fn mqttConnect
* @brief MQTT 连接请求
* @param iot_client 用户定义客户端名称
* @param iot_username 用户名标识正在连接的用户的名称
* @param iot_key 用户密码
* @return bool类型,表示连接状态
* @retval true Success
* @retval false Failed
*/
bool mqttConnect(char* iot_client, char* iot_username, char* iot_key);
/**
* @fn mqttPublish
* @brief MQTT 发送命令
* @param iot_topic 目标标题
* @param iot_data 你想要发送的数据
* @return bool类型,表示发送状态
* @retval true Success
* @retval false Failed
*/
bool mqttPublish(char* iot_topic, String iot_data);
/**
* @fn mqttSubscribe
* @brief 订阅MQTT频道
* @param iot_topic 订阅的MQTT密钥
* @return bool类型,表示订阅状态
* @retval true Success
* @retval false Failed
*/
bool mqttSubscribe(char* iot_topic);
/**
* @fn mqttUnsubscribe
* @brief 取消订阅MQTT频道
* @param iot_topic 取消订阅的MQTT密钥
* @return bool类型,表示取消订阅状态
* @retval true Success
* @retval false Failed
*/
bool mqttUnsubscribe(char* iot_topic);
/**
* @fn mqttRecv
* @brief MQTT发送数据
* @param iot_topic 订阅频道密钥
* @param buf 发送数据
* @param maxlen 发送数据长度
* @return bool类型,表示订阅状态
* @retval true Success
* @retval false Failed
*/
bool mqttRecv(char* iot_topic, char* buf,int maxlen);
/**
* @fn mqttDisconnect
* @brief MQTT断开连接
* @return bool类型,表示断开连接状态
* @retval true Success
* @retval false Failed
*/
bool mqttDisconnect(void);
/**
* @fn httpInit
* @brief 初始化 HTTP 服务
* @param net 网络模式
* @n eGPRS: GPRS 模式
* @n eNB: NB-IOT 模式
* @return bool类型,表示初始化状态
* @retval true Success
* @retval false Failed
*/
bool httpInit(eNet net);
/**
* @fn httpConnect
* @brief 配置服务
* @param Host 服务器IP
* @return bool类型,表示连接状态
* @retval true Success
* @retval false Failed
*/
bool httpConnect(const char *Host);
/**
* @fn httpPost
* @brief HTTP POST
* @param Host 网址
* @param data POST 数据
* @return bool类型,表示请求状态
* @retval true Success
* @retval false Failed
*/
bool httpPost(const char *Host , String data);
/**
* @fn httpGet
* @brief HTTP GET 这个函数用来打印get数据
* @param Host URL
*/
void httpGet(const char *Host);
/**
* @fn httpDisconnect
* @brief 断开与服务器的连接并取消初始化
*/
void httpDisconnect(void);
/**
* @fn send
* @brief 发送指定长度的数据
* @param buf 存储数据的buffer
* @param len 发送数据的长度
* @return bool类型,表示发送状态
* @retval true Success
* @retval false Failed
*/
bool send(void *buffer,size_t len);
/**
* @fn send
* @brief 发送数据
* @param data 发送的数据
* @return bool类型,表示发送状态
* @retval true Success
* @retval false Failed
*/
bool send(char *data);
/**
* @fn getPosition
* @brief
* @return bool类型,表示发送状态
* @retval true Success
* @retval false Failed
*/
bool getPosition(void);
/**
* @fn getLatitude
* @brief 获取纬度
* @return 纬度数据
*/
char* getLatitude(void);
/**
* @fn getLongitude
* @brief 获取经度
* @return 经度数据
*/
char* getLongitude(void);
更多资料下载
常见问题
问:烧录示例代码后,串口输出没法初始化?
答:(1)检查是否外部供电7~12V,通过主板DC2.1黑色圆孔供电,或者通过扩展板vin,gnd端口供电。(2)检查是否安装两个天线。(3)检查扩展板上的拨码开关TX>D8,RX>D7(4)查看扩展板上的红色电源指示灯是否常亮,NET指示灯是否闪烁(5)检查是否插上NB卡。检查后,按下Boot按键重启观察
问:SIM7070G可以同时使用通信和GNSS定位吗?
答:SIM7070G不能同时使用通信和GNSS定位功能
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。