BLE-NRF51822教程-RSSI获取
当手机和设备连接上后,设备端可以通过获取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获取的更多相关文章
- 蓝牙BLE实用教程
蓝牙BLE实用教程 Bluetooth BLE 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Re ...
- jquery教程-Jquery 获取标签个数 size()函数用法
jquery教程-Jquery 获取标签个数 size()函数用法,size() 方法返回被 jQuery 选择器匹配的元素的数量. 语法 $(selector).size() jQuery ...
- Python实战:Python爬虫学习教程,获取电影排行榜
Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...
- [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标
有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...
- 蓝牙BLE实用教程(转载)
欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Ready 和 Smart 以及传统蓝牙之间是什么关 ...
- GStreamer基础教程06 - 获取媒体信息
摘要 在常见的媒体文件中,通常包含一些数据(例如:歌手,专辑,编码类型等),用于描述媒体文件.通常称这些数据为元数据(Metadata:data that provides information a ...
- 微信蓝牙设备开发教程之获取设备deviceid和二维码(3)
文章转载地址 http://www.vxzsk.com/87.html 设备授权 调用 设备授权新接口 ,获取deviceid和二维码,然后利用获取到的deviceid更新设备属性(如mac地址, ...
- Android初级教程_获取Android控件的宽和高
转载:http://blog.csdn.net/johnny901114/article/details/7839512 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看 ...
- Wix 安装部署教程(七) 获取管理员权限
应用程序运行的时候,难免会读写文件,产生新的数据.但Program Files下的文件是不能随便更改,Win7下如果没有权限,将会被拒绝.我现在有两种方式,一种是将数据路径移到Program Data ...
随机推荐
- contentprovider的学习实例总结
工作中遇到了contentprovider数据共享机制,下面来总结一下: 一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数 ...
- org.springframework.beans包
beans包中最核心的两个类:DefaultListableBeanFactory&XmlBeanDefinitionReader DefaultListableBeanFactory Xml ...
- 简单几何(凸包) POJ 1696 Space Ant
题目传送门 题意:一个蚂蚁一直往左边走,问最多能走多少步,且输出路径 分析:就是凸包的变形题,凸包性质,所有点都能走.从左下角开始走,不停排序.有点纠结,自己的凸包不能AC.待理解透凸包再来写.. 好 ...
- 最大子矩阵和 URAL 1146 Maximum Sum
题目传送门 /* 最大子矩阵和:把二维降到一维,即把列压缩:然后看是否满足最大连续子序列: 好像之前做过,没印象了,看来做过的题目要经常看看:) */ #include <cstdio> ...
- Assets/Sciprts/GameSciprt.js(97,46): BCE0044: expecting :, found ','.
function BuildDeck() { var totalRobots:int=4; var card:Object; var i:int; for(i=0;i<totalRobots;i ...
- 从Apache Storm学到的经验教训 —— storm的由来(转)
阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...
- 洛谷 P1541 乌龟棋 Label:O(n^4)的dp
题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起 ...
- 51NOD 算法马拉松12
OTZ做出题目的神犇..断断续续改完了在这里存一下思路吧 A题:第K大区间题意:定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 分析:二分答案mid,任务 ...
- 定时任务之Spring与Quartz的整合(有修改)
转摘:http://www.javaweb1024.com/java/JavaWebzhongji/2015/04/13/548.html 在Spring中使用Quartz有两种方式实现:第一种是任务 ...
- div里嵌套了img底部会有白块问题和图片一像素问题解决
div里嵌套了img底部会有白块 因为img默认是按基线(baseline)对齐的.对比一下图片和右边的p, q, y等字母,你会发现这三个字母的“小尾巴”和图片下方的空白一样高.下面这张图中的黑线就 ...