nRF52832蓝牙主机

一般来说,蓝牙从机是比较常见的,因为其能提供一些服务。

主机通常就是接收数据的一方,只需要能够正确接收数据即可,比如一些手机APP就能充当主机的角色,这是因为手机可以接收蓝牙信号。如果有一些设备不具备蓝牙接收功能,但是也希望能够接收蓝牙从机的数据,那么就需要自己去实现一个蓝牙主机,就比如台式机,通常本身并不具备蓝牙接收功能,这时候,就可以购买一个蓝牙hub通过USB接入台式机,这时候,主机就充当一个透传的中间设备,将从机的数据透传到台式机上。

接下来,就认识下蓝牙主机吧。

扫描

主动扫描和被动扫描

如果需要从机发送扫描响应,就需要主动扫描,被动扫描只会接收广播,不会发送扫描请求,只有发送扫描请求才会收到扫描响应。

配置步骤

基本使用流程如下:

LOG初始化log_init

串口初始化uart_config

指示灯初始化leds_init

电源管理初始化power_management_init

协议栈初始化ble_stack_init,注册BLE事件回调函数ble_evt_handler

定义扫描器实例

NRF_BLE_SCAN_DEF(m_scan);           //定义名称为m_scan的扫描器实例

扫描初始化scan_init

这里面需要设置扫描参数m_scan_param,初始化扫描器nrf_ble_scan_init时注册扫描事件处理函数scan_evt_handler,添加过滤器nrf_ble_scan_filter_set,使能过滤器nrf_ble_scan_filters_enable,这里要注意,在过滤器中注册的不是要过滤掉的,而是过滤器允许通过的,而且使能的过滤器类型必须是已经添加的。

启动扫描scan_start

关于获取扫描数据,直接参考手册3.4节以及对应工程实例

可以看到,其实主机中真正核心的步骤就三个,其他GATT和GAP等等,因为都属于服务,是从机的内容,所以此处无需配置。

关于扫描过滤

仔细想想,过滤器里注册的,应该是不符合要求的,还是符合要求的呢?

应该是符合的,因为符合要求的,可能就是指定的那几个,如果要填不符合的,那么就有千千万万个,是不可能全部填进去的。

白名单

也就是说,要通过的目标,要么在白名单中,要么在过滤器中。

过滤类型

添加过滤器nrf_ble_scan_filter_set

使能过滤器nrf_ble_scan_filters_enable

更多类型过滤,可直接参考文档和实验

以上是扫描阶段,当扫描到匹配的广播设备时,主机就会向从机发起连接。

发起连接

 

操作步骤如下:

注意,就算没有数据发送,一旦建立连接,主从机也会定时发送空包以维持连接事件,保持心跳。

手册中有这样的一句话

 

应该是如果不交换MTU并且不更新连接参数,那么,双方可能就无法正常通信,从而导致断开。

MTU交换

MTU交换仅在客户端连接期间发送一次,而非定期协商。

只有客户端可以发起MTU请求。

MTU交换属于属性协议,是由程序中的GATT模块处理的,因此需要加入GATT部分的代码。

1、头文件

2、NRF_BLE_GATT_DEF(m_gatt);    //定义名称为m_gatt的GATT模块实例

3、初始化GATT,gatt_init,这里注册了GATT回调函数gatt_evt_handler

4、GATT处理函数

5、设置sdk_config.h

连接参数更新

使用协商式的连接参数更新

BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST://连接参数更新请求

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值