![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
BLE
西米爱吃虾米
每天进步一点点吧。。
展开
-
NRF51822蓝牙服务(9)——动态修改设备的名称
前言很多时候我们希望能够通过手机动态修改设备的MAC地址、配对密码或者蓝牙设备信息等,其实原理上都是可以实现的。大概思路其实就是把我们需要修改的内容发送到FLASH中保存,然后再用FLASH中的内容替代原先的内容。最后重启服务就行了。这里我们通过修改设备的名称来验证一下。实验分析官方的协议栈实现中默认都会提供Generic Access(GAP)服务(UUID:0x1800)和Gene...原创 2019-12-19 21:16:07 · 2326 阅读 · 0 评论 -
NRF51822蓝牙服务(8)——动态密码配对
前言上篇我们学习了使用静态密码的方式在连接时进行密钥的验证,那么我要使用动态密码,进一步提高安全性呢?这里我们就在上篇代码的基础上尝试使用动态密码的方式完成蓝牙配对。实验分析由于,静态密码的时候已经把基本步骤详细讲述,这里就不再过多讲述。由于开发板没有显示屏,所以这里采用串口打印的方式获取动态密码。static void gap_params_init(void){ ...原创 2019-12-18 19:34:19 · 1230 阅读 · 1 评论 -
NRF51822蓝牙服务(7)——静态密码配对
前言有时候我们希望能够在连接的时候进行密钥的验证,以保障连接的安全。为了保证低功耗蓝牙的绝大多数安全特征,必须完成两个事情。首先是设备必须互相配对;其次,设备必须分配用于加密、保障隐私并对消息进行验证的密钥。这里我们尝试使用静态密码的方式完成蓝牙配对。实验分析这里,我们仍然使用前面的串口实验例程。配对连接过程:手机连接上之后立刻调用安全请求API(sd_ble_gap_aut...原创 2019-12-16 21:03:08 · 2132 阅读 · 4 评论 -
NRF51822蓝牙服务(6)——显示设备信息
前言有时候开发项目,我们希望能通过蓝牙直接读取到设备的信息,例如制造商、固件版本、硬件版本和软件版本等信息。所以,今天我们就直接使用官方提供的服务来实现这个需求。实验分析首先,我们需要把官方驱动例程添加到我们的工程(这里使用前面用到的串口例程)目录里面:路径是:工程目录\components\ble\ble_services\ble_dis接着,我们去看看官方提供给我们的接...原创 2019-12-10 21:52:27 · 1439 阅读 · 1 评论 -
蓝牙:GATT,属性,特性,服务
通用属性配置文件(Generic Attribute Profile)1.GATT简介通用属性配置文件Generic Attribute Profile简称GATT。GATT定义了属性类型并规定了如何使用,包括了一个数据传输和存储的框架和一些基本操作。中间包含了一些概念如特性characteristics,服务services等,在后面介绍。同时还定义了发现服务,特性和服务间的连接的处理...转载 2019-12-09 22:27:04 · 2617 阅读 · 1 评论 -
NRF51822蓝牙服务(5)——FLASH存储数据
前言有时候我们希望能够把蓝牙接收的数据保存下来,为以后调用和处理提供方便。所以这里我们可以尝试把数据存放在内部FLASH里面,因为FLASH掉电不易失,是一个很好的存储方式。实验分析NRF51822官方BLE协议栈实际上是提供了FLASH存储库函数,采用这些库函数,可以很方便的在工程里面进行FLASH的相关操作,这样就避免了我们重复造轮子了。NRF51822官方在SDK例程里面提供...原创 2019-12-07 23:15:19 · 1956 阅读 · 0 评论 -
NRF51822蓝牙服务(4)——串口透传
前言这一次我们尝试创建一个串口服务来实现手机与开发板的数据透传,其实无非就跟学习创建LED读写服务的时候一样创建一个私有服务而已。废话少说,我们直接开始实验。实验分析首先,我们要知道NRF51822的串口通信引脚:RX:P0.11,TX:P0.9,RTS:P0.10,CTS:P0.8。接着,新建串口驱动文件:ble_nus.c和ble_nus.h ...原创 2019-12-05 21:22:46 · 3512 阅读 · 3 评论 -
NRF51822蓝牙服务(3)——电池电量采集
前言由于蓝牙BLE就是为低功耗手持设备存在的,那电池电量的监测服务就不可或缺了。由于电量服务是蓝牙兴趣小组指定的服务,不需要用户去创建私有服务,所以这个实验我们直接使用官方提供的驱动文件即可。实验分析由于我的开发板没有提供AD口检测电量,所以实验直接使用一个全局变量代表电量值,每隔一秒更新一次。首先,我们需要把官方驱动例程添加到我们的工程目录里面:路径是:工程目录\com...原创 2019-12-04 13:20:12 · 2713 阅读 · 1 评论 -
NRF51822蓝牙服务(2)——按键通知
前言上篇已经通过一个LED读写实验,学习了如何添加一个私有服务。现在,我们就在LED读写实验的基础上再增加一个按键通知的功能。实验分析首先,我们先看看开发板的硬件连接:从这里可以看出,button0和button1分别对应P0.16~P0.17引脚,当按下按键的时候引脚电平会被拉低。熟悉单片机开发的同学应该了解,这种情况我们的IO需要配置成上拉以提高引脚的抗干扰能力。这里我...原创 2019-12-03 23:41:40 · 935 阅读 · 1 评论 -
NRF51822蓝牙服务(1)——LED读写
前言上篇已经简单分析了一下BLE协议栈的基本知识,今天就废话少说,直接先从最基础的点灯开始BLE蓝牙服务的开发。实例分析本文直接采用官方SDK的led例程修改,所以首先我们先来看看开发板的硬件连接:从这里可以看出P0.18~P0.20分别对应LED0~LED2,当芯片输出高电平时LED将被点亮;这时候我们来看下官方的LED驱动代码:#define LEDS_OFF(l...原创 2019-12-03 14:09:14 · 1447 阅读 · 1 评论 -
浅析BLE协议栈
前言学习使用蓝牙芯片进行项目开发,就得先对协议栈的框架结构进行分析,需要对BLE协议栈的框架结构有清晰的理解,因此我尝试简单分析一下BLE协议栈。协议栈框架首先,协议栈的意思就是对协议的代码实现,协议栈的框架分层大概可以用下图表示:控制层可以分为:主控制器(HCI)、链路层(LL)、物理层(PHY);HCI:控制一般的蓝牙设备行为,负责所有与数据无关的蓝牙系统操作,例如:...原创 2019-12-02 11:23:19 · 1401 阅读 · 1 评论