NBIOT模块bc20与GPS模块AT1218数据上阿里云物联网平台

本文章主要实现将GPS模块收集到的经纬度信息上传到阿里云物联网云平台上中,使用NBIOT技术,其通讯模块是移远公司推出的BC20模块,GPS模块是正点原子推出的1218系列模块。         (NBIOT技术和4G和WiFi技术的区别

 BC20模块手册

1218模块手册

实现数据上传到云平台,这里有两种方式,一一讲解:

数据上传之前

一、AT指令实现

1、连接阿里云所需的配置
AT+QMTCFG="aliauth",<TCP_connectID>[,<product_key>,<device_name>,<device_secret>]
        product_key:阿里云产品密钥。最大长度64。
        device_name:阿里云设备名称。最大长度64。
        device_secret:阿里云设备凭证。最大长度64。
AT+QMTCFG="aliauth","0","product_key","device_name","device_secret"


2、打开tcp通道
AT+QMTOPEN=<TCP_connectID>,<host_name>,<port>、
        host_name:MQTT服务器地址,可以是IP或域名,最大长度150。
        port:MQTT服务器端口号,取值范围:1~65535。
AT+QMTOPEN=0,"host_name",port
返回0,0表示正常。返回0,1则open失败
执行结果:
参数1:TCP_connectID
参数2:
        -1:打开网络失败
        0 :打开网络成功

3、连接云平台
AT+QMTCONN=<TCP_connectID>,<deviceName>
deviceName:设备名称
设备名称
AT+QMTCONN=0,"deviceName"
返回0,0,0表示成功连接。返回0,0,1则连接失败
执行结果:
参数1:TCP_connectID
参数2:
0     数据包发送成功且从服务器接收到 ACK
1     数据包重传
2     数据包发送失败
参数3:
0     接受连接
1     拒绝连接:不支持的协议版本
2     拒绝连接:拒绝标识符
3     拒绝连接:服务器不可用
4     拒绝连接:用户名或密码错误
5     拒绝连接:未授权

4、订阅topic
params:
tcp_id
msgID:消息ID,取值范围1--65535。这个参数个人感觉随便取
topic:订阅的主题,最大长度255
qos:服务质量等级0,1,2
AT+QMTSUB=0,1,"topic",0

5、设备数据上报
AT+QMTPUB=<TCP_connectID>,<msgID>,<qos>,<retain>,<topic>,<msg>
msgID:消息ID,取值范围1--65535。
qos:0     最多发送一次
         1     最少发送一次
         2     只发送一次
retain:0     消息发送到当前订阅者后,服务器不保存消息。
            1     消息发送到当前订阅者后,服务器保存消息。
topic:订阅的主题,最大长度255。
msg:消息内容。

执行结果:
参数1:TCP_connectID
参数2:msgID
参数3:0     数据包发送成功且从服务器接收 ACK(当<qos>=0 时,发布的消息无需 ACK)
             1     数据包重传
             2     数据包发送失败


publish测试

AT+QMTPUB=0,1,1,1,"topic","hello test"

二、通过arduino作主控实现

本次选用的是arduino uno,如图:

 连线方式:

将GPS模块上的TX,RX引脚分别连在arduino的2,3中,BC20上的TX,RX接入arduino中的4,5中。

arduino代码烧写:

#include<SoftwareSerial.h>

//RX,TX,接线要反着接
SoftwareSerial gps = SoftwareSerial(2,3);       //GPS模块虚拟串口实例
SoftwareSerial nbiot = SoftwareSerial(4,5);     //NBIOT模块虚拟串口实例

char buffer[100];     //经纬度信息缓冲区
int num=0;            //经纬度信息缓冲区真实长度

char target[10];      //存储和校验GPS收到的报头是否为“GNGGA”
int tarNum=0;         //同num

char flag;

String longitude="";  //经度
String latitude="";   //纬度

/*          NBIOT模块连接阿里云物联网平台的AT指令           */
/*
阿里云连接设置:
      AT+QMTCFG="aliauth",<TCP_connectID>[,<product_key>,<device_name>,<device_secret>]
        product_key:阿里云产品密钥。最大长度64。
        device_name:阿里云设备名称。最大长度64。
        device_secret:阿里云设备凭证。最大长度64。
*/
String config = "AT+QMTCFG=\"aliauth\",\"0\",\"product_key\",\"device_name\",\"device_secret\"";

/*
      AT+QMTOPEN=<TCP_connectID>,<host_name>,<port>、
        host_name:MQTT服务器地址,可以是IP或域名,最大长度150。
        port:MQTT服务器端口号,取值范围:1~65535。
*/
String open = "AT+QMTOPEN=0,\"host_name\",port";

/*
      AT+QMTCONN=<TCP_connectID>,<deviceName>
        deviceName:设备名称
*/
String conn = "AT+QMTCONN=0,\"deviceName\"";

/*
      AT publish
*/
/*
AT示例:
"AT+QMTPUB=0,1,1,1,\"/sys/ihkybth4H9h/deviceName/thing/event/property/post\",\"{\"method\":\"thing.event.property.post\",\"id\":\"0\",\"params\":{\"latitude\":
\"30.58796512\"
,\"longitude\":
\"104.58423897\"
},\"version\":\"1.0\"}\"";
*/
String publish_start = "AT+QMTPUB=0,1,1,1,\"/sys/ihkybth4H9h/deviceGps/thing/event/property/post\",\"{\"method\":\"thing.event.property.post\",\"id\":\"0\",\"params\":{\"latitude\":";
String publish_longitude_id = ",\"longitude\":";
String publish_end = "},\"version\":\"1.0\"}\"";
String str = "\"";
/*          NBIOT模块连接阿里云物联网平台的AT指令           */

void setup() {
   Serial.begin(115200);      //串口波特率
   nbiot.begin(115200);       //NBIOT通讯模块波特率
   gps.begin(38400);          // gps波特率

   
    nbiot.println(config);
    Serial.println("config");

    delay(2000);
    nbiot.println(open);
    Serial.println("open");

    delay(10000);
    nbiot.println(conn);
    Serial.println("connnect");

    delay(15000);
   
}
void loop() {

   if(gps.available())
   {
     delay(1);      //等待GPS模块数据接收
     flag = gps.read();
     //只需要报头为“$GNGGA”开头的信息,提取经纬度信息
     if(flag == '$'){
       delay(10);
       tarNum = gps.readBytes(target,5);
      if(target[0]=='G' && target[1]=='N' && target[2]=='G' && target[3]=='G' && target[4]=='A'){
        num = gps.readBytes(buffer,40);

        for(int i=12;i<21;i++){latitude += buffer[i];}
        latitude += "N";
        latitude = str + latitude;
        latitude = latitude + str;
        

        for(int i=25;i<35;i++){longitude += buffer[i];}
        longitude += "E";
        longitude = str + longitude;
        longitude = longitude + str;

        //publish AT指令的拼接
        String publish = publish_start+latitude+publish_longitude_id+longitude+publish_end;
        Serial.println(publish);
        //发送数据到阿里云平台
        nbiot.println(publish);

        latitude = "";
        longitude = "";
        // publish = "";
        
        delay(6000);
      }
        
     }

   }
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值