【雕爷学编程】Arduino动手做(193)---移远 BC20 NB+GNSS模块7

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十三:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备

在这里插入图片描述
在这里插入图片描述
知识点:移远BC20
BC20 是一款高性能、低功耗、多频段、支持 GNSS 定位功能的 NB-IoT 无线通信模块。其尺寸仅为 18.7 mm × 16.0 mm× 2.1 mm,能最大限度地满足终端设备对小尺寸模块产品的需求,同时有效帮助客户减小产品尺寸并优化产品成本。

BC20 在设计上兼容移远通信 GSM/GPRS/GNSS 系列 MC20 模块,方便客户快速、灵活的进行产品设计和升级。BC20提供丰富的外部接口和协议栈,同时支持中国移动 OneNET、中国电信 IoT 以及阿里云 IoT 等物联网云平台,为客户的应用提供极大的便利。

基于先进的 GNSS 技术,BC20 可支持 BeiDou 和 GPS 双卫星导航系统解调算法,使其定位更加精准、抗多路径干扰能力更强,比传统的单 GPS 定位模块具有更多优势。另外,BC20 模块内置 LNA 和低功耗算法:前者保证更高的灵敏度,后者保证低功耗模式下更低的耗流。

相较传统的 NB-IoT + GNSS 方案,BC20 的一体化设计使其体积减少 40 %。凭借其紧凑尺寸、超低功耗和超宽工作温度范围,BC20 在各种应用中占具更大优势;其主要应用领域为:自行车和摩托车防盗、宠物追踪、金融财产追踪及行车记录仪等等。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目之十:通过 USB 串口向 BC20 模块发送 AT 命令

实验开源代码

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备项目之十:通过 USB 串口向 BC20 模块发送 AT 命令实验接线:BC20       UNOVIN        5VGND        GNDSCL        A5SDA        A4
*/#include "DFRobot_BC20_Gravity.h"//RGB有7种颜色可供选择
#define  RED 0
#define  BLUE 1
#define  GREEN 2
#define  YELLOW 3
#define  PURPLE 4
#define  CYAN 5
#define  WHITE 6//IIC通讯
#define USE_IIC//硬件串口通讯
//#define USE_HSERIAL//软件串口通讯
//#define USE_SSERIALDFRobot_BC20_IIC myBC20(0x33);void setup() {Serial.begin(115200);myBC20.LED_OFF();//初始化 BC20Serial.print("正在启动BC20,请稍等...... ");myBC20.changeColor(RED);while (!myBC20.powerOn()) {Serial.print(".");myBC20.LED_ON();delay(500);myBC20.LED_OFF();delay(500);}Serial.println("BC20 启动成功!");/* 每次开机时都会自动启用深度睡眠模式。当进入此模式时,BC20 不会响应任何来自控制器的 AT 命令禁用睡眠模式以确保 BC20 始终响应 AT 命令*/myBC20.configSleepMode(eSleepMode_Disable);/* * 每个 AT 命令应以“AT”或“at”开头,以“回车”结尾。* 命令可以是大写或小写,比如:“AT+CSQ”或“at+csq”。*/Serial.println("输入 AT 命令:");
}void loop() {//*与 BC20 的串行透传if (Serial.available()) {myBC20.sendATCMDBychar((char)Serial.read());}if (myBC20.available()) {Serial.println(myBC20.readData());}
}

实验串口返回情况

在这里插入图片描述

常用的AT命令:
AT - AT 命令测试
AT+QRST=1 - 重置 BC20
ATI - 固件版本的修订
AT+CSQ - 信号质量报告
0 - <=-113 dBm
1 - -111 dBm
2 - -109 dBm
3 - -107 dBm
… …
30 - -53 dBm
31 - >-51 dBm
99 - 未知或无法检测
AT+CGATT - PS 附加或分离。查询网络连接状态。
0 - 与网络断开连接
1 - 已连接到网络
AT+CGATT=1 - 连接到网络
AT+CGATT=0 - 断开网络连接
AT+CIMI - 查询BC20的IMSI号
AT+CGSN=1 - 查询BC20的IMEI。
AT+CGSN=0 - 查询 BC20 的 SN(序列号)。
AT+QCCID - USIM 卡标识 (ICCID)。这通常用于检查 SIM 卡状态。
AT+CCLK - 返回当前日期和时间
AT+QPOWD=0 - 关闭模块电源。(使用“myBC20.powerOn()”打开模块电源)

以下 AT 命令用于 GNSS:
AT+QGNSSC - 查询GNSS电源状态
0 - GNSS 电源关闭
1 - GNSS 开机
AT+QGNSSC=1 - 打开 GNSS
AT+QGNSSC=0 - 关闭 GNSS
AT+QGNSSRD - 获取所有 GNSS 信息

更多详情请参考《移远通信BC20 AT指令手册》
或“BC20 GNSS AT 命令手册”

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目十一:最简单的BC20模块测试程序:测量NB-IoT的信号强度

实验开源图形编程(Mind+、Mixly、编玩边学)

在这里插入图片描述
实验串口返回情况

在这里插入图片描述

实验硬件说明
1、NB-IoT天线
NB-IoT通信和GNSS定位功能需要外接天线。用户可使用产品包装中所提供的天线,也可额外购买兼容的外接天线以进一步增强收发信号的能力或作为备用。

开发板支持B5/B8这两个频段的NB-IoT通信,而目前国内移动、电信、联通三大运营商NB-IoT也主要运行在在这两个频段,具体参数如下:
国内NB-IoT主要运营商与通信频段

在这里插入图片描述

用户可使用覆盖B5/B8频段(即工作频率在824MHz~960MHz)的PCB天线(产品附送)、FPC柔性PCB天线、弹簧天线、胶棒天线等各类天线,通常用于2G/GSM/GPRS蜂窝通信的天线也可用于NB-IoT通信(只要工作频率覆盖B5/B8频段),需要注意天线的接头为1代 IPEX接头。

2、GNSS天线
开发板支持GPS/BeiDou(北斗)双星定位导航,具体参数如下:
GNSS工作频段

在这里插入图片描述
用户可使用有源GPS/BeiDou(北斗)双频陶瓷天线,也可使用单频的有源GPS或BeiDou(北斗)陶瓷天线,需要注意天线的接头为1代 IPEX接头。
建议使用正方形的右旋圆极化有源陶瓷天线,以便和卫星信号极化匹配,获得更好的信号。陶瓷天线形状为正方形的为右旋圆极化,长方形为线极化。
不建议使用无源天线。无源天线需要配合LNA放大器来提高接收信号的强度,而开发板并未搭载LNA放大器。

3、SIM卡
NB-IoT通信需要专用的NB-IoT物联网SIM卡,如手机SIM卡,4G物联网卡等其它类型的SIM卡无法代替。目前产品包装内包含有一张中国联通NB-IoT物联网专用SIM卡,包含一份年度基础套餐,插入NB-IoT开发板或通信模组内即可使用,若流量满足不了使用需求,可通过充值月度流量包增加当月流量。后续将会推出更多运营商的NB-IoT物联网专用SIM卡供用户选择。联通NB-IoT SIM卡资费情况如下表:

在这里插入图片描述

注意
#根据国家工业和信息化部等六部门要求,为有效防范和打击通讯信息诈骗,所有NB-IoT物联网专用SIM卡均具有机卡绑定功能,不可取消。
#SIM卡插入设备,首次上电(与基站)成功通信即视为激活且与通信模组绑定(机卡绑定),开始年度计费周期(360天)。
#2G/3G/4G手机SIM卡或大流量物联网卡无法代替用于NB-IoT设备。
#物联网SIM卡不能用于手机、平板、2G/3G/4G模组等非NB-IoT设备,否则会导致SIM卡停机。
#已机卡绑定的SIM卡若被插入其它设备内进行通信会导致SIM卡停机。
#物联网SIM卡仅能数据传输,无语音通信和短信功能。
#用户可通过微信搜索并关注公众号“DF物联网”,自助查询SIM流量使用情况或对SIM卡进行充值。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目十二:通过串口查询全球导航卫星系统GGA协议的信息

实验开源代码

/*【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备项目十二:通过串口查询全球导航卫星系统GGA协议的信息实验接线:BC20       UNOVIN        5VGND        GNDSCL        A5SDA        A4
*/#include "DFRobot_BC20_Gravity.h"//RGB有7种颜色可供选择
#define  RED 0
#define  BLUE 1
#define  GREEN 2
#define  YELLOW 3
#define  PURPLE 4
#define  CYAN 5
#define  WHITE 6//IIC通讯
#define USE_IIC//硬件串口通讯
//#define USE_HSERIAL//软件串口通讯
//#define USE_SSERIALDFRobot_BC20_IIC myBC20(0x33);
void setup() {Serial.begin(115200);myBC20.LED_OFF();//初始化 BC20Serial.print("正在启动BC20,请稍等...... ");myBC20.changeColor(RED);while (!myBC20.powerOn()) {Serial.print(".");myBC20.LED_ON();delay(500);myBC20.LED_OFF();delay(500);}Serial.println("BC20 启动成功!");//禁用睡眠模式myBC20.configSleepMode(eSleepMode_Disable);//启动 GNSSSerial.print("打开全球导航卫星系统...  ");myBC20.setQGNSSC(ON);myBC20.changeColor(YELLOW);if (myBC20.getQGNSSC() == OFF) {Serial.print(".");myBC20.LED_ON();delay(500);myBC20.LED_OFF();delay(500);}Serial.println("GNSS 开启");myBC20.changeColor(CYAN);
}void loop() {myBC20.getQGNSSRD(NMEA_GGA);/*UTC 时间,格式:hhmmss.ss,例如。162436.54 => 16:24:36.54h - 小时m - 分钟s - 秒*/Serial.print("UTC 时间: ");Serial.println(sGGA.UTC_Time());/*纬度,格式:ddmm.mmmmm,例如。3150.7820 => 31 度 50.7820 分钟d - 度m - 分钟*/Serial.print("纬度: ");Serial.print(sGGA.LatitudeVal());Serial.print(" ");/*北纬或南纬N - 北S - 北*/Serial.println(sGGA.LatitudeDir());/*经度,格式:dddmm.mmmmm,例如。12135.6794 => 121 度 35.6794 分钟d - 度m - 分钟*/Serial.print("经度: ");Serial.print(sGGA.LongitudeVal());Serial.print(" ");/*经度标识E - 东W - 西*/Serial.println(sGGA.LongitudeDir());/*修复状态0 - 度1 - GPS 定位2 - DGPS 修复*/Serial.print("修复状态: ");Serial.println(sGGA.Status());//使用的卫星数量 (0 - 24)Serial.print("卫星数量: ");Serial.print(sGGA.StatelliteNum());Serial.println(" 颗在使用中");//显示水平精度因子Serial.print("水平精度因子: ");Serial.println(sGGA.HDOP());//海拔,根据WGS84椭球的高度,单位为米Serial.print("海拔: ");Serial.print(sGGA.Altitude());Serial.println(" m");//地理ID分隔,WGS84 椭球以上GeoID(指海平面)的高度,单位为米Serial.print("地理ID分隔: ");Serial.print(sGGA.GeoID_Separation());Serial.println(" m");//DGPS数据的累计时间,不使用DGPS则为空,单位为秒Serial.print("DGPS 计时: ");Serial.println(sGGA.DGPS_Age());//DGPS站号,如果不使用DGPS则为空Serial.print("DGPS站号: ");Serial.println(sGGA.DGPS_StationID());Serial.println();myBC20.clearGPS();myBC20.LED_ON();delay(500);myBC20.LED_OFF();
#ifndef ARDUINO_ESP32_DEVdelay(500);
#elsedelay(5000);
#endif
}

实验串口返回情况

在这里插入图片描述
G P G G A 例: GPGGA 例: GPGGA例:GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,0000*1F
字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息
字段1:UTC 时间,hhmmss.sss,时分秒格式
字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
字段3:纬度N(北纬)或S(南纬)
字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)
字段5:经度E(东经)或W(西经)
字段6:GPS状态,0=未定位,1=非差分定位,2=差分定位,3=无效PPS,6=正在估算
字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:地球椭球面相对大地水准面的高度
字段11:差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
字段12:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)
字段13:校验值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57000.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP网络服务器设计

最近设计了一个网络服务器程序&#xff0c;对于4C8G的机器配置&#xff0c;TPS可以达到5W。业务处理逻辑是简单的字符串处理。服务器接收请求后对下游进行类似广播的发送。在此分享一下设计方式&#xff0c;如果有改进思路欢迎大家交流分享。 程序运行在CentOS7.9操作系统上&a…

20天突破英语四级高频词汇——第②天

2&#xfeff;0天突破英语四级高频词汇~第2天加油(ง •_•)ง&#x1f4aa; &#x1f433;博主&#xff1a;命运之光 &#x1f308;专栏&#xff1a;英语四级高频词汇速记 &#x1f30c;博主的其他文章&#xff1a;点击进入博主的主页 目录 2&#xfeff;0天突破英语四级高…

Shell脚本学习-循环的控制命令

break continue exit对比&#xff1a; 示例1&#xff1a;break命令跳出整个循环。 [rootabc scripts]# cat break1.sh #!/bin/bashfor((i0;i<5;i)) doif [ $i -eq 3 ]thenbreakfiecho $i done echo "ok"[rootabc scripts]# sh break1.sh 0 1 2 ok可以看到i等于3及…

[CKA]考试之检查可用节点数量

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 检查集群中有多少节点为Ready状态&#xff08;不包括被打上 Taint&#xff1…

【Spring Cloud 】基于微服务架构的智慧工地监管平台源码带APP

智慧工地监管平台是一种利用物联网、云计算、大数据等技术手段实现工地信息化管理的解决方案。它通过数据采集、分析和应用&#xff0c;在实时监控、风险预警、资源调度等方面为工地管理者提供了全方位的支持&#xff0c;提高了工地管理的效率和质量。智慧监管平台还基于“云端…

jmeter 5.1彻底解决中文上传乱码

1.修改源码,然后重新打jar包,就是所有上传文件名重新获取文件名 参考链接:多种Jmeter中文乱码问题处理方法 - 51Testing软件测试网 2.修改Advanced,必须选java

配置Picgo图床之COS、OSS、Github图床

简介 PicGo是一款开源的图片上传和管理工具&#xff0c;它提供了简单易用的界面和丰富的功能&#xff0c;方便用户上传、管理和分享图片。 以下是PicGo的一些主要特点和功能&#xff1a; 图片上传&#xff1a;PicGo支持将本地图片快速上传到云存储服务&#xff0c;如七牛云、…

MyCat配置文件schema.xml讲解

1.MyCat配置 1.1 schema标签 如果checkSQLschema配置的为false&#xff0c;那么执行DB01.TB_ORDER时就会报错&#xff0c;必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询&#xff0c;列表查询模式默认为100,最多只查询100条。因为用mycat后默认数…

[回馈]ASP.NET Core MVC开发实战之商城系统(五)

经过一段时间的准备&#xff0c;新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始&#xff0c;在之前的文章中&#xff0c;讲解了商城系统的整体功能设计&#xff0c;页面布局设计&#xff0c;环境搭建&#xff0c;系统配置&#xff0c;及首页【商品类型&#xff0c;ba…

·[K8S:使用calico网络插件]:解决集群节点NotReady问题

文章目录 一&#xff1a;安装calico&#xff1a;1.1&#xff1a;weget安装Colico网络通信插件&#xff1a;1.2&#xff1a;修改calico.yaml网卡相关配置&#xff1a;1.2.1&#xff1a;查看本机ip 网卡相关信息&#xff1a;1.2.2&#xff1a;修改calico.yaml网卡interface相关信…

windows环境下编译OpenJDK12

环境&#xff1a;Windows11 目录&#xff1a; 1、下载OpenJDK12源码 下载地址&#xff1a; https://hg.openjdk.org/jdk/jdk12 点击zip下载到本地。 解压到本地。 Tip&#xff1a;注意本地路径中最好不要包含中文或空格。 2、阅读一遍doc/building.html 如果只是想构建J…

【C++】做一个飞机空战小游戏(六)——给两架飞机设置不同颜色(cout输出彩色字符、结构体使用技巧)

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…