NB-IoT模块(BC系列—BC95)详解

news2024/9/20 15:01:09

NB-IoT模块(BC系列—BC95)

  • 0. NB-IoT概述
    • 技术原理
    • 特点和优势
    • 应用领域
  • 1. 常用的NB-IoT模块
  • 2. BC系列—BC95
    • 技术规格
    • 功能特点
  • 3. STM32使用BC95
    • 方法
    • BC95的AT指令
    • 示例代码

0. NB-IoT概述

NB-IoT(Narrowband Internet of Things)是一种低功耗广域物联网(LPWAN)技术,专为低功耗、低数据速率和大规模连接的物联网应用而设计。它采用窄带宽信道和低复杂度的调制方案,以实现长距离传输、室内外覆盖范围广和强鲁棒性等特点。

技术原理

  • NB-IoT是在LTE(Long Term Evolution)技术标准下的一种窄带物联网技术,它利用LTE网络的空闲资源,在现有LTE基础设施上进行部署,提供一种低功耗、长距离通信的解决方案。
  • NB-IoT采用窄带信道,每个信道带宽只有180 kHz,使其能够更好地穿透建筑物和障碍物,提供广阔的覆盖范围。
  • NB-IoT采用低复杂度的调制和编码方案,以降低终端设备的功耗,并支持大规模连接,可以同时连接大量的设备。

特点和优势

  • 低功耗:NB-IoT在待机和通信状态下都具有低功耗特性,可以延长设备的电池寿命。
  • 长距离传输:NB-IoT具有良好的传输性能,可以在长距离范围内进行通信,适用于广域覆盖的应用场景。
  • 室内外覆盖广:NB-IoT信号穿透能力强,可以有效地覆盖室内和室外环境,为物联网应用提供全面的覆盖。
  • 低成本:由于NB-IoT利用现有的LTE基础设施进行部署,无需建立单独的物联网网络,降低了网络部署和运营成本。
  • 大规模连接:NB-IoT支持大规模设备连接,每个基站可以同时处理大量的设备连接请求,适用于物联网中大量设备的应用场景。

应用领域

  • 城市智能化:NB-IoT可应用于智慧城市项目,如智能照明、智能交通、智能停车等。

  • 工业自动化:NB-IoT可用于监测和控制工业设备、机器健康监测、环境监测等。

  • 农业和环境监测:NB-IoT可用于农业领域的土壤湿度监测、气象数据收集、农作物灌溉控制等,以及环境监测领域的空气质量监测、水质监测等。

  • 物流和供应链管理:NB-IoT可以用于物流跟踪和监控,实现货物的追踪、温湿度监测、运输过程中的安全监控等。

  • 智能电表和能源管理:NB-IoT可用于智能电表的远程抄表和能源消耗监测,提供精确的用电数据和能源管理功能。

  • 健康医疗:NB-IoT可以应用于健康监测设备,如远程心率监测、血压监测等,实现远程医疗和健康管理。

  • 安全监控:NB-IoT可用于安防监控系统,如远程视频监控、智能门禁等,实现安全监控和报警功能。

1. 常用的NB-IoT模块

  1. Quectel BC95:Quectel BC95是一款紧凑型、低功耗的NB-IoT模块,支持全球多频段,具有优秀的室内和室外覆盖性能。它提供了UART接口和标准的AT指令集,方便与主控设备进行通信和控制。
    在这里插入图片描述

  2. SIMCom SIM7020:SIMCom SIM7020是一款高度集成的NB-IoT模块,具有小尺寸、低功耗和高灵敏度的特点。它支持全球多频段,适用于全球范围内的应用。SIM7020提供UART和USB接口,支持标准的AT指令集和丰富的功能。
    在这里插入图片描述

  3. u-blox SARA-N2:u-blox SARA-N2是一款紧凑型的NB-IoT模块,具有低功耗和广域覆盖能力。它支持全球多频段,适用于全球范围内的应用。SARA-N2提供UART接口和标准的AT指令集,支持丰富的功能和易于集成的设计。
    在这里插入图片描述

  4. Huawei ME309:华为ME309是一款高性能的NB-IoT模块,支持全球多频段和多模式,具有出色的传输性能和稳定性。它提供了UART接口和标准的AT指令集,方便与主控设备进行通信和控制。
    在这里插入图片描述

  5. Nordic Semiconductor nRF9160:Nordic Semiconductor nRF9160是一款多模式无线SoC,集成了NB-IoT和LTE-M功能。它具有低功耗和高度集成的特点,适用于物联网设备的设计。nRF9160提供了丰富的硬件接口和软件开发工具,支持灵活的应用开发。
    在这里插入图片描述

2. BC系列—BC95

技术规格

  • 尺寸:23.6mm × 19.9mm × 2.2mm,SMT封装,适合小型设备集成。
  • 通信频段:支持全球多频段,适用于不同地区的无线通信。
  • 网络模式:支持NB-IoT网络模式,具有广域覆盖和深室内渗透能力。
  • 通信接口:提供UART接口,支持数据传输和AT指令控制。
  • 电源电压:工作电压范围广,3.0V至4.3V,适应不同电源供电需求。
  • 低功耗:进入PSM(Power Saving Mode)时,功耗降低至几微瓦级别。
  • 数据传输速率:支持最高上行15.625kbps和下行100kbps的数据传输速率。

功能特点

  • 低功耗:BC95模块采用了低功耗设计,可实现长时间的运行,并支持电源管理功能,延长设备的续航时间。
  • 强大的覆盖能力:BC95模块支持广域覆盖,具有较好的室内和室外信号覆盖能力,可在复杂的环境中提供稳定的通信连接。
  • 高度集成:BC95模块集成了NB-IoT通信模块、基带处理器、内置电源管理和传感器接口等功能,减少了外围元器件的需求,简化了设计和集成过程。
  • AT指令控制:BC95模块支持标准的AT指令集,开发者可以通过串口与模块进行通信和控制,实现数据传输、网络连接和配置等操作。
  • 丰富的应用接口:BC95模块提供了多种接口,包括UART、GPIO、ADC等,方便与外部设备进行数据交互和扩展功能。

3. STM32使用BC95

方法

  1. 连接硬件:

    • 将BC95模块与STM32微控制器进行连接。BC95模块使用UART接口与微控制器通信,所以需要将BC95模块的TX引脚连接到STM32的RX引脚,将BC95模块的RX引脚连接到STM32的TX引脚。同时,确保共地连接。
  2. 初始化串口:

    • 在STM32上初始化一个串口,并设置合适的波特率、数据位、停止位和校验位等参数,以便与BC95模块进行通信。
  3. 编写AT指令控制代码:

    • 使用STM32的串口发送AT指令给BC95模块,并接收和解析模块返回的响应。你可以使用串口发送函数(如HAL_UART_Transmit())发送AT指令,并使用串口接收中断或轮询方式(如HAL_UART_Receive())接收模块的响应。
  4. 解析AT指令响应:

    • 解析BC95模块返回的AT指令响应,判断指令执行结果和获取返回的数据。根据AT指令集文档,解析模块的响应消息,并根据需要提取相关数据。
  5. 实现功能:

    • 根据项目需求,编写适当的代码实现你的功能。这可能涉及到与BC95模块进行数据通信、网络连接、发送和接收数据等操作。根据AT指令集文档,使用合适的AT指令来完成你的任务。
  6. 调试和测试:

    • 在实际应用中,通过调试和测试确保BC95模块与STM32的通信正常,功能符合预期。可以使用调试器、串口调试助手等工具来检查串口通信和AT指令交互的细节,以及验证数据传输和网络连接是否正常。

BC95的AT指令

以下是一些常用的BC95模块的AT指令,用于与模块进行通信和控制

  1. AT:测试命令,用于检测模块是否正常工作,模块应该返回 “OK”。

  2. AT+CGMI:获取模块制造商信息。

  3. AT+CGMM:获取模块型号信息。

  4. AT+CGMR:获取模块固件版本信息。

  5. AT+CGSN:获取模块IMEI号码。

  6. AT+NBAND:设置或查询工作频段。

  7. AT+CFUN:设置或查询模块功能模式。

  8. AT+CSQ:查询信号质量,返回当前信号强度和信噪比。

  9. AT+CEREG:查询网络注册状态。

  10. AT+COPS:设置或查询运营商选择。

  11. AT+CGATT:附着或分离网络。

  12. AT+NCONFIG:配置模块参数。

  13. AT+NSOCR:创建UDP或TCP套接字。

  14. AT+NSOST:向远程服务器发送数据。

  15. AT+NSORF:从远程服务器接收数据。

  16. AT+NSOCL:关闭套接字。

示例代码

#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <string.h>

UART_HandleTypeDef huart2;

void UART_TransmitString(const char* str) {
    HAL_UART_Transmit(&huart2, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
}

void UART_ReceiveString(char* buffer, uint16_t length) {
    HAL_UART_Receive(&huart2, (uint8_t*)buffer, length, HAL_MAX_DELAY);
}

void BC95_SendATCommand(const char* atCommand) {
    UART_TransmitString(atCommand);
    UART_TransmitString("\r\n");
}

void BC95_ReceiveResponse(char* responseBuffer, uint16_t bufferSize) {
    memset(responseBuffer, 0, bufferSize);
    UART_ReceiveString(responseBuffer, bufferSize - 1);
}

int main(void) {
    char response[256];
    
    HAL_Init();
    // 初始化UART2等操作,具体根据STM32F407的硬件资源和开发环境进行设置
    
    // 配置UART2的波特率、数据位、停止位等参数
    huart2.Instance = USART2;
    huart2.Init.BaudRate = 9600;
    huart2.Init.WordLength = UART_WORDLENGTH_8B;
    huart2.Init.StopBits = UART_STOPBITS_1;
    huart2.Init.Parity = UART_PARITY_NONE;
    huart2.Init.Mode = UART_MODE_TX_RX;
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart2.Init.OverSampling = UART_OVERSAMPLING_16;
    HAL_UART_Init(&huart2);
    
    // 发送AT指令并接收响应
    BC95_SendATCommand("AT");
    BC95_ReceiveResponse(response, sizeof(response));
    printf("Response: %s\n", response);
    
    // 其他AT指令操作...
    
    while (1) {
        // 主循环
    }
}

在上述示例代码中,使用了USART2作为与BC95模块通信的串口。你可以根据你的硬件资源和需求进行调整。请确保正确初始化和配置UART的相关参数。在主循环中,你可以添加更多的AT指令操作,并根据需要解析和处理模块的响应。

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

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

相关文章

万字长文解析最常见的数据库恢复算法: ARIES

#万字长文解析最常见的数据库恢复算法: ARIES 首发地址&#xff1a; https://mp.weixin.qq.com/s/Kc13g8OHK1h_f7eMlnl4Aw Introduction 上图中为基于 WAL 的数据库的一种可能的架构情况。其中&#xff0c;In-Memory Data 为数据库数据在内存中的组织形式&#xff0c;可以是 B …

Element-ui 实现多个日期时间发范围查询

1、前端 <el-form-item label"生产时间"> <el-date-picker v-model"dateProduct" style"width: 240px" value-format"yyyy-MM-dd" type"daterange" range-separator"-" start-placeholder"生产开始…

(三)解析函数及其性质

本文主要内容如下&#xff1a; 1. 复变函数的导数与微分1.1. 复变函数可导、可微、解析与奇点的定义1.2. 复变函数可微的充要条件1.3. 关于复变函数可微性判定的其它形式1.4. 相关结论1.5. 解析函数的构造 2. 解析函数与调和函数2.1. 调和函数与共轭调和函数2.2. 解析函数与调和…

cglib bean复制报错:module java.base does not “opens java.lang“ to unnamed module

在使用cglib bean复制功能时&#xff0c;报下面的错误 Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,b…

牛客社区项目续

统一日志记录 我们的这个项目在很多地方都需要记录日志&#xff0c;比如帖子模块、评论模块、消息模块等&#xff0c;而以前我们记录日志都是在某一个功能点中使用日志工厂&#xff0c;像下面这样&#xff1a; 项目中很多地方都需要记录日志&#xff0c;像这样一个地方一个地方…

sumo的几种安装方法

sumo的几种安装方法 sumo有很多中安装方法&#xff0c;根据你需要的任务来自己选择&#xff1a; 采用官网的latest version来进行安装 sudo add-apt-repository ppa:sumo/stable sudo apt-get update sudo apt-get install sumo sumo-tools sumo-doc想要安装源码来进行自己b…

【Java可执行命令】(六)调试工具 jdb:深入解析应用程序调试工具jdb ~

Java可执行命令详解之jdb 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 参数&#xff1a;-sourcepath < path>3.1.2 指令&#xff1a;run [class [args]]3.1.3 指令&#xff1a;print < expr>3.1.4 指令&#xff1a;stop at< class>:< line>…

如何利用Idea回滚代码以及Cherry-Pick部分代码

引言 大家在版本迭代过程中&#xff0c;是否遇到过开发好的需求&#xff0c;都已经合并到Master分支等待发布后&#xff0c;临时通知不需要上线了的情况。这个时候一般会要求只上一部分紧急功能或者别的新功能&#xff0c;那么这个时候就需要用到Git的Reset以及Cherry-Pick功能…

钉钉机器人用bitmap实现签到记录

现在是周五晚上&#xff0c;下面是一个二进制数字&#xff0c;其中&#xff0c;有16位&#xff0c;最后一位下标是15&#xff0c;今天晚上是14&#xff0c;我签到成功了

一定要收藏的30套可视化大屏制作模板!升职加薪不再是梦想!

前几天和朋友吃饭聊天&#xff0c;他吐槽说老板让他做可视化大屏&#xff0c;但他不会敲代码根本做不出来&#xff0c;老板动动嘴巴子根本不考虑技术难度只想看到成果&#xff0c;他焦虑得都睡不着觉。我给他分享了一套可视化大屏模板&#xff0c;10分钟就制作完成了老板要求的…

了解浏览器缓存

什么是HTTP缓存&#xff0c;如何工作的&#xff1f; 当我们打开一个页面时&#xff0c;会向服务端发起很多次请求&#xff0c;如下图打开百毒首页&#xff0c;发起了HTML、各种图片、JS、CSS等资源共101次请求。这里面很多资源并不会频繁变化&#xff0c;每次打开页面都重新请…

利用Python构建宁德时代、比亚迪、隆基绿能股票时间序列预测模型

存货 import tushare as ts # 导包 import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks from scipy.stats import norm import datetime import pandas as pd import seaborn as sns # pip install seaborn import matplotlib.patches …

Oracle报错:“Error in invoking target ‘agent nmhs’ of makefile...”

前言&#xff1a;Oracle在安装过程中的报错一定要重视&#xff0c;这决定你后续是否能完成安装以及是否能使用。我这边会陆续汇总一些报错现象以及解决方案共享。 ##Install Product 86%报错信息 &#xff1a;“Error in invoking target agent nmhs of makefile...”解决方案…

意大利语翻译哪个公司比较专业?

据了解&#xff0c;意大利语除了通行于意大利之外&#xff0c;还通行于美国、加拿大、阿根廷和巴西等29个国家的&#xff0c;其应用极为广泛。随着意大利语翻译需求量的日益增加&#xff0c;也促进了意大利语与其它语言间的交流、转化和发展。那么&#xff0c;意大利语翻译难吗…

抖音短视频矩阵号系统开源部署搭建分享(二)

开发背景&#xff1a;抖音seo源码&#xff0c;抖音矩阵系统源码。抖音获客系统源码&#xff0c;短视频矩阵系统源码开源搭建&#xff08;MySQL数据库&#xff0c;NGINX&#xff0c;PHP7.4&#xff0c;MySQL5.7&#xff0c;redis&#xff09; 技术要点&#xff1a; 服务器配置服…

vue-router.esm.js:2248 Error: Cannot find module ‘@/views/dylife/ 报错解决

具体是展示 一直加载 控制台报找不到模块 webpack版本问题&#xff0c;webpack4 不支持变量方式的动态 import &#xff0c;新版本需要使用 require() 来解决此问题。 return () > import(/views/${view}) 改写成 return (resolve) > require([/views/${view}], reso…

python接口自动化(四)--接口测试工具介绍(详解)

简介 “工欲善其事必先利其器”&#xff0c;通过前边几篇文章的介绍&#xff0c;大家大致对接口有了进一步的认识。那么接下来让我们看看接口测试的工具有哪些。 目前&#xff0c;市场上有很多支持接口测试的工具。利用工具进行接口测试&#xff0c;能够提供测试效率。例如&…

【C++】浅析C++中的虚函数

关于虚函数 Q1&#xff1a;观察一个类引入虚函数后&#xff0c;类会发生什么变化&#xff1f; 首先&#xff0c;创建一个空类A&#xff0c;并实例化出A的一个对象a&#xff0c;计算一下这个对象占用多少字节&#xff1a; #include<iostream> using namespace std;clas…

02-阴影

使用阴影 1.给立方体添加castShadow&#xff0c;让立方体产生阴影 cube.castShadow true;2.创建一个地面用于接收阴影 const planeGemetry new THREE.PlaneGeometry(20, 30)const planeMaterial new THREE.MeshPhongMaterial({ color: 0xffffff })const plane new THREE.…

LeetCode 2. 两数相加

文章目录 1. 题目描述2. 解题代码 1. 题目描述 链接&#xff1a;https://leetcode.cn/problems/add-two-numbers/ 2. 解题代码 public ListNode AddTwoNumber(ListNode l1, ListNode l2) {ListNode head new ListNode();ListNode cur head;int carry 0;while (l1 ! null…