4. ble_app_sample总结

4.1. 1 ble_app_sample是什么

​ ble_app_sample是nordic nrf5x系列芯片从设备(Slave)的蓝牙服务例程,例如电池服务、心率服务等。该例程包含在RT-Thread的nrf5x_sdk软件包中,可以很方便的加载到RTT工程中运行。该例程使用的蓝牙协议栈是Nordic softdevice s140。

4.2. 2 ble_app_sample如何使用

​ 一般直接使用nrf5x的RT-Thread工程模板。

​ 工程中加载例程可以使用RTT的ENV工具,也可以使用RT-Thread Studio配置工程。配置完后例程会自动加载到工程之中。

​ 下面以ENV工具配置ble_app_blinky服务为例说明。

2.1 试验板

​ 以nrf52840开发板试验。如下图:

../../../_images/20201011183341.jpg

2.2 程序配置设置

  • 下载RT-Thread的nrf52840 BSP工程模板,下载地址是 https://github.com/RT-Thread/rt-thread

  • 下载并安装RT-Thread 开发辅助工具Env。参考RTT安装介绍,下载地址 https://www.rt-thread.org/page/download.html

  • 进入nrf52840工程文件夹

    \rt-thread\bsp\nrf5x\nrf52840

    ../../../_images/1602414008006.png

  • 打开env配置工具

    在工程中右击选择ConEmu Here

    1602414635016

  • 然后弹出如下界面

    1602414731322

  • 输入menuconfig弹出如下界面

    1602414840083

  • 使用方向键选择配置UART和GPIO

    1602415188693

1602415356435

1602416377390

在Enable UART中可以选择UART0或者UART1,可以配置rx和tx的引脚编号。此开发板选择默认。

1602415971201

  • 配置ble协议栈

    1602416110142

1602416513402

  • 配置nrfx和nrf5x_sdk软件包

    1602416646372

1602416691268

1602416784531

在nrf5x_sdk中选择ble_app_blinky应用例程

1602417315424

ble_app_blinky例程中可以配置应用使用的引脚编号(要与开发板对应),此开发板选择默认值。引脚编号是rtt驱动层drv_gpio.c对nrf5x芯片定义的引脚编号。从1-47依次对应gpio端口0的32个引脚和gpio端口1的16个引脚。

2.3 配置编译

按Esc退到该界面

1602416971612

选择yes保存,出现如下界面

1602417099315

输入scons –target=mdk5回车编译工程,因为使用mdk5开发环境,也可以根据具体环境选择mdk4或者iar等。

编译需要一段时间,完成后退出env工具。

2.4 编译下载程序

打开项目中的工程文件

../../../_images/1602513252474.png

编译工程

../../../_images/1602513620018.png

连接开发板,选择softdevice,下载程序

../../../_images/1602513747416.png

选择rtthread,下载程序

../../../_images/1602513851980.png

打开串口调试助手,首次启动运行出现如下信息

1602514582172

输入help,按压回车,出现如下信息

1602514666270

输入ble_app_blinky,启动ble_app_blinky应用例程。开发板的广播指示灯亮。

1602514860424

2.5 手机连接验证

手机端下载nRF Connect工具。下载地址是

https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-mobile

1602515417544

打开手机蓝牙功能,打开该app,搜索到Nordic_Blinky。

1602515696197

点击CONNECT,连接并打开按钮和LED服务

1602516049884

按照下面操作,可蓝牙无线控制开发板。

1602516464739

4.3. 3 添加新的ble_app_sample

​ ble_app_bas是电池服务例程,下面以ble_app_bas为例介绍添加过程。

3.1 编写ble_app_bas.c源文件

​ 在软件包nrf5x_sdk中创建ble_app_bas.c文件,保存路径是\nrf5x_sdk\rtt_adapter。如下图:

1606623889936

​ ble_app_bas.c是例程的主体文件。主要实现的内容包括:

  • 创建RTT任务(例程是单独的一个任务)

  • 相关芯片外设的初始化

  • 蓝牙协议栈初始化

  • GAP初始化

  • GATT初始化

  • 服务初始化(服务实现例程的功能)

  • 连接参数初始化

  • 广播功能初始化,并启动广播

4.4. 3.2 添加工程配置的Kconfig

​ nrf5x_sdk软件包是依靠RTT的env工具配置(RT-Thread Studio最终也是依赖env),所以需要在env对应的包配置Kconfig文件中添加配置语句。方法看RTT文档中Kconfig基本语法。

​ Kconfig文件的路径是env\packages\peripherals\nrf5x_sdk。配置语句内容如下:

1606657568831

​ 语句层级关系属于if PKG_USING_NRF5X_SDK下一级,又choice的下一级。

3.3 添加文件加载的脚本

​ 生成工程的时候,该脚本将依赖的.c文件、.h文件加载到工程中。脚本位置是\nrf5x_sdk中的Sconscript。如图:

1606626624105

​ 脚本中需要添加ble_app_bas.c主体文件下载路径。还有电池服务依赖的ble_bas.c文件下载路径、头文件ble_bas.h的路径。代码如下:

1606626847968

3.4 向github仓库提交写好的例程

  • 把例程主体文件ble_app_bas.c和加载的脚本Sconscript文件提交到nrf5x_sdk软件包的GitHub仓库。

    仓库地址是https://github.com/supperthomas/nrf5x_sdk

  • 把Kconfig文件提交到env软件包配置仓库。

    仓库地址是https://github.com/RT-Thread/packages