当手机和设备连接上后,设备端可以通过获取RSSI,在一定程度上判断手机离设备的相对距离的远近。

获取函数很简单直接调用sd_ble_gap_rssi_get 接口函数就行了,传入连接句柄和buff就能获取到最近一次连接事件中的接收信号强度。

调用该函数之前需要先调用sd_ble_gap_rssi_start 函数,该函数有三个参数,第一个为连接句柄,第二个为改变阈值, 第三个为忽略次数。

该函数有两种用法, 一种就是 将阈值参数设置为BLE_GAP_RSSI_THRESHOLD_INVALID, 忽略次数参数设置为0。那么每次直接调用sd_ble_gap_rssi_get 函数获取最近一次连接事件中的RSSI值就行了。

如下图所示

另一种使用方式是,设置第二个参数为一个有效的域值, 当rssi与上一次收到的rssi差值大于等于这个阈值时就会触发 BLE_GAP_EVT_RSSI_CHANGED 事件,同时也可设置第三个阈值来防抖动,即忽略次数,比如设置 阈值为5,忽略次数为3。如果前一次收到的rssi 为1 ,那么只有rssi差值大于等于5超过 三次,第四次才会产生BLE_GAP_EVT_RSSI_CHANGED 事件

如图所示

下面实际用代码来实现两种方式。

第一种不使用阈值和事件的简单方式: 即直接启动,然后调用函数主动获取。

我们设置一个定时器,在设备连接上后,启动定时器开始周期获取RSSI.

在main 函数中,创建一个定时器

app_timer_create(&rssi_timer, APP_TIMER_MODE_REPEATED, rssi_timeout_handler); 

定时处理函数很简单,就是获取RSSI

void rssi_timeout_handler(void *p_context){
       int8_t rssi;
       sd_ble_gap_rssi_get(m_conn_handle, &rssi);
       printf("rssi: %d\r\n",rssi);
} 

然后在连接事件产生的地方添加 sd_ble_gap_rssi_start 并且启动,上面创建的定时器。

如下图所示

运行程序,当手机连接上设备后,就能看到串口周期打印RSSI值了,手机变动距离可以看到RSSI值的变化。

第二种方式: 使用阈值和事件方式

在on_ble_evt 事件处理函数中,添加当收到连接事件后启动rssi 测量代码,和BLE_GAP_EVT_RSSI_CHANGED事件处理代码

代码中我们定义rssi变化值大于5时才产生BLE_GAP_EVT_RSSI_CHANGED事件,然后在事件处理中打印rssi值

如下图所示:

运行程序查看输出打印可以发现 RSSI的差值都是大于等于5的

BLE-NRF51822教程-RSSI获取的更多相关文章

  1. 蓝牙BLE实用教程

    蓝牙BLE实用教程 Bluetooth BLE 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Re ...

  2. jquery教程-Jquery 获取标签个数 size()函数用法

    jquery教程-Jquery 获取标签个数 size()函数用法,size() 方法返回被 jQuery 选择器匹配的元素的数量. 语法 $(selector).size()     jQuery ...

  3. Python实战:Python爬虫学习教程,获取电影排行榜

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  4. [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

    有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...

  5. 蓝牙BLE实用教程(转载)

    欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Ready 和 Smart 以及传统蓝牙之间是什么关 ...

  6. GStreamer基础教程06 - 获取媒体信息

    摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件.通常称这些数据为元数据(Metadata:data that provides information a ...

  7. 微信蓝牙设备开发教程之获取设备deviceid和二维码(3)

    文章转载地址  http://www.vxzsk.com/87.html  设备授权 调用 设备授权新接口 ,获取deviceid和二维码,然后利用获取到的deviceid更新设备属性(如mac地址, ...

  8. Android初级教程_获取Android控件的宽和高

    转载:http://blog.csdn.net/johnny901114/article/details/7839512 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看 ...

  9. Wix 安装部署教程(七) 获取管理员权限

    应用程序运行的时候,难免会读写文件,产生新的数据.但Program Files下的文件是不能随便更改,Win7下如果没有权限,将会被拒绝.我现在有两种方式,一种是将数据路径移到Program Data ...

随机推荐

  1. Listview点击事件

    listview = (ListView) findViewById(R.id.listview); // 填充data数据 data = new ArrayList<String>(); ...

  2. Loadrunner关联

    学习LoadRunner之关联(二) Lr学习之关联-随机删除一行数据和全部删除数据 录制一个系统,我录制的是一个交通方面的系统,登陆到系统里面,查询车牌颜色,将其中一条数据删除. "Nam ...

  3. Servlet常见错误及解决方法

    常见错误及解决方法 1. 404产生的原因为Web服务器(容器)根据请求地址找不到对应资源,以下情况都会出现404的错误提示: 输入的地址有误(应用名大小写不正确,名称拼写不正确) 在web.xml文 ...

  4. eclipse插件开发--获取当前项目路径

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  5. POJ 1548 (二分图+最小路径覆盖)

    题目链接:http://poj.org/problem?id=1548 题目大意:给出一张地图上的垃圾,以及一堆机器人.每个机器人可以从左->右,上->下.走完就废.问最少派出多少个机器人 ...

  6. HTML6 展望

    HTML5 概述 HTML5 是 HTML 语言最受欢迎的版本之一,它支持音频和视频.离线存储.移动端.和标签属性等等.还提供了<article>, <section>, &l ...

  7. Robotium查找指定控件

    一.通过ID查找控件 Activity act=solo.getCurrentActivity(): int id=act.getResources().getIdentifier("id名 ...

  8. ios ASIHttpLib 同步请求和异步请求

    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...

  9. HDU 4417 Super Mario(划分树+二分)

    题目链接 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...

  10. Thrift入门及Java实例演示

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...