物联网低功耗广域网NB-IoT开发(上)
目录
初识NB-IOT
1、NB-IOT介绍
2、物联网技术发展
NB-IOT硬件介绍
1、学习模块选型
2、MCU选型
搭建基本工程步骤
1、原理图分析
NB-IOT AT指令
1、AT指令格式
2、串口透传开发
NB-IOT连接网络
1、搭建自己的服务器
2、使用AT指令连接服务器
3、使用自动化串口工具发送AT命令
初识NB-IOT
1、NB-IOT介绍
NB-----Narrow Band
IOT -----Internet of things
NB-IOT---窄带物联网
一种低功耗广域(LPWA)网络技术标准,基于蜂窝技术,用于连接使用无线蜂窝网络的各种智能传感器和设备。用于低功耗广覆盖(LPWA)物联网(IoT)市场。
NB-IoT 技术可以理解为是 LTE 技术的“简化版”,NB-IoT 网络是基于现有 LTE 网络进行改造得来的。LTE 网络为“人”服务,为手机服务,为消费互联网服务;而 NB-IoT 网络为“物”服务,为物联网终端服务,为产业互联网(物联网)服务。
2、物联网技术发展
(1)有线物联网:以太网、RS232、RS485、CAN总线;
(2)无线物联网:
近距离覆盖:WiFi、蓝牙;
远距离覆盖:4GLTE、GPRS、NBIOT、LTE cat.1;
(3)NB-IOT(窄带物联网)的优势: 
为什么需要NB-IOT?其优势?


优势亮点: 广/深覆盖、低功耗、低成本、大数量连接(5w+用户容量/200kHz小区)
应用:智能抄表、智能停车、宠物跟踪等;
NB-IOT硬件介绍
1、学习模块选型
Lierda:

主要特征:8 00MHz) B5(850MHz)B8 (900MHz) B5(850MHz)B8 (900MHz) B5(850MHz)
| 主要特征 | |
|---|---|
| 频段 | B8 (900MHz) B5(850MHz) |
| 封装 | LCC |
| 管脚数量 | 42 |
| 供电电压 | 3.1~4.2V典型值3.6****V |
| 工作温度 | -30°C ~ +85°C |
| 尺寸 | 20×16×2.2mm |
| AT****指令 | 3GPP TR 45.820和其它AT****扩展指令 |
| 下载方式 | UART |
模块参数:

2、MCU选型



搭建基本工程步骤
1、原理图分析
分析NB-IoT核心板原理
分析一键还原底板原理
建立IO功能映射表
(1)IO口配置:选择IO标签,根据IO功能映射表配置为相对应的功能。

(2)时钟配置
由于板载的外置时钟,所以需要配置RCC,这个型号单片机最大支持48MHz。
(3)外设树配置
SPI 选择全双工主机模式
USART1 选择异步收发模式
USART2 选择异步收发模式
(4)USART配置
波特率9600
开启全局中断
(5)SPI配置
配置数据为8bit
波特率1.5Mbits/s
时钟极性为低电平驱动
时钟相位为第一个边沿
(6)LCD驱动移植
LCD主要用于人机交互,动态显示设备信息 将下图所示文件添加到工程中,修改SPI初始化代码即可(LCD的 MISO用于数据和指令切换)
注:便于串口调试打印信息需要添加printf函数重定向,如下:
int fputc(int ch,FILE *p){
while((USART1->ISR & 0x40) == 0);
USART1->TDR = ch;
return ch;
}
NB-IOT AT指令
AT 即Attention,AT 指令用来定义终端设备****TE(TerminalEquipment)和移动台****MT(Mobile Terminal)之间交互的规则,即当终端设备 输入一个AT指令后,与之通信的移动台 将会回复一个结果,就这样一对一的进行。如下图所示。

AT是Attention的缩写,协议本身采用文本.每个命令均以AT打头,因此得名
相关名词
AT的优点: 简单易懂 标准串口来收发AT命令。
1、AT指令格式
AT指令都以“AT”开头,并且以“\r\n”结尾;
若AT指令执行成功,“OK”字符串返回;
若AT指令语法错误或AT指令执行失败,“ERROE”字符串返回;
相关指令:
AT
命令解释:检测Module与串口是否连通,能否接收AT命令; 命令格式:AT 命令返回:OK (与串口通信正常)(无返回,与串口通信未连通)
NB-IoT初始化AT指令:
AT+CFUN=0关闭射频功能
AT+CFUN=1开启射频功能
AT+NBAND?查询模组配置频段
AT+NBAND=5配置模组为电信频段
AT+CGSN=1 查询IMEI号
AT+CGSN=1,201612091450303 设置IMEI号
AT+NRB 软重启
AT+CIMI 查询SIM卡信息
AT+CMEE=1 开启错误提示
AT+CGDCONT=1,”IP”,”ctnet”设置APN
AT+CSQ 获取信号质量
NB-IoT连接网络AT指令
AT+CSCON=1 设置基站连接通知
AT+CEREG=2 设置连接核心网通知
AT+NNMI=1 开启下行数据通知
AT+CGATT=1 自动搜网
AT+NUESTATS 查询 UE 状态
AT+CGPADDR 查询核心网分配的 ip 地址
NB-IoT数据收发AT指令
TCP数据收发
AT+NSOCR=STREAM,6,localport 创建 tcp socket
AT+NSOCO=1 连接服务器
AT+NSOSD=1 发送数据
AT+NSOCL=1 关闭连接
文档链接:
2、串口透传开发
串口透传:
串口透传,全称为“透明串口传输”,是一种数据传输模式,主要用于串口(Serial Port)设备之间或串口与计算机之间的数据传输。
在透传模式下,设备不对传输的数据做任何解析或修改,而是将数据“透明”地从一端传输到另一端。也就是说,发送端发送什么数据,接收端就原封不动地收到什么数据,中间的传输设备不会对数据进行任何处理。这种模式常用于无线模块、串口服务器、串口转USB设备等。
串口透传的优点是使用简单,无需复杂的协议解析和数据处理,可以快速实现数据的传输。但是,缺点是无法实现数据的错误检测和纠正,如果传输过程中出现错误,接收端收到的数据就会出错。
透传源码开发步骤:
1、定义串口12接收数据变量;
2、调用串口12使能串口中断函数;
3、开启串口12中断接收函数;
4、完善串口12的中断处理函数;源码如下:
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)==SET){
while(USART2->ISR & 0x40 == 0);
USART2->TDR = USART1->RDR;
}
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE)==SET){
while(USART1->ISR & 0x40 == 0);
USART1->TDR = USART2->RDR;
}
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
/* USER CODE END USART2_IRQn 1 */
}

5、利用串口调试助手发送AT指令;
NB-IOT连接网络
首先了解物联网连接设备过程:

硬件模块、基站、PC端、路由器、互联网网络
先是NB-IOT模块并不会直接连到路由器,而是连接到某个运营商的基站,在其内部会有设备连接到互联网网络,连接后基站会为模块开发一个互联网(通道),其中服务器是搭建在个人的PC端。同时这里的模块并不能访问到PC端,原因是两者都是内网设备(内网设备不能互相通讯的)。需要用到内网穿透的工具--Ngrok,其原理相当于在公网上建立服务器。官网:https://www.ngrok.cc/login.html
使用说明: https://www.ngrok.cc/_book/
内外网结构:

1、搭建自己的服务器
由于模块于PC端都是内网设备并不能通信,要搭建一个公网的服务器,如下:
(1)首先在自己PC端新建服务器,如:使用Socket Tools工具新建:

(2)在公网建立服务器,便于NB-IOT模块通信:
使用到内网穿透工具Ngrok,进入官网建立隧道;


需要下载客户端根据自己的系统


这样我们的PC端于公网之间的隧道建立完成。之后要考虑NB模块如何远程连接PC端的服务器(即Socket Tools中新建的Server)?
2、使用AT指令连接服务器
在上面LeridaNB-IOT手册中介绍新建Socket等AT指令,以下挑选出来的相关AT指令:
(1)NB-IOT设备联网
TCP数据收发
AT+NSOCR=STREAM,6,localport 创建 tcp socket
AT+NSOCO=1 连接服务器
AT+NSOSD=1 发送数据
AT+NSOCL=1 关闭连接
使用AT指令通过串口助手向NB模块发送上面的指令,实现创建TCP socket、连接公网隧道的服务器包含ngrok隧道的域名地址以及端口、实现发送数据等

3、使用自动化串口工具发送AT命令
以上可以实现使用串口助手可以访问NB模块的状态、网络情况、是否联网及IP地址、连接服务器以及发送数据等操作,以上操作还需要用户手动进行发送AT指令比较不方便。所以有这部分。
我们抛开串口助手,可以使用格西烽火调试工具
优点:
兼容性更强 :格西烽火调试助手支持多种通信协议,不仅仅是串口通信,还可以支持以太网、蓝牙等多种通信方式,大大扩展了其适用场景。
功能更全面 :除了基本的数据收发功能之外,格西烽火调试助手还提供了高级特性,比如数据解析、脚本编程、自动化测试等,可以帮助开发者更高效地进行产品调试和性能测试。
数据解析能力强 :格西烽火调试助手内置了强大的数据解析引擎,可以自动识别并解析常见的数据格式,如ASCII、Hex、Binary等,使数据的可视化更加直观。
界面友好 :格西烽火调试助手采用了人性化的UI设计,操作简便,即使是初学者也能快速上手。同时,软件还提供了丰富的在线帮助和教程,方便用户深入了解各项功能。
稳定性好 :经过严格的测试和优化,格西烽火调试助手在长时间连续的情况下,仍然能保持稳定的性能,降低了因软件故障导致的调试中断风险。
自定义设置灵活 :用户可以根据自己的需求,自定义波特率、数据位、停止位、校验位等参数,满足不同场景下的调试需求。
安全性高 :格西烽火调试助手在数据传输过程中,采用加密技术,保护数据的安全,防止数据被窃取或篡改。




