NB-IOT开发实战

一,初识NB-IOT

1,NB-IOT介绍

  • NB ----Narrow Band
  • IOT —Internet of things
  • NB-IOT —窄带物联网

2,物联网发展
NB-IOT开发实战_第1张图片
NB-IOT开发实战_第2张图片
NB-IOT开发实战_第3张图片
NB-IOT开发实战_第4张图片
NB-IOT开发实战_第5张图片
广/深覆盖:比GPRS覆盖增强20dB+
在这里插入图片描述
NB-IOT开发实战_第6张图片
在这里插入图片描述
NB-IOT开发实战_第7张图片
低功耗:基于AA电池,使用寿命可超过10年
NB-IOT开发实战_第8张图片
在这里插入图片描述
NB-IOT开发实战_第9张图片
低成本:终端芯片低至$1
NB-IOT开发实战_第10张图片
NB-IOT开发实战_第11张图片
大连接:50K+用户容量*/200kHz小区
NB-IOT开发实战_第12张图片
应用场景
NB-IOT开发实战_第13张图片
NB-IOT开发实战_第14张图片
NB-IOT开发实战_第15张图片
NB-IOT开发实战_第16张图片
3,NB-IOT硬件平台介绍(NB-IOT,MCU,传感器,硬件平台)
NB-IOT模块选型:
NB-IOT开发实战_第17张图片
NB-IOT开发实战_第18张图片
NB-IOT模块参数:
NB-IOT开发实战_第19张图片
MCU选型:STM32F051

  • ARM Cortex-M0
  • 32位低功耗微处理器
  • 48MHz工作频率
  • 64Kbytes Flash
  • 8Kbytes SRAM
  • 32pin

MCU性能参数:
NB-IOT开发实战_第20张图片
LoRa硬件平台介绍–传感器
NB-IOT开发实战_第21张图片
NB-IOT硬件平台介绍–开发板
NB-IOT开发实战_第22张图片
开发流程:
NB-IOT开发实战_第23张图片
4,STM32CubeMX安装及使用
STM32CubeMX简介
微控制器图像化配置
- 自动处理引脚冲突
- 动态设置确定的时钟树
- 可以动态确定参数设置的外围和中间件模式和初始化
- 功耗预测
C代码工程生成器覆盖了STM32微控制器初始化编译软件,如IAR,KEIL,GCC可以独立使用,作为Eclipse插件使用。

HAL库与STD库
STD库–标准外设库
- 寄存器操作,将一些基本的寄存器操作分装成函数
HAL库–硬件抽象库
- 将这些抽象成一个抽象层,从使用的角度来看,是与硬件无关的
HAL库的优势
- HAL库是ST未来主推的库,从2015年开始ST新出的芯片已经没有STD库
- HAL库的处理机制比STD库好很多,HAL库支持STM32全线产品
- HAL库跨芯片的可移植性非常好
STM32CubeMX获取:
官网地址:http://www.st.com/en/development-tools/stm32cubemx.html
STM32CubeMX安装:

  • 安装JAVA运行环境,JavaSetup8u151.exe
  • 安装SetupSTM32CubeMX-6.2.0-win,最好不要有中文路径
  • 加载“stm32cube_fw_f0_v1112.zip”HAL库到STM32CubeMX中
    STM32CubeMX加载固件库:
    NB-IOT开发实战_第24张图片
    NB-IOT开发实战_第25张图片
    STM32CubeMX创建工程:File->new project
    NB-IOT开发实战_第26张图片
    NB-IOT开发实战_第27张图片
    NB-IOT开发实战_第28张图片
    NB-IOT开发实战_第29张图片
    NB-IOT开发实战_第30张图片
    在这里插入图片描述
    配置的最后点击GENERATE CODEG ,生成工程。
    NB-IOT开发实战_第31张图片
    创建完成后生成的工程目录:
    NB-IOT开发实战_第32张图片
    NB-IOT开发实战_第33张图片
    keil5的安装:安装完keil5后–>进行STLlink驱动安装(右击此电脑,选择管理–>选择设备管理器,发现其他设备STM32 STLink—>右击STM32 STLink ,选择更新驱动程序—>选择浏览我的计算机---->点击浏览选择驱动目录,win10系统window8–>完成驱动安装)
    在这里插入图片描述
    安装完keil后,双击pack包,然后关闭keil,在创建好的工程目录下进行入MDK-ARM打开NB-test.uvprojx工程,打开工程后查看STMicrorlectronics是否存在(即包是否安装成功)。
    NB-IOT开发实战_第34张图片
    NB-IOT开发实战_第35张图片

二,使用NB-IOT模块

1,NB-IOT基础工程搭建
开发板底板原理图:
NB-IOT开发实战_第36张图片
开发板上NB-IOT核心板原理图:
NB-IOT开发实战_第37张图片
分析NB-IOT核心板原理,分析一键还原底板原理,建立IO功能映射表。STM32F051K8芯片IO功能映射表:
NB-IOT开发实战_第38张图片
在STM32CubexMX软件下通过IO功能映射表对硬件端口进行定义:
IO口配置:
NB-IOT开发实战_第39张图片
NB-IOT开发实战_第40张图片
时钟的配置:
NB-IOT开发实战_第41张图片
NB-IOT开发实战_第42张图片
NB-IOT开发实战_第43张图片
外设树配置:SPI选择全双工主机模式,USART1选择异步收发模式,USART2选择异步收发模式。
NB-IOT开发实战_第44张图片
USART配置:USART1&USART2设置波特率为9600,开启全局中断
NB-IOT开发实战_第45张图片
SPI配置:设置数据位为8位,设置波特率为1.5MBit/s,时钟极性为低电平驱动,时钟相位为第一个边沿
NB-IOT开发实战_第46张图片
NB-IOT开发实战_第47张图片
LCD驱动移植:

  • LCD主要用于人机交互,动态显示设备信息。
  • 将下图所示文件添加到工程中,修改SPI初始化代码即可(LCD的MISO用于数据和指令切换)

printf函数重定向
#include< stdio.h>
int fputc(int ch,FILE *f)
{
while((USART1->ISR&0X40)==0);
USART1->TDR = (uint8_t)ch;
return ch;
}
将重定向函数加入到工程下的main.c中,如下:
在这里插入图片描述
NB-IOT开发实战_第48张图片
编译时出现如下错误:需要添加一个启动文件.s
NB-IOT开发实战_第49张图片
NB-IOT开发实战_第50张图片
将STLink烧写器和串口线连接好开发板后插入到电脑上,断电的情况下降SIM卡插入到开发板中。
烧写方法:
方法一:
NB-IOT开发实战_第51张图片
NB-IOT开发实战_第52张图片
NB-IOT开发实战_第53张图片
NB-IOT开发实战_第54张图片
NB-IOT开发实战_第55张图片
方法二:
使用烧写工具:STM32 ST-LINK Utility_v3.1.0,点击Target下的connect,出现下面的打印信息说明连接成功,然后点击Target下的program,添加烧写文件.hex文件,进行start烧写。
NB-IOT开发实战_第56张图片
NB-IOT开发实战_第57张图片
烧写完成后,打开串口调试助手:修改波特率和端口号,按三角形的开始键,然后对板子进行复位,查看打印信息。
NB-IOT开发实战_第58张图片
2,NO-IOT模块AT指令介绍
什么是AT指令

  • AT命令集是由拨号解调器(MODEM)的发明者为了控制Modem发明的控制协议。
  • AT是Attention的缩写,协议本身采用文本,每个命令均为AT打头。
  • AT指令用于控制手机GSM模块

AT指令级的应用
随后的GPSR控制,3G模块,以及工业上采用的PDU,均采用AT命令集来控制。
AT的优点:简单易懂,标准串口来收发AT命令。
AT指令的示意图
NB-IOT开发实战_第59张图片
AT指令的格式:

  • AT指令都以“AT”开头,以回车符(\r)结束。
  • 如果AT指令执行成功,‘OK’字符串返回,否则“ERROR”

AT指令
NB-IOT初始化AT指令

  • AT 命令解释,检测Module与串口是否接通,能否接受AT命令;
    命令格式:AT
    命令返回:OK与串口通信正常,无返回则与串口通未连接)
  • AT+CFUN=0关闭射频功能
  • 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”,"cnet"设置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 关闭连接
    3,AT指令透传
    串口透传开发
    为了便于我们快速掌握AT指令原理,MCU充当透明传输,PC机直接与NB-IOT模组直接通讯
    NB-IOT开发实战_第60张图片
    在创建好的工程目录下的main.c中加入如下代码:
    NB-IOT开发实战_第61张图片
    在stm32f0xx_it.c中加入如下串口中断处理的代码:
    NB-IOT开发实战_第62张图片
    编译烧录到开发板后,连接串口,通过串口调试助手发送AT指令来查看信心的打印信息。
    NB-IOT开发实战_第63张图片

三,NB-IOT连接网络

1,实现自己的服务器
物联网通信过程
NB-IOT开发实战_第64张图片
内外网结构
NB-IOT开发实战_第65张图片
实现内网穿透
socketTool V4.exe
NB-IOT开发实战_第66张图片
NB-IOT开发实战_第67张图片
官网主页:https://www.ngrok.cc/login.html
使用说明:https://www.ngrok.cc/_book/
电脑和服务器端建立隧道
NB-IOT开发实战_第68张图片
NB-IOT开发实战_第69张图片
2,使用AT命令连接服务器
下载ngrok客户端:
在这里插入图片描述
将隧道id添加到Sunny-Ngrok启动工具.bat 下
NB-IOT开发实战_第70张图片
NB-IOT开发实战_第71张图片
Lierda NB Module V150_AT CommandSet_B300_V1.1.pdf文档
通过AT+CSQ查看是否有信号,AT+CGPADDR查看信号的ip地址(是否入网)
NB-IOT通过AT指令联网:创建socket (AT+NSOCR=STREAM,6,60000)—>连接服务器*AT+NSOCO=1,远程域名地址查到的ip地址,远程端口号10624)—>发送数据(AT+NSOSD=1)—>关闭连接(AT+NSOCL=1,个数,十六进制数据)
Windows下通过cmd命令窗口键入:ping +远程域名地址 查看到ip地址

NB-IOT开发实战_第72张图片
NB模块与服务器建立了连接:
下一步发送数据NB-IOT开发实战_第73张图片
3,使用自动化串口工具来发送AT指令
NB-IOT开发实战_第74张图片
通过TCP/UDP socket 调试工具查看连接好服务器后接收到的消息。

四,实现代码驱动NB-IOT

1,驱动NB联网代码
利用STM32CubeMX生成代码,单片机的串口2与NB模块进行通信,给串口2配置DMA功能
NB-IOT开发实战_第75张图片
NB-IOT开发实战_第76张图片
NB-IOT开发实战_第77张图片

DMA接受部分的函数如下:
NB-IOT开发实战_第78张图片
NB-IOT开发实战_第79张图片
NB-IOT开发实战_第80张图片

2,驱动NB串口发送和接受

3,驱动NB串口任务框架

4,驱动NB完整联网

5,修改AT指令为灵活字符串

你可能感兴趣的:(物联网)