关于青风蓝牙NRD52832开发经验(一)

1.首先是按照环境的搭建,蓝牙协议和外设功能用到的是keil5和nRFgo Studio(贼不好用,用来进行协议的下载)开发工具,52832用的协议是S132的蓝牙协议,关于蓝牙mesh的开发在nordic官网上面找到一个关于蓝牙点灯的程序,打开这个程序用的开发环境是(Embedded_studio这个开发环境集成了协议的,Embedded_Studio使用在老版本的基础上安装新版本在一个目录下这样就可以使用JLINK下载。)。这里还要考虑不同的协议支持不同版本的程序,谨记

这里可能在使用软件的时候会被识别出JLINK是盗版的,需要你更新驱动,一旦你更新了驱动,jilink会被识别出是盗版的出现闪退,这里推荐使用我之前发布一篇文章参考更新驱动。https://mp.csdn.net/postedit/82381417  文章链接。

2.首先是关于蓝牙mesh的理论的大致的讲解(熟悉时间不是很长,所以暂时到这个地步)第一蓝牙mesh有四种特性第一种中继节点(也就是将接收到消息进行传送给匹配的节点,可以设置中继的次数),第二种代理节点(可以将不是组网外的设备添加到组网中来,再添加设备时要考虑到两种密钥一种是公共密钥一种是私有密钥。手机之类的都可以作为代理节点。);第三种好友节点(好友节点和低功耗节点相辅相成的,低功耗节点要考虑到功耗的原因并不会一直工作,好友节点主要用来代替低功耗节点接收的消息);4.低功耗节点主要用在传感器采集和开关打开物理层设备的控制中(低功耗节点会定时对好友节点进行扫描来获取好友节点代替接收到的消息)

关于蓝牙mesh系统架构 由下而上依次是蓝牙低功耗(只是提供基础无线通信功能所必须的)-从承载层(承载层定义了网络PDU 如何由给定的通信系统进行处理)开始-网络层-底层传输层-上层传输层-访问层-基础模型-模型。

3.关于52832蓝牙通讯协议

蓝牙最基本的配置文件(Profile)为:GAP(Generic Access Profile)(通用访问配置文件),服务发现应用配置文件(SDAP)

蓝牙profile框架(每个attribute属性被UUID唯一表示) 包括(1)特征(characteristics)包含一个单独的value和0-n个用来描述特征的descriptor。可以理解为特征是一个类,而描述符只是类中的一个。(2)描述符(descriptor)是被定义的attributes,这里自己理解是(描述符就是子服务的UUID标识符)。(3)服务 (这里说明一下比如串口作为一个主服务,而RX和TX在这就是特征characteristic)

蓝牙设备可以包括多个profile,一个profile中有多个service,一个service中有多个characteristic,一个characteristic包括一个value和多个descriptor(描述符)

关于青风蓝牙NRD52832开发经验(一)_第1张图片

关于UUID的讲解:私有任务的UUID 可以通过软件生成私有服务ID   私有任务使用BLE_UUID_TYPE_VENDOR_BEGIN 这个函数来定义UUID类型;公有任务UUID 使用的是蓝牙联盟公用的UUID使用#define BLE_UUID_BLE_ASSIGN(instance, value) do {\ instance.type = BLE_UUID_TYPE_BLE; \instance.uuid = value;} while(0)  来定义UUID类型

关于如何在从机中建立通知服务:例如按键的通知服务

在按键服务中添加char_md.char_props.notify = 1; 将其添加到协议中   在于主机交互式  主机会发给从机一个通知使能的命令,通知使能后,从机按键按下,主机就能收到响应命令。  

关于如何在从机中建立多个服务:例如在串口中添加按键服务。  

首先在服务中添加这个服务的API函数,其次是数据结构体声明包括回调函数和服务句柄等,设置子服务UUID,特征值和描述符,添加处理协议栈事件()当写入描述符或特征值就发生此事件(事件指的是SERVICES_init中的函数句柄例如串口用的是nus_data_handler再来执行命令。这里用到协议栈的派发函数ble_evt_dispatch)就是将任务分配给不同的函数执行)  在想主机发送消息时用的是sd_ble_gatts_hvx函数来发送消息。

 

你可能感兴趣的:(蓝牙)