(SKU: DFR0505)NB-IOT SIM7000 Shield

来自DFRobot Product Wiki
跳转至: 导航搜索
文件:TEL0118.jpg
OBLOQ - IoT 物联网模块

目录

简介

NB-IOT(Narrow Band Internet of Things),即基于蜂窝的窄带物联网,它是IoT领域的一个新兴技术,支持低功耗设备在广域网的蜂窝数据连接,也称作低功耗广域网(LPWAN)。NB-IOT可以直接部署在GSM、UMTS、LTE网络,而带宽大约只消耗180KHz。 SIM7000C Shield扩展板是DFRobot新出的基于NB-IOT技术的Arduino兼容扩展板,是第一款将NB-IOT技术引入到开源硬件领域的智能硬件,它支持LTE CATM1、LTE CAT-NB1、GSM(频段EGSM900MHz、DCS1800MHz),支持GNSS、GPS、GLONASS,以及BeiDou导航系统。


性能描述

  • 工作电压:3.4V~4.2V
  • 输入电压:VIN输入:7V~12V DC输入; 3V3输入:3.3V; 5V输入:5V
  • 输出电压:5V DC输出和3.3V DC输出 和外部电源输入
  • 通信模块:SIM7000
  • VIN输入电压(推荐):7-12V
  • VIN输入电压(限制):6-20V
  • 支持USB2.0接口更新SIM7000固件
  • 支持SIM card
  • 支持GNSS/GSM/ LTE
  • 通过AT命令控制
  • 板载BME280温度、湿度、气压,三位一体的环境传感器
  • 工作温度:-30℃ ~ +80℃
  • 尺寸:53.4x68.6mm

接口说明



DFR0505引脚说明图.jpg























注:除了按Boot按钮可实现开关机之外,也可以通过拉高D12引脚2秒实现模块的开关机。SIM7000开机后会有2秒左右初始化时间,初始化完成后可正常使用。

使用教程(基于SIM7000库)


准备工作

  • 硬件
    • 1 x Arduino UNO控制板 (可兼容LEONARDO和MEGA,请参考演示程序的注释做出相应改动)
    • 1 x [DFR0505]NB-IOT SIM7000 Shield(V1.0)
    • 1 x 为UNO下载程序的USB线
    • 1 x 7V~12V直流电源



硬件连接

使用连线图

将[DFR0505]NB-IOT SIM7000 Shield(V1.0)板插在Arduino UNO控制板上即可

样例代码

  • 使用时请将软硬件串口控制开关切换至TX>D8,RX>D7。
  • 程序使用SIM7000通过NB-IOT连接网站并进行HTTP报文交互。
#include <Wire.h>
#include <DFRobot_SIM7000.h>

#define PIN_TX     7
#define PIN_RX     8
SoftwareSerial     mySerial(PIN_RX,PIN_TX);
DFRobot_SIM7000    sim7000;
static char        buff[350];

void setup(){
    int signalStrength,dataNum;
    Serial.begin(115200);
    sim7000.begin(mySerial);
    sim7000.turnOFF();
    delay(5000);
    Serial.println("Turn ON SIM7000......");
    if(sim7000.turnON()){                                                                      //Turn ON SIM7000
        Serial.println("Turn ON !");
    }
    Serial.println("Set baud rate......");
    if(sim7000.setBaudRate(19200)){                                                            //Set baud rate from 115200 to 19200
        Serial.println("Set baud rate:19200");
    }else{
        Serial.println("Faile to set baud rate");
        while(1);
    }
    Serial.println("Check SIM card......");
    if(sim7000.checkSIMStatus()){                                                              //Check SIM card
        Serial.println("SIM card READY");
    }else{
        Serial.println("SIM card ERROR");
        while(1);
    }
    delay(500);
    Serial.println("Set net mod......");
    if(sim7000.setNet(NB)){                                                                    //Set net mod NB-IOT
        Serial.println("Set NB-IOT mode");
    }else{
        Serial.println("Fail to set mode");
    }
    Serial.println("Get signal quality......");
    delay(500);
    signalStrength=sim7000.checkSignalQuality();                                               //Check signal quality from (0-30)
    Serial.print("signalStrength =");
    Serial.println(signalStrength);
    delay(500);
    Serial.println("Attaching service......");
    if(sim7000.attacthService()){                                                              //Open the connection
        Serial.println("Attach service");
    }else{
        Serial.println("Fail to Attach service");
        while(1);
    }
    delay(200);
    Serial.println("Connecting......");
    if(sim7000.connect(TCP,"www.taobao.com",80)){                                              //Start Up TCP or UDP Connection
        Serial.println("Connect OK");
    }else{
        Serial.println("Fail to connect");
        while(1);
    }
    sim7000.send("HEAD/HTTP/1.1\r\nHost:www.taobao.com\r\nConnection:keep-alive\r\n\r\n");     //Send Data Through TCP or UDP Connection 
    dataNum=sim7000.recv(buff,350,0);                                                          //Receive data 
    Serial.print("dataNum=");
    Serial.println(dataNum);
    Serial.println(buff);
    delay(500);
    if(sim7000.close()){                                                                       //End the connection
        Serial.println("Close connection");
    }else{
        Serial.println("Fail to close connection");
    }
    delay(2000);
    sim7000.turnOFF();                                                                         //Turn OFF SIM7000
}

void loop() {
    delay(1000);
}
  • 函数说明:
  • 设置软串口,SIM7000采用软串口控制TX为D8 RX为D7。
 begin(Stream &s_)
  • 使用软件方式开启SIM7000,开启后扩展板上的Net指示灯闪烁,SIM7000有2秒左右初始化时间,初始化成功后函数返回ture。
 turnON();
  • 使用软件方式关闭SIM7000,成功后扩展板上的Net指示灯熄灭。
 turnOFF();
  • 设置软串口波特率,SIM7000串口默认波特率为115200,使用软串口控制时为避免乱码将波特率设置为19200及以下,成功设置后返回ture。(其他可设置值9600,4800,2400,1200)
 setBaudRate(int rate);
  • 初始化AT指令功能,成功后返回ture。
 checkSIMStatus();
  • 设置网络模式,成功后返回ture。可设置模式: GPRS:GPRS模式 NB:NB-IOT模式。
 setNet(Net net);
  • 检测信号强度,返回值为信号强度。返回值为99时表示无法检测到信号。
 checkSignalQuality();
  • 打开连接服务,成功后返回ture。
 attacthService();
  • 连接网络,选择连接协议(TCP或者UDP),所连接的域名,端口号,连接成功后返回ture。
 connect(Protocol ptl,const char *host, int port);
  • 数据传输,连接成功后向服务端发送信息,可指定发送信息大小,或直接输入需发送信息。
 send(const char *str);
 send(void* buf,size_t len);
  • 数据接收,接收服务端的信息并存储,可设置最大接收量,和等待时间。返回实际接收字节数。
 recv(char* buf,int maxlen,int timeout);
  • 断开连接,成功后返回ture。
 close();
  • 程序演示:
NBIOT.png

使用教程(基于串口AT指令)

准备工作

与上面的教程(基于SIM7000库)保持一致

硬件连接

与上面的教程(基于SIM7000库)保持一致

试验代码

  • NB-IOT SIM7000 Shield可使用串口发送AT指令进行控制,NB-IOT SIM7000 Shield串口默认波特率为115200,需先将波特率设置为19200避免乱码。
  • AT指令需以回车换行符结尾。代码如下:
#include <DFRobot_SIM7000.h>

// Set software serial(RX=8,TX=7) if you use Mega please set RX=10 and connect PIN8 PIN10 and set mySerial(10,7)
#define PIN_TX     7
#define PIN_RX     8
SoftwareSerial     mySerial(PIN_RX,PIN_TX);
DFRobot_SIM7000    sim7000;

void setup() {
    Serial.begin(115200);
    sim7000.begin(mySerial);
    sim7000.turnOFF();
    delay(5000);
    if(sim7000.turnON()){                                      //Turn ON SIM7000
        Serial.println("Turn ON SIM7000");
    }
    if(sim7000.setBaudRate(19200)){                            //Set baud rate from 115200 to 19200
        Serial.println("Set baud rate:19200");
        Serial.println("Enter your AT commands : ");
    }else{
        Serial.println("faile to set baud rate");
    }
    mySerial.begin(19200);
}

void loop() {
    mySerial.listen();
    while(mySerial.available()){
        Serial.write(mySerial.read());
    }
    mySerial.flush();
    while(Serial.available()){
        mySerial.write(Serial.read());
    }
    delay(20);
}

运行程序后在Uno串口上输入AT指令,即可完成AT指令直接控制SIM7000
下载AT指令表

  • 常用AT指令简介:
    • AT+CNMP=?
      • 网络制式选择:AT+CNMP=2表示模块自动找网模式,AT+CNMP=13表示锁定 GSM only 使用,AT+CNMP=38 表示锁定“ CAT-M1+NBIoT ”组合使用,AT+CNMP=51 表示锁定“ GSM+CAT-M1+NBIoT ”组合使用
    • AT+CMNB=?
      • LTE网络制式选择:AT+CMNB=1 设置 CAT-M1 模式, AT+CMNB=2 设置 NBIoT 模式,AT+CMNB=3 设置 CAT-M1 和 NBIoT 组合模式
    • AT+CSQ
      • 检测信号质量,第一个值表示信号强度,为99时表示无法检测信号,此时无法模块通信。第二个值表示误码率,可能值 0-7:误码率依次增加,>6时难以通信,99:暂时无法检测,不影响通信。
    • AT+CGATT?
      • 检测网络附着状态,1:已附着,可正常通信。2:未附着,不能通信。
    • AT+CSTT
      • 开启连接任务。
    • AT+CIFSR
      • 获取本地IP。
    • AT+CIPSTART="ptl","host","port"
      • 建立连接,ptl:连接协议(TCP或UDP),host:连接域名,可输入具体域名或IP地址。port:连接端口。连接成功返回CONNECT OK
    • AT+CIPSEND="len"
      • 发送数据,len:发送数据长度,在返回的“>”后输入发送的数据。
    • AT+CIPCLOSE
      • 断开当前连接。
    • AT+CIPSHUT
      • 关闭连接,释放资源。
  • 程序演示:
NBIOTAT.png


使用教程(获取定位)

准备工作

与上面的教程(基于SIM7000库)保持一致

硬件连接

连接有源天线,并在户外使用

试验代码

#include <Wire.h>
#include <DFRobot_SIM7000.h>

DFRobot_SIM7000 sim7000;
SoftwareSerial  mySerial(8,7);                                     //Set serial

void setup(){
    int signalStrength,dataNum;
    Serial.begin(115200);
    sim7000.begin(mySerial);
    sim7000.turnOFF();
    delay(5000);
    if(sim7000.turnON()){                                          //Turn ON SIM7000
        Serial.println("Turn NO SIM7000");
    }
    if(sim7000.setBaudRate(19200)){                                //Set baud rate from 115200 to 19200
        Serial.println("Set baud rate:19200");
    }else{
        Serial.println("faile to set baud rate");
    }
    while(1){
        if(sim7000.init()){                                        //Init SIM7000
            Serial.println("AT command READY");
            break;
        }else{
            Serial.println("AT command ERROR");
            delay(500);
        }
    }
    while(1){
        if(sim7000.initPos()){
            Serial.println("Positioning function initialized");
            break;
        }else{
            Serial.println("Fail to init positioning function");
            delay(500);
        }
    }
}

void loop(){
    Serial.println("Enter anything to get positioning ");
    char loge[10];
    readSerial(loge);
    Serial.println("Getting position......");
    if(sim7000.getPosition()){                                     //Get the current position
        Serial.print("Longtude :");
        Serial.println(sim7000.getLongitude());                    //Get longitude
        Serial.print("Latitude :");
        Serial.println(sim7000.getLatitude());                     //Get latitude
    }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++;
            }
        }
    }
}
  • 函数说明:
  • 初始化获取定位功能,成功后返回true
 initPos();
  • 获取当前定位,成功后返回true
 getPosition();
  • 获取当前经度,东经为正值,西经为负值(-180,180)
 getLongitude();
  • 获取当前纬度,北纬为正值,南纬为负值(-90,90)
 getlatitude();

兼容性测试

MCU 测试通过 测试失败 未测试 特别标注
Arduino Uno
Arduino Leonardo
Arduino Mega1280 短接D8和D10
Arduino Mega2560 短接D8和D10

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!


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


更多


DFshopping car1.png [Link DFRobot商城购买链接]

个人工具
名字空间

变换
操作
导航
工具箱