50592浏览
楼主: 驴友花雕

[项目] 【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 17:57:18

实验场景图  动态图  【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 18:18:54

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

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

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 18:19:36

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 19:52:25

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  项目之五:通过NB模块的LED灯的闪烁来判断信号强度

  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  4.   NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  5.   项目之五:通过NB模块的LED灯的闪烁来判断信号强度
  6.   实验接线:
  7.   BC20       UNO
  8.   VIN        5V
  9.   GND        GND
  10.   SCL        A5
  11.   SDA        A4
  12. */
  13. #include "DFRobot_BC20_Gravity.h"
  14. //7种颜色可供选择
  15. #define  RED 0
  16. #define  BLUE 1
  17. #define  GREEN 2
  18. #define  YELLOW 3
  19. #define  PURPLE 4
  20. #define  CYAN 5
  21. #define  WHITE 6
  22. //IIC通讯
  23. #define USE_IIC
  24. //硬件串口通讯
  25. //#define USE_HSERIAL
  26. //软件串口通讯
  27. //#define USE_SSERIAL
  28. DFRobot_BC20_IIC myBC20(0x33);
  29. /*
  30.    信号强度由两个以 dBm 为单位的数值表示
  31.    和闪烁的 LED:
  32.    信号强——快闪
  33.    中等信号 - 慢闪
  34.    弱信号 - 突发闪光。
  35. */
  36. static void NB_Signal_Fun() {
  37.   //获取 NB-IoT 信号强度
  38.   myBC20.getSQ();
  39.   //信号质量 RSSI<10,弱信号强度
  40.   myBC20.changeColor(WHITE);
  41.   if (sSQ.rssi < 10 || sSQ.rssi == 99) {
  42.     if (sSQ.rssi == 99) {
  43.       Serial.println("信号不可检测");
  44.     } else if (sSQ.rssi == 0) {
  45.       Serial.println("信号强度:-113 dBm 或更少");
  46.     } else {
  47.       Serial.print("信号强度: ");
  48.       Serial.print((sSQ.rssi - 2) * 2 - 109);
  49.       Serial.println(" dBm 弱");
  50.     }
  51.     //Burst flash
  52.     myBC20.LED_ON();
  53.     delay(100);
  54.     myBC20.LED_OFF();
  55.     delay(900);
  56.   }
  57.   //信号质量 10<=RSSI<25,中等信号强度
  58.   else if (sSQ.rssi >= 10  && sSQ.rssi < 25) {
  59.     Serial.print("信号强度: ");
  60.     Serial.print((sSQ.rssi - 2) * 2 - 109);
  61.     Serial.println(" dBm 中等");
  62.     //慢闪
  63.     myBC20.LED_ON();
  64.     delay(500);
  65.     myBC20.LED_OFF();
  66.     delay(500);
  67.   }
  68.   //信号质量 RSSI>=25,信号强度强
  69.   else if (sSQ.rssi >= 25) {
  70.     if (sSQ.rssi < 31) {
  71.       Serial.print("信号强度: ");
  72.       Serial.print((sSQ.rssi - 2) * 2 - 109);
  73.       Serial.println(" dBm 强");
  74.     } else if (sSQ.rssi == 31) {
  75.       Serial.print("信号强度:-51 dBm 或更高");
  76.     }
  77.     //快速闪光
  78.     for (int i = 0; i < 5 ; i++) {
  79.       myBC20.LED_ON();
  80.       delay(100);
  81.       myBC20.LED_OFF();
  82.       delay(100);
  83.     }
  84.   }
  85.   else {
  86.     ;
  87.   }
  88. }
  89. void setup() {
  90.   Serial.begin(115200);
  91.   myBC20.LED_OFF();
  92.   //初始化 BC20
  93.   Serial.print("正在启动BC20,请稍等......  ");
  94.   myBC20.changeColor(RED);
  95.   while (!myBC20.powerOn()) {
  96.     Serial.print(".");
  97.     myBC20.LED_ON();
  98.     delay(500);
  99.     myBC20.LED_OFF();
  100.     delay(500);
  101.   }
  102.   Serial.println(" BC20 启动成功!");
  103.   //检查 SIM 卡是否插入
  104.   Serial.println("正在检查SIM卡...");
  105.   myBC20.changeColor(GREEN);
  106.   while (!myBC20.checkNBCard()) {
  107.     Serial.println("请插入NB SIM卡!");
  108.     myBC20.LED_ON();
  109.     delay(500);
  110.     myBC20.LED_OFF();
  111.     delay(500);
  112.   }
  113.   Serial.println("SIM 卡检查OK!");
  114.   //打印 IMEI、ICCID 和 IMSI
  115.   myBC20.getGSN(IMEI);
  116.   Serial.print("BC20 IMEI: ");
  117.   Serial.println(sGSN.imei);
  118.   Serial.print("SIM card ICCID:");
  119.   Serial.print(myBC20.getQCCID());
  120.   Serial.print("SIM card IMSI: ");
  121.   Serial.println((char *)myBC20.getIMI());
  122.   /*
  123.      模块将自动尝试连接到网络(移动站),
  124.      检查它是否已连接到网络。
  125.   */
  126.   Serial.println("正在连接网络...");
  127.   myBC20.changeColor(BLUE);
  128.   while (myBC20.getGATT() == 0) {
  129.     Serial.print(".");
  130.     myBC20.LED_ON();
  131.     delay(500);
  132.     myBC20.LED_OFF();
  133.     delay(500);
  134.   }
  135.   Serial.println("网络已连接!");
  136. }
  137. void loop() {
  138.   //获取本地 NB-IoT 信号强度并打印
  139.   NB_Signal_Fun();
  140. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 19:54:22

本帖最后由 驴友花雕 于 2021-9-6 07:24 编辑

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1

程序通过串口打印当前环境(接收到的)NB-IoT信号强度RSSI(单位dBm,通常为负值,测量范围:-113 ~ -51 dBm,数值越大信号越强)。

通过RGB(白光)闪烁的快慢来表示信号强度,分为三级:

爆闪:信号弱(-95 dBm或以下),0.1s亮,0.9s灭。
慢闪:信号中等(-93 ~ - 65 dBm之间),0.5s亮,0.5s灭。
快闪:信号强(- 63 dBm或以上),0.1s亮,0.1s灭。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 20:16:34

本帖最后由 驴友花雕 于 2021-9-6 07:02 编辑

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

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

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-5 20:21:50

本帖最后由 驴友花雕 于 2021-9-5 20:24 编辑

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1

GNSS定位需要一定时间进行寻星,首次上电通常需要30s以上才能获取有效的定位信息。

程序通过串口打印GNSS定位的简单信息:
纬度坐标(Latitude):26.09 表示北纬26.09°,精确到小数点后2位。南纬用S表示。
经度坐标(Longitude):119.32 表示东经119.32°,精确到小数点后2位。西经用W表示。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 07:12:41

配置BC20模块的通信接口
开头都有下面一段用于配置通信接口的代码,配合物理接线可配置I2C、UART(硬件)和UART(软件)串口三种不同的通信接口。若不作任何修改,默认使用I2C接口,地址0x33。

  1. /*Communication by IIC*/
  2. #define USE_IIC
  3. /*Communication by HardwareSerial*/
  4. //#define USE_HSERIAL
  5. /*Communication by SoftwareSerial*/
  6. //#define USE_SSERIAL
  7. /******************IIC******************/
  8. #ifdef USE_IIC
  9. /*
  10.    For general controllers. Communicate by IIC
  11.    Connect Instructions
  12.       Controller     |    Module(BC20)
  13.           SDA        |       D/T
  14.           SCL        |       C/R
  15.           GND        |       GND
  16.        5V or 3V3     |       VCC
  17.    IIC address(A0,A1)
  18.      0x30:(A0=0,A1=0)
  19.      0x31:(A0=0,A1=1)
  20.      0x32:(A0=1,A1=0)
  21.      0x33:(A0=1,A1=1) default
  22. */
  23. DFRobot_BC20_IIC myBC20(0x33);
  24. /******************HardwareSerial******************/
  25. #elif defined(USE_HSERIAL)
  26. /*
  27.    For MEGA2560/ESP32 HardwareSerial
  28.    Connect Instructions
  29.    esp32      |               MEGA Series    |    Module(BC20)
  30.    IO17       |               D16(RX)        |       D/T
  31.    IO16       |               D17(TX)        |       C/R
  32.    GND        |               GND            |       GND
  33.    5V(USB) or 3V3(battery)  | 5V or 3V3      |       VCC
  34. */
  35. #if defined(ARDUINO_ESP32_DEV)
  36. HardwareSerial Serial2(2);
  37. DFRobot_BC20_Serial myBC20(&Serial2);//ESP32HardwareSerial
  38. #else
  39. DFRobot_BC20_Serial myBC20(&Serial1);//others
  40. #endif
  41. /******************SoftwareSerial******************/
  42. #elif defined(USE_SSERIAL)
  43. /*
  44.     For Arduino Series SoftwareSerial
  45.     Connect Instructions
  46.         UNO     |    Module(BC20)
  47.       PIN_RXD   |       D/T
  48.       PIN_TXD   |       C/R
  49.         GND     |       GND
  50.      5V or 3V3  |       VCC
  51. */
  52. #define PIN_TXD   3
  53. #define PIN_RXD   4
  54. SoftwareSerial ss(PIN_RXD, PIN_TXD);
  55. DFRobot_BC20_SW_Serial myBC20(&ss);
  56. #endif
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 07:17:52

使用I2C接口时,若出现IIC地址冲突,可修改下面一条语句中的参数0x33以改变IIC地址。可使用的I2C地址共有4个,拨动模块上的拨码开关,调整A0和A1,并修改如下相应I2C地址,复位程序完成修改。
0x30:(A0=0,A1=0)
0x31:(A0=0,A1=1)
0x32:(A0=1,A1=0)
0x33:(A0=1,A1=1) 默认

  1. DFRobot_BC20_IIC myBC20(0x33);
复制代码

使用UART(硬件)接口时,波特率为115200,如下取消#define USE_HSERIAL注释,注释掉另外两个宏定义#define,完成硬串口的配置。

  1. /*Communication by IIC*/
  2. //#define USE_IIC
  3. /*Communication by HardwareSerial*/
  4. #define USE_HSERIAL
  5. /*Communication by SoftwareSerial*/
  6. //#define USE_SSERIAL
复制代码

使用UART(软件)接口时,波特率为9600,如下取消#define USE_HSERIAL,注释掉另外两个宏定义#define,完成软串口的配置。

  1. /*Communication by IIC*/
  2. //#define USE_IIC
  3. /*Communication by HardwareSerial*/
  4. //#define USE_HSERIAL
  5. /*Communication by SoftwareSerial*/
  6. #define USE_SSERIAL
复制代码

调整UART(软件)接口管脚,修改如下两个宏定义#define PIN_TXD和#define PIN_RXD的值,前者配置主控的发送端TXD(与模块的接收端相连),后者配置主控的接收端RXD(与模块的发送端相连)。

  1. #define PIN_TXD   3
  2. #define PIN_RXD   4
  3. SoftwareSerial ss(PIN_RXD, PIN_TXD);
  4. DFRobot_BC20_SW_Serial myBC20(&ss);
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 08:00:54

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块 NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目之七:获取物理位置精简版(在串口监视器上看到部分卫星信息)

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  4.   NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  5.   项目之七:获取物理位置精简版(在串口监视器上看到部分卫星信息)
  6.   实验接线:
  7.   BC20       UNO
  8.   VIN        5V
  9.   GND        GND
  10.   SCL        A5
  11.   SDA        A4
  12. */
  13. #include "DFRobot_BC20_Gravity.h"
  14. //RGB有7种颜色可供选择
  15. #define  RED 0
  16. #define  BLUE 1
  17. #define  GREEN 2
  18. #define  YELLOW 3
  19. #define  PURPLE 4
  20. #define  CYAN 5
  21. #define  WHITE 6
  22. //IIC通讯
  23. #define USE_IIC
  24. //硬件串口通讯
  25. //#define USE_HSERIAL
  26. //软件串口通讯
  27. //#define USE_SSERIAL
  28. DFRobot_BC20_IIC myBC20(0x33);
  29. void Display_Location_Information() {
  30.   //锚点的UTC时间
  31.   Serial.print("时间:  ");
  32.   Serial.print(sCLK.Hour);
  33.   Serial.print(":");
  34.   Serial.print(sCLK.Minute);
  35.   Serial.print(":");
  36.   Serial.println(sCLK.Second);
  37.   Serial.print("纬度:  ");
  38.   Serial.print(sGGNS2.LatitudeVal, 6);
  39.   Serial.print(" ° ");
  40.   Serial.println(sGGNS2.LatitudeDir());
  41.   Serial.print("经度:  ");
  42.   Serial.print(sGGNS2.LongitudeVal, 6);
  43.   Serial.print(" ° ");
  44.   Serial.println(sGGNS2.LongitudeDir());
  45.   Serial.print("海拔:  ");
  46.   Serial.print(sGGNS2.Altitude);
  47.   Serial.println("米");
  48.   Serial.print("修复状态: ");
  49.   Serial.println(sGGNS2.Status());
  50.   Serial.print("状态编号: ");
  51.   Serial.print(sGGNS2.StatelliteNum);
  52.   Serial.println(" “在使用中");
  53.   Serial.print("HDOP: ");
  54.   Serial.println(sGGNS2.HDOP);
  55.   Serial.println("");
  56. }
  57. void setup() {
  58.   Serial.begin(115200);
  59.   myBC20.LED_OFF();
  60.   //初始化 BC20
  61.   Serial.print("正在启动BC20,请稍等......  ");
  62.   myBC20.changeColor(RED);
  63.   while (!myBC20.powerOn()) {
  64.     Serial.print(".");
  65.     myBC20.LED_ON();
  66.     delay(500);
  67.     myBC20.LED_OFF();
  68.     delay(500);
  69.   }
  70.   Serial.println("BC20 启动成功!");
  71.   //禁用睡眠模式
  72.   myBC20.configSleepMode(eSleepMode_Disable);
  73.   //启动 GNSS
  74.   Serial.print("打开全球导航卫星系统... ");
  75.   myBC20.setQGNSSC(ON);
  76.   myBC20.changeColor(YELLOW);
  77.   if (myBC20.getQGNSSC() == OFF) {
  78.     Serial.print(".");
  79.     myBC20.LED_ON();
  80.     delay(500);
  81.     myBC20.LED_OFF();
  82.     delay(500);
  83.   }
  84.   Serial.println("GNSS 开启。");
  85.   myBC20.changeColor(CYAN);
  86. }
  87. void loop() {
  88.   myBC20.getQGNSSRD2();
  89.   Display_Location_Information();
  90.   myBC20.clearGPS();
  91.   myBC20.LED_ON();
  92.   delay(500);
  93.   myBC20.LED_OFF();
  94. #ifndef ARDUINO_ESP32_DEV
  95.   delay(500);
  96. #else
  97.   delay(5000);
  98. #endif
  99. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 08:23:31

本帖最后由 驴友花雕 于 2021-9-6 08:53 编辑

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1


GNSS定位需要一定时间进行寻星,首次上电通常需要30s以上才能获取有效的定位信息(建议通电3分钟)。

程序通过串口打印GNSS定位的关键信息:
时间(Time): 0:20:38表示当地时间为8时20分38秒(北京时间)**。需要注意的是,这里7时是指格林尼治时间GMT+0,北京时间为GMT+8,需要用户额外加上8小时才能得到北京时间,也可以自行根据经纬度计算出当地时区,从而自动换算出当地时间。
纬度坐标(Latitude):26.088882° N 表示北纬
26.088882°,精确到小数点后6位。南纬用S表示。
经度坐标(Longitude):119.323715° E 表示东经
119.323715°,精确到小数点后6位。西经用W表示。
海拔高度(Altitude):单位m。WGS84 椭球面为基准。
定位状态(Fix Status):为DGPS或者GNSS时,代表成功定位。
水平精度因子(HDOP):水平分量的相对误差,为纬度和经度等误差平方和的开根号值。数值越小,代表经纬坐标精度越高,一般小于3比较理想。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 09:23:34

本帖最后由 驴友花雕 于 2021-9-6 09:28 编辑

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目之八:在串口监视器上看到部分卫星信息

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

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 09:24:25

本帖最后由 驴友花雕 于 2021-9-6 09:26 编辑

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1


实验注意事项
1、GPS适用于室外使用,在室内效果很差,窗户边有时也可以使用(实际效果打点折扣)。
2、GPS刚通电时,需要短暂时间用以寻星,刚开始不能准确定位,属于正常。
3、物联网卡在使用时,插入SIM卡时,要注意大小,不需要剪卡,直接扣下来的卡片大小就是合适的。
4、物联网SIM卡不能用于手机、平板、2G/3G/4G模组等非NB-IoT设备,否则会导致SIM卡停机。已机卡绑定的SIM卡不能插入其它设备内进行通信,否则会导致SIM卡停机。物联网SIM卡仅能数据传输,无语音通信和短信功能。
5、注意你使用的板子的内存大小。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 10:11:22

本帖最后由 驴友花雕 于 2021-9-6 10:15 编辑

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  项目之九:在串口监视器上看到所有完整的卫星信息
  (说明:由于UNO内存偏小,有可能出错)


  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  4.   NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  5.   项目之九:在串口监视器上看到所有完整的卫星信息
  6.   (说明:由于UNO内存偏小,有可能出错)
  7.   实验接线:
  8.   BC20       UNO
  9.   VIN        5V
  10.   GND        GND
  11.   SCL        A5
  12.   SDA        A4
  13. */
  14. #include "DFRobot_BC20_Gravity.h"
  15. /* 7 colors are available */
  16. #define  RED 0
  17. #define  BLUE 1
  18. #define  GREEN 2
  19. #define  YELLOW 3
  20. #define  PURPLE 4
  21. #define  CYAN 5
  22. #define  WHITE 6
  23. /*Communication by IIC*/
  24. #define USE_IIC
  25. /*Communication by HardwareSerial*/
  26. //#define USE_HSERIAL
  27. /*Communication by SoftwareSerial*/
  28. //#define USE_SSERIAL
  29. DFRobot_BC20_IIC myBC20(0x33);
  30. void Display_Location_Information() {
  31.   //UTC time of the anchor point
  32.   Serial.print("Time:\t\t");
  33.   Serial.print(sCLK.Year);
  34.   Serial.print("/");
  35.   Serial.print(sCLK.Month);
  36.   Serial.print("/");
  37.   Serial.print(sCLK.Day);
  38.   Serial.print("  ");
  39.   Serial.print(sCLK.Hour);
  40.   Serial.print(":");
  41.   Serial.print(sCLK.Minute);
  42.   Serial.print(":");
  43.   Serial.println(sCLK.Second);
  44.   Serial.print("Latitude:\t");
  45.   Serial.print(sGGNS.LatitudeVal, 6);
  46.   Serial.print(" deg ");
  47.   Serial.println(sGGNS.LatitudeDir);
  48.   Serial.print("Longitude:\t");
  49.   Serial.print(sGGNS.LongitudeVal, 6);
  50.   Serial.print(" deg ");
  51.   Serial.println(sGGNS.LongitudeDir);
  52.   Serial.print("Altitude:\t");
  53.   Serial.print(sGGNS.Altitude, 1);
  54.   Serial.println(" m");
  55.   Serial.print("Speed:\t\t");
  56.   Serial.print(sGGNS.Speed);
  57.   Serial.println(" km/h");
  58.   Serial.print("Heading:\t");
  59.   Serial.print(sGGNS.Heading);
  60.   Serial.println(" deg");
  61.   Serial.print("Status:\t\t");
  62.   Serial.println(sGGNS.FixStatus);
  63.   Serial.print("PDOP:\t\t");
  64.   Serial.println(sGGNS.PDOP);
  65.   Serial.print("HDOP:\t\t");
  66.   Serial.println(sGGNS.HDOP);
  67.   Serial.print("VDOP:\t\t");
  68.   Serial.println(sGGNS.VDOP);
  69.   Serial.println();
  70. }
  71. void Display_Satellite_Information() {
  72.   Serial.print(sSAT.NUM);
  73.   Serial.println(" in view.");
  74.   Serial.print(sSAT2.USE);
  75.   Serial.println(" in used.");
  76.   Serial.print("PRN\t");
  77.   Serial.print("Elev(deg)\t");
  78.   Serial.print("Azim(deg)\t");
  79.   Serial.print("SNR(dBHz)\t");
  80.   Serial.print("SYS\t");
  81.   Serial.println("Used");
  82.   for (uint8_t i = 0; i < sSAT.NUM; i++) {
  83.     Serial.print(sSAT2.data[i].PRN);
  84.     Serial.print("\t");
  85.     Serial.print(sSAT2.data[i].Elev);
  86.     Serial.print("\t\t");
  87.     Serial.print(sSAT2.data[i].Azim);
  88.     Serial.print("\t\t");
  89.     Serial.print(sSAT2.data[i].SNR);
  90.     Serial.print("\t\t");
  91.     Serial.print(sSAT2.data[i].SYS);
  92.     Serial.print("\t");
  93.     Serial.println(sSAT2.data[i].Status);
  94.   }
  95.   Serial.println("");
  96. }
  97. void setup() {
  98.   Serial.begin(115200);
  99.   myBC20.LED_OFF();
  100.   /*Initialize BC20*/
  101.   Serial.print("Starting the BC20.Please wait. . . ");
  102.   myBC20.changeColor(RED);
  103.   while (!myBC20.powerOn()) {
  104.     Serial.print(".");
  105.     myBC20.LED_ON();
  106.     delay(500);
  107.     myBC20.LED_OFF();
  108.     delay(500);
  109.   }
  110.   Serial.println("BC20 started successfully!");
  111.   /* Disable sleep mode */
  112.   myBC20.configSleepMode(eSleepMode_Disable);
  113.   /*Power up GNSS*/
  114.   Serial.print("Turning on GNSS ... ");
  115.   myBC20.setQGNSSC(ON);
  116.   myBC20.changeColor(YELLOW);
  117.   if (myBC20.getQGNSSC() == OFF) {
  118.     Serial.print(".");
  119.     myBC20.LED_ON();
  120.     delay(500);
  121.     myBC20.LED_OFF();
  122.     delay(500);
  123.   }
  124.   Serial.println("GNSS is ON.");
  125.   myBC20.changeColor(CYAN);
  126. }
  127. void loop() {
  128.   /**
  129.      Is used to obtain the specified satellite information, and the parameter is used to specify the type of information to be obtained.
  130.      The parameter is selected as follows:
  131.   */
  132.   myBC20.getQGNSSRD();
  133.   Display_Location_Information();
  134.   Display_Satellite_Information();
  135.   myBC20.clearGPS();
  136.   myBC20.LED_ON();
  137.   delay(500);
  138.   myBC20.LED_OFF();
  139. #ifndef ARDUINO_ESP32_DEV  
  140.   delay(500);
  141. #else
  142.   delay(5000);
  143. #endif
  144. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 10:20:02

实验串口返回情况(实际测试运行超过10分钟,BC20模块仍未能启动)

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 10:27:45

本帖最后由 驴友花雕 于 2021-9-6 10:48 编辑

程序占用了80%存储空间,使用了89%的动态内存,实测一直不工作,看来UNO无法查看完整的卫星信息。

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 13:04:19

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

  实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  4.   NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  5.   项目之十:通过 USB 串口向 BC20 模块发送 AT 命令
  6.   实验接线:
  7.   BC20       UNO
  8.   VIN        5V
  9.   GND        GND
  10.   SCL        A5
  11.   SDA        A4
  12. */
  13. #include "DFRobot_BC20_Gravity.h"
  14. //RGB有7种颜色可供选择
  15. #define  RED 0
  16. #define  BLUE 1
  17. #define  GREEN 2
  18. #define  YELLOW 3
  19. #define  PURPLE 4
  20. #define  CYAN 5
  21. #define  WHITE 6
  22. //IIC通讯
  23. #define USE_IIC
  24. //硬件串口通讯
  25. //#define USE_HSERIAL
  26. //软件串口通讯
  27. //#define USE_SSERIAL
  28. DFRobot_BC20_IIC myBC20(0x33);
  29. void setup() {
  30.   Serial.begin(115200);
  31.   myBC20.LED_OFF();
  32.   //初始化 BC20
  33.   Serial.print("正在启动BC20,请稍等...... ");
  34.   myBC20.changeColor(RED);
  35.   while (!myBC20.powerOn()) {
  36.     Serial.print(".");
  37.     myBC20.LED_ON();
  38.     delay(500);
  39.     myBC20.LED_OFF();
  40.     delay(500);
  41.   }
  42.   Serial.println("BC20 启动成功!");
  43.   /*
  44.      每次开机时都会自动启用深度睡眠模式。
  45.      当进入此模式时,
  46.      BC20 不会响应任何来自控制器的 AT 命令
  47.      禁用睡眠模式以确保 BC20 始终响应 AT 命令
  48.   */
  49.   myBC20.configSleepMode(eSleepMode_Disable);
  50.   /*
  51.    * 每个 AT 命令应以“AT”或“at”开头,以“回车”结尾。
  52.    * 命令可以是大写或小写,比如:“AT+CSQ”或“at+csq”。
  53.   */
  54.   Serial.println("输入 AT 命令:");
  55. }
  56. void loop() {
  57.   //*与 BC20 的串行透传
  58.   if (Serial.available()) {
  59.     myBC20.sendATCMDBychar((char)Serial.read());
  60.   }
  61.   if (myBC20.available()) {
  62.     Serial.println(myBC20.readData());
  63.   }
  64. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 13:06:38

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 13:14:15

常用的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 命令手册”

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 13:35:17

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

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

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-9-6 13:36:55

实验串口返回情况

【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail