BLE-NRF51822-实现简单扫描器
在sdk目录 XXX:\Keil_v5\ARM\Pack\NordicSemiconductor\nRF_Examples\9.0.0\ble_central 下有官方提供的主从连接的demo。

官方的demo中实现的是主机通过名字来判断 周围的设备是否是自己要寻找的设备,如果是就发起来接。 并且连接建立后可以继续保持侦听,一共可以连接8个设备。 连接上后,从机可以通过按键button1 来让主机的对应的led亮。这个例子是要在官方板pca10028上才可以看到现象的,其他的板子如果不兼容需要自己修改button和led的引脚。
这里就在这个 central的例子上做一个简单的侦听器。
官方demo里面的main函数很简单如下图所示:

app_trace_init用来初始化打印模块,工程默认是关闭打印宏的,所以这个函数你右击找到的定义是空的。需要通过定义ENABLE_DEBUG_LOG_SUPPORT来打开打印功能。

然后就是LED初始化,按键初始化(这个按键初始化是用来设置一个从深度睡眠中唤醒的引脚)。 协议栈初始化。
Client_handling_init初始化主要是用来注册自己想要找到的服务。比如你注册了服务A和对应的处理函数, 那么等主从机连接上后,并且服务发现完成后,就会判断发现的服务中是否有你之前注册的想要找的服务A有就会执行对应的回调处理函数。这个例子中我们没有用到,暂时不用关心。
Device_manager_init 用来初始化设备管理了,管理绑定信息之类的,这里也不需要用到
初始化完成后,调用 scan_start就可以进行广播了。

前面一部分是判断 是否有正在处理的flash访问操作。如果有就暂时不启动广播,没有才会启动广播。 如果前面真的做了flash访问操作,并且没有完成岂不是不能广播了?
如果真有,广播会在flash操作完成后进行。相关代码如下
Flash操作完成首先会进入下面代码:


在判断到flash访问完成后,清除正在访问flash的标志,并且调用启动广播函数scan_start。
scan_start最终调用如下协议栈API
|
uint32_t sd_ble_gap_scan_start |
( |
ble_gap_scan_params_t const * |
p_scan_params |
)<span "="" style="word-wrap: break-word;"> |
找到m_scan_param参数定义

值的意义依次为:
0,表示只侦听广播,不主动发起scan_req请求。
0,表示侦听所有广播包,不做过滤。
NULL,没有白名单
扫描间隔,和扫描窗口。(比如1s的间隔和0.5s的窗口,那么每1s就会启动侦听,但是只侦听0.5s,只会休眠。等待下一个1s到来)
0,表示没有扫描超时,即设备会一值侦听除非主动关闭扫描
启动广播之后,设备就会不断侦听其他设备的广播。
当收到广播数据后,协议栈会上抛一个BLE_GAP_EVT_ADV_REPORT事件给上层,所以实现一个简单的侦听器,我们直接在事件处理中添加一个BLE_GAP_EVT_ADV_REPORT事件的分支,并在该分支中提取收到的广播数据就可以了。
官方的例子里面已经有针对 BLE_GAP_EVT_ADV_REPORT这个事件的处理了。

代码中就是从广播数据中提取了 设备名 然后判断是不是自己要连的那个设备。
我们不需要动这些代码,直接在前面添加广播数据的打印就可以了。如图所示

打印结果如图所示

关于adv data的数据怎么解析,参考 教程 ble广播数据解析。
广播数据结构体中还有一个scan_rsp 没有使用

这个为是用来区分 当前的广播数据是普通广播数据,还是收到的扫描响应数据(扫描者发送了scan_req,如果广播者可以响应则会回复scan_rsp)。
如果需要区分自己判断一下就行了
BLE-NRF51822-实现简单扫描器的更多相关文章
- Android蓝牙BLE低功耗相关简单总结
在看Android4.42的源代码时看到有加入对BLE设备的处理.看的一头雾水,多方百度,最终有种柳暗花明的感觉. 本文总结来源于百度多篇文章,欢迎转载.分享交流 BLE蓝牙概念 BLE:Blueto ...
- 以面向对象的思维,搭建Android与多ble蓝牙设备并发通讯小框架
Android连接多蓝牙设备.蓝牙与多设备连接.蓝牙ble多设备并发操作.Android连接不了.Android ble开发框架.Android 连接蓝牙总结 前言 小白请绕道百度,本文适合有一定An ...
- 搭建Android与多ble蓝牙设备并发通讯小框架
此框架支持多种不同类型的ble设备,同时连接.收发数据,互不干扰.比如APP同时连两个LED蓝牙灯.两个手环.一个蓝牙加热器,当然连接单个ble设备,或者只连接一种ble设备同样适用本框架. 前言 小 ...
- android5.0(Lollipop) BLE Central牛刀小试
转载请表明作者:http://blog.csdn.net/lansefeiyang08/article/details/46482073 昨天写了android L BLE Peripheral的简单 ...
- nrf51822-主从通信分析1
建议看该教程前,先看一下 简单扫描器实现 教程 讲解基于sdk目录下central中的两个例子. 关于主机的程序框架其实和从机都是一样的,都是基于事件驱动的框架. Main函数中完成初始化, 从机 ...
- BlackArch-Tools
BlackArch-Tools 简介 安装在ArchLinux之上添加存储库从blackarch存储库安装工具替代安装方法BlackArch Linux Complete Tools List 简介 ...
- Bluetooth Low Energy 介绍
1.简介 BLE(Bluetooth Low Energy,低功耗蓝牙)是对传统蓝牙BR/EDR技术的补充.尽管BLE和传统蓝牙都称之为蓝牙标准,且共享射频,但是,BLE是一个完全不一样的技术.BLE ...
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之五
5应用测试 需要一个USB dongle与开发板evaluation kit,并配合Master Control Panel软件,以用于测试BLE应用.前期的准备工作在<nRF51822 Eva ...
- [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)
蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...
随机推荐
- php:订单号和时区
1.php制作订单号 $data['orderid'] = date("YmdHis") . settype(rand(100000, 999999), string) ; 2.p ...
- 2016.6.17 计算机网络复习要点之PPP协议
点对点协议PPP是目前使用最广泛的数据链路层协议. 1.PPP协议的特点: **我们知道因特网用户通常需要连接到某个ISP才能接入到因特网,PPP协议就是用计算机和ISP进行通信时所使用的数据链路层协 ...
- Kali Linux 2016.2初体验使用总结
Kali Linux 2016.2初体验使用总结 Kali Linux官方于8月30日发布Kali Linux 2016的第二个版本Kali Linux 2016.2.该版本距离Kali Linux ...
- Xamarin Anroid开发教程之下载安装Xamarin
Xamarin Anroid开发教程之下载安装Xamarin Xamarin在过去安装时都会检查系统中是否安装了前面所提供的内容.而后来,Xamarin安装时只提供安装步骤,其它内容都需要读者自己下载 ...
- Android SDK Manager无法更新,内容显示不全的解决办法
最近在初学android开发,在更新SDK的时候遇到了麻烦. 发现Extras文件夹下为空,没有内容,包括sdk列表也不全面,更新也没有反应 解决方法: 1.在SDK Manager下Tools-&g ...
- BZOJ2584 : [Wc2012]memory
xy方向分开考虑 用扫描线处理出拓扑序,第二问直接回答拓扑序, 第一问: 将操作倒过来,变成加入线段,用线段树维护区间拓扑序的最值 #include<cstdio> #include< ...
- Mono for Android 篇二 使用Spinner 实现下拉列表读取Browser.BookmarksUri
http://www.cnblogs.com/ivanyb/archive/2013/03/05/2944818.html 1.首先在VS2010里面创建一个Android Application 简 ...
- 【BZOJ】1008: [HNOI2008]越狱(快速幂)
http://www.lydsy.com/JudgeOnline/problem.php?id=1008 刚开始看不会做啊,以为是dp,但是数据太大!!!所以一定有log的算法或者O1的算法,,,,还 ...
- Splay 伸展树
废话不说,有篇论文可供参考:杨思雨:<伸展树的基本操作与应用> Splay的好处可以快速分裂和合并. ===============================14.07.26更新== ...
- NOIP200003方格取数
NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...