NB-IOT网络连接实战

2018年11月05日 405点热度 0人点赞 0条评论

[title]实战目标[/title]

经过前面几个章节的学习,我们已经掌握了STM32的基本开发步骤以及USART串口通信的实现和AT命令的操作。本章节就需要用到这些知识,通过编程使用STM32控制NB-IOT模块连接网络并进行数据收发的操作。

基本步骤就是使用STM32的USART串口给NB-IOT模块发送AT命令,从而把开发板采集的信息通过NB-IOT模块,使用UDP协议发送到后端服务器。网络架构图如下:

[title]需要做什么[/title]

本例程中我们将会涉及到的编程内容如下:

  1. 启动USART1,用于输出调试信息进行跟踪
  2. 启动USART3,用于跟模块进行通信发送AT指令
  3. 启动STM32内核定时器,用于延时操作
  4. NB-IOT模块操作
  5. 读取开发板的实时输入电压
  6. 读取湿度传感器的信息
  7. 使用TLV数据协议封装数据

注:本章节所涉及到的代码量比较大,有些东西不能理解是很正常的,这些我们在以后的工作中接触多了就会慢慢的理解。

了解了我们将要做的事情后,接下来就要开始程序的开发,一步一步的实现我们所需要的功能。由于代码量比较大,我们可以先下载本章节所提供的源代码,使用KEIL工具打开源码工程。如下图:

[title]工程文件介绍[/title]

如图,工程里面有“main”,“usart”,“senser”,“tlv”,“library”,“startup”目录。其中“library”,“startup”在之前已经有过介绍,此处就不再赘述。

main目录中,我们编写了三个文件main.c,nbiot.c,sysdelay.c

  • main.c:主函数,里面将调用相关函数接口,初始化USART,ADS(用于电压测量),定时器,传感器接口等,并实现主要需求逻辑。
  • nbiot.c:主要实现NB-IOT模块初始化和UDP数据收发的接口函数。
  • sysdelay.c:实现了用于延时操作的接口函数。

usart目录中,包含了usart1.c和usart3.c两个文件。

  • usart1.c:主要实现了串口USART1的初始化和数据收发,主要用于调试信息输出,方便开发。
  • usart3.c:主要实现了串口USART3的初始化和数据收发,主要用于更NB-IOT模块进行AT命令的操作。

senser目录,该目录有battery.c和dht11.c两个文件

battery.c:该文件主要是初始化ADS,用于测量MCU的输入电压值。

dht11.c:该文件为实现了温湿度传感器(DHT11)的初始化和数据读取功能。

注:DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

tlv目录,该目录里面包含的文件主要是实现TLV数据格式的打包和解包。

使用TLV数据协议是因为物联网模块与服务器进行数据收发时,收发的数据包都是需要有一定的格式,这样才方便服务器和终端对数据的解析。之所以采用TLV数据协议是因为该协议可以最小化数据包,这样也符合物联网受限网络环境的要求。

TLV简介:

TLV,即Tag-Length-Value,是一中简单实用的数据传输方案。在TLV的定义中,单个数据块可以看出它包括三个域,分别为:标签域(Tag),长度域(Length),内容域(Value)。这里的长度域的值实际上就是内容域的长度。整个数据包会包含多个TLV数据块,基本的用法如下图所示:

[title]实战步骤[/title]

在编译工程之前,我们需要确定几个参数

  • APN的设置

在工程文件at.h中,找到如下宏定义代码

本例设置的APN为cmnet,可根据下图自行修改和测试。

  • UDP服务器的IP和Port

设置本地UDP监听端口的函数,本例设置的本地端口号为3000,这里也可以自行修改。

发送数据到服务器的函数示例,本例发送的服务器IP:47.91.238.235 端口号:7385。这里也是可以自行修改指向自己的服务器。

注:本例使用的服务器是一个公共平台,上送的数据信息可以通过浏览器或者手机APP查看。

接收服务器响应数据的函数示例,本例接收超时时间设置为10s

修改完以上参数后,就可以开始编译项目工程。不出意外,就会成功生产“udptest.hex”目标文件。

注:如果因为STM32库文件路径不对而报错,那么就需要手动修改项目工程有关库文件的路径指向自己本机。主要需要注意的是“library”目录中的文件和项目管理界面中的“C/C++   --> Include Paths”内容。

连接开发板,将编译成功的udptest.hex文件烧录到开发板中。烧录步骤在前面已经介绍过,此处省略。

烧录成功后,重启开发板,并开启串口调试助手,观察程序的工作状态。

该程序的基本流程如下:

  1. 初始化串口
  2. 初始化各个传感器硬件
  3. 初始化NB-IOT模块
  4. 检测NB-IOT模块是否成功注册到网络(即命令“AT+CEREG?”返回值为“+CEREG:0,1”)
  5. 使用AT命令“AT+NSOST”发送UDP数据包
  6. 在10s内检测是否有UDP数据包被接收,如果有使用AT命令“AT+NSORF”接收服务器返回的数据包。
  7. 循环在第4~6步。

如下图可以从串口调试助手看到使用AT命令收发UDP数据的过程。

 

详细实现代码参加本书资料包中的“udptest”文件夹。

项目源码和所涉及到的工具都可以在blog.hanxe.com中下载。

文章评论