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

news2024/10/7 8:20:09

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/北斗精准定位 户外物联网必备
项目二十:通过Easy-IOT平台发布消息

实验开源代码

/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
  NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
  项目二十:通过Easy-IOT平台发布消息
  实验接线:
  BC20       UNO
  VIN        5V
  GND        GND
  SCL        A5
  SDA        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

//配置设备证书信息
char* Iot_id = "wGkCJkIng";
char* Client_ID  = "BC20 NB-IoT";
char* Iot_pwd    = "QMkC1kInRz";

//配置域名和端口号
char* EasyIot_SERVER = "182.254.130.180";
char* PORT = "1883";

//设置需要发布的设备编号
char* pubTopic = "hJmOvRIng";

//IIC通讯
#define USE_IIC

//硬件串口通讯
//#define USE_HSERIAL

//软件串口通讯
//#define USE_SSERIAL

DFRobot_BC20_IIC myBC20(0x33);

/*
   每次模块收到消息时,都会调用此函数。
   它将打印消息和相应的主题。
*/
void callback(char * topic, uint8_t * payload, unsigned int len) {
  Serial.print("接收[主题:");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < len; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  //根据接收到的消息控制板载 RGB LED。
  char* receivedData = (char*)payload;
  if (strcmp(receivedData, "OFF") == 0) {
    myBC20.LED_OFF();
    Serial.println("LED 灯熄灭");
  }
  else if (strcmp(receivedData, "RED") == 0) {
    myBC20.changeColor(RED);
    myBC20.LED_ON();
    Serial.println("LED 是红色的");
  }
  else if (strcmp(receivedData, "GREEN") == 0) {
    myBC20.changeColor(GREEN);
    myBC20.LED_ON();
    Serial.println("LED 为绿色");
  }
  else if (strcmp(receivedData, "BLUE") == 0) {
    myBC20.changeColor(BLUE);
    myBC20.LED_ON();
    Serial.println("LED 为蓝色");
  }
  else if (strcmp(receivedData, "YELLOW") == 0) {
    myBC20.changeColor(YELLOW);
    myBC20.LED_ON();
    Serial.println("LED 是黄色的");
  }
  else if (strcmp(receivedData, "PURPLE") == 0) {
    myBC20.changeColor(PURPLE);
    myBC20.LED_ON();
    Serial.println("LED 是紫色的");
  }
  else if (strcmp(receivedData, "CYAN") == 0) {
    myBC20.changeColor(CYAN);
    myBC20.LED_ON();
    Serial.println("LED 为青色");
  }
  else if (strcmp(receivedData, "WHITE") == 0) {
    myBC20.changeColor(WHITE);
    myBC20.LED_ON();
    Serial.println("LED 是白色的");
  }
  else {
    ;
  }
}

void ConnectCloud() {
  Serial.print("尝试MQTT连接......");
  while (!myBC20.connected()) {
    Serial.print(".");
    if (myBC20.connect(Client_ID, Iot_id, Iot_pwd)) {
      Serial.println("连接服务器正常");
    } else {
      //用于检测设备与服务器的连接
      if (myBC20.getQMTCONN())
        break;
    }
  }

  while (!myBC20.subTopic('0', '1',pubTopic , '0')) {
    Serial.print(".");
  }
  Serial.print("主题:");
  Serial.print(pubTopic);
  Serial.println(" 订阅了!");
}

void setup() {
  Serial.begin(115200);
  myBC20.LED_OFF();

  /*Initialize BC20*/
  Serial.print("正在启动BC20,请稍等...... ");
  myBC20.changeColor(RED);
  while (!myBC20.powerOn()) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
  }
  Serial.println("BC20 启动成功!");

  //检查 SIM 卡是否插入
  Serial.println("正在检查SIM卡……");
  myBC20.changeColor(GREEN);
  while (!myBC20.checkNBCard()) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
  }
  Serial.println("OK!");

  //禁用睡眠模式
  myBC20.configSleepMode(eSleepMode_Disable);
  //禁用 PSM
  myBC20.setPSMMode(ePSM_OFF);

  /* 
     模块将自动尝试连接到网络(移动站)。
     检查它是否已连接到网络。
  */
  Serial.print("正在连接网络......");
  myBC20.changeColor(BLUE);
  while (myBC20.getGATT() == 0) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
  }
  Serial.println("已连接!");

  //设置回调函数
  myBC20.setCallback(callback);

  Serial.println("连接到DFRobot Easy-IoT");

  //配置物联网服务器
  myBC20.setServer(EasyIot_SERVER, PORT);
  Serial.println("服务器可用!");

  //连接DFRobot Easy-IoT
  ConnectCloud();
}

void loop() {
  myBC20.loop();
}

打开工作台,点发送消息

在这里插入图片描述

在发送框填入待发送的信息“everything fine?”,点发送

在这里插入图片描述

查看信息

在这里插入图片描述

实验串口返回情况

在这里插入图片描述

在工作台,发送“RED”

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

在这里插入图片描述

实验场景图——LED 是红色的

在这里插入图片描述
发送不同字符串命令,BC20模块上RGB灯显示不同的颜色

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【具身智能】前沿思考与总结(DALL-E-Bot TinyBot)

1. DALL-E-Bot DALL-E-Bot: Introducing Web-Scale Diffusion Models to Robotics (robot-learning.uk) **&#xff08;2023-05-04&#xff09;**DALL-E-Bot: Introducing Web-Scale Diffusion Models to Robotics DALL-E-Bot&#xff1a;将网络规模的扩散模型引入机器人 第…

如何实现环卫项目运营的数字化管理,达到企业降本增效的目的?

数字环卫是指利用数字技术和数据驱动的方法来改善环卫流程和管理。数字环卫的底层逻辑在于利用技术来优化运营、提高效率并降低环卫项目管理成本。如何实现环卫工程运营数字化管理&#xff0c;达到降本增效的目标&#xff1a; 1.数据收集和分析&#xff1a;实施数据收集机制&a…

如今市面上有哪些优秀的PCB设计软件

PCB设计软件作为一个电子设计行业中重要的工具&#xff0c;其作用不言而喻。随着电子行业的快速发展&#xff0c;各种各样的新型PCB设计软件层出不穷&#xff0c;而选择一款适合自己使用的PCB设计软件&#xff0c;已成为电子工程师不可避免的任务。 下面我们将为大家介绍常见的…

Java开发 - Redis事务怎么用?

前言 最近博主感觉捅了Redis窝&#xff0c;从Redis主从&#xff0c;哨兵&#xff0c;集群&#xff0c;集群原理纷纷讲了一遍&#xff0c;不知道大家都学会了多少&#xff0c;想着送佛送到西&#xff0c;不如再添一把火&#xff0c;所以今天带给大家的博客是Redis事务&#xff…

2.4g遥控台灯开发方案,采用宇凡微2.4g合封芯片

普通台灯光源光谱固定且有频闪&#xff0c;长时间使用容易导致眼部疲劳。宇凡微推出的护眼台灯方案&#xff0c;具有无极色温调节&#xff0c;光线柔和不刺眼、无频闪&#xff0c;具有多种功能模式&#xff0c;可用2.4g遥控器调节。 一、遥控护眼台灯方案介绍 护眼台灯方案采用…

Progress in Neurobiology:大脑活动的自主模式

摘要 自主神经系统和中枢神经系统之间的相互作用对人脑功能和健康的相关性尚不清楚&#xff0c;尤其是当这两个系统都受到睡眠剥夺(SD)的挑战时。本研究测定了健康参与者的大脑活动(采用fMRI)、脉冲和呼吸信号&#xff0c;以及β-淀粉样蛋白负荷(采用PET)。研究结果发现&#…

Jtti:Ubuntu静态IP地址怎么配置

在 Ubuntu 中配置静态 IP 地址需要编辑网络配置文件。以下是在 Ubuntu 20.04 版本中配置静态 IP 地址的步骤&#xff1a; 打开终端&#xff0c;以管理员身份登录或使用 sudo 权限。 使用以下命令打开网络配置文件进行编辑&#xff1a; sudo nano /etc/netplan/00-installer-…

使用PhpSpreadsheet 导出excel文件根据数据判断设置文字颜色

public function index(){//接收前端参数 查询数据出来 目前演示为测试数据$data [["id" > 1,"name" > "小黄","age" > "10"],["id" > 2,name > "小红","age" > "11…

Python(Web时代)——jinja2模板

简介 Jinja2是Flask框架默认支持的模板引擎&#xff0c;是python的web项目中被广泛应用的一种模板引擎&#xff0c;jinja2的作者与Flask是同一个人。 jinja2具有以下特点&#xff1a; 非常灵活&#xff0c;提供了控制结构、表达式与继承等 性能好 可读性强 渲染一个模板&a…

python_day19_递归

拓展 import osdef test_os():# 列出路径下内容print(os.listdir("D:/阿里云"))# 指定路径是否为文件夹print(os.path.isdir("D:/阿里云"))# 指定路径是否存在print(os.path.exists("D:/阿里云"))if __name__ __main__:test_os()递归查文件 每…

Web安全——Burp Suite基础上

Burp Suite基础 一、Burp Suite安装和环境配置如何命令行启动Burp Suite 二、Burp Suite代理和浏览器设置FireFox设置 三、如何使用Burp Suite代理1、Burp Proxy基本使用2、数据拦截与控制3、可选项配置Options客户端请求消息拦截服务器端返回消息拦截服务器返回消息修改正则表…

杰理-改变文字背景颜色

杰理-改变文字背景颜色 text->elm.css.background_color RGB565(100,0,0);

SIMATIC WINCC V8.0安装教程(Win11系统)

SIMATIC WINCC V8.0安装教程(Win11系统) 1. 首先,安装之前需要检查软件与操作系统的兼容性,否则在安装或者使用过程中会出现各种问题。 以WinCC V8.0为例,兼容性列表列出与之兼容的操作系统版本以及注意事项,图中打钩的部分为兼容,没有打钩的部分为不兼容。 2. 在window…

贝叶斯学习

贝叶斯 贝叶斯学习的背景贝叶斯定理举例 概览选择假设— MAPMAP举例 选择假设 — 极大似然 MLML 举例: 抛硬币问题 极大似然 & 最小二乘Nave Bayesian Classifier (朴素贝叶斯分类器)举例1&#xff1a;词义消歧 (Word Sense Disambiguation)举例 2: 垃圾邮件过滤 从垃圾邮件…

2023最新 Dreamweaver 下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了(附安装包)

软件介绍 Dreamweaver简称“DW”&#xff0c;是一款专业的网页设计软件&#xff0c;集网页制作和网站管理于一身的即时检索的网页代码编辑器&#xff0c;利用对 HTML、CSS、JavaScript 等内容的支持&#xff0c;设计人员和开发人员可以在几乎任何地方快速制作并发布网页。借助…

https证书的作用是什么?

如今很多企业都有属于自己的网站&#xff0c;因为当今是网络时代&#xff0c;企业借助网站基本的发展会更加好。 网站的安全性是很重要的&#xff0c;一旦安全无法保障&#xff0c;就容易出现敏感信息被盗用的情况&#xff0c;这对企业是非常不利的&#xff0c;这个时候就需要…

图像提示词攻略--基于 stable diffusion v2

Stable Diffusion 是一种潜在的文本到图像扩散模型&#xff0c;能够在给定任何文本输入&#xff08;称为提示&#xff09;的情况下生成逼真的图像。 在本文中&#xff0c;我将讨论和探索一些提高提示有效性的方法。从在提示中添加某些关键字和组合词、从更改单词顺序及其标点符…

Vue中监听路由参数变化的几种方式

目录 一. 路由监听方式&#xff1a; 通过 watch 进行监听 1. 监听路由从哪儿来到哪儿去 2. 监听路由变化获取新老路由信息 3. 监听路由变化触发方法 4. 监听路由的 path 变化 5. 监听路由的 path 变化, 使用handler函数 6. 监听路由的 path 变化&#xff0c;触发method…

iOS 实现图片高斯模糊效果

效果图 用到了 UIVisualEffectView 实现代码 - (UIVisualEffectView *)bgEffectView{if(!_bgEffectView){UIBlurEffect *blur [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];_bgEffectView [[UIVisualEffectView alloc] initWithEffect:blur];}return _bgEffect…

QCustomPlot 给出的测试用例图示

0 1 2 3 4 5 6 7 8 9 10 移动 11 12 13 14 15 移动 16 17 18 19 20