当前位置: 首页 > news >正文

【浓缩版】蓝牙开发概览

* 2020年市场调研,Nordiac芯片市场占有率40%,甩开第二名2~3倍

基本概念

参考B站视频:蓝牙低功耗设备,蓝牙协议讲解

Profile

    蓝牙设备可以分成很多类。对于不同的类型,其通信交互内容有其特殊性(特征)。

    一个profile,就是对一种特殊性进行描述的方式。

    一种设备可以支持一种或多种profile,也就是说,可以同时具备多种特殊性。

    这样可以使得蓝牙既能在底层使用统一的通信标准,又能在上层确保不同设备之间的兼容性和功能实现。

具体例子

- 蓝牙耳机:支持 HFP(通话功能)和 A2DP(音频播放功能)。

- 蓝牙音箱:支持 A2DP(音频播放功能)。

- 蓝牙键盘:支持 HID(人机接口设备功能)。

- 智能手表:支持 GATT(通用属性配置文件),用于健康监测等功能。

Profile对应第1级特征

Service对应第2级特征

    e.g.心率监测服务(Heart Rate Service)包含心率测量特征(Heart Rate Measurement Characteristic)

Characteristic对应第3级特征

    e.g. 心率测量特征包含心率值(如 75 bpm)

Descriptors描述第3级特征的备注信息

    e.g.心率测量特征的描述符可能包含心率的单位(如 bpm)。

Attribute, 最小数据单元
定义:GATT 协议中的最小数据单元,所有内容最终都以 Attribute 形式存储。
结构:每个 Attribute 是一个键值对,包含:
  • Handle(唯一地址,用于引用)。
  • UUID(标识类型,比如 0x2A37 表示心率测量值)。
  • Value(实际数据或元数据)。
  • Permissions(读写权限等)。
关键角色:
  • Service 和 Characteristic 本身也是通过 Attribute 定义的!例如:
  • Service 由 “Primary Service” Attribute 声明。
  • Characteristic 由 “Characteristic Declaration” Attribute 声明。

中央-外围设备:就是CS架构的Server端和Client端

    误区:认为手机就是中央设备。其实谁是中央设备取决于架构中的地位,是自己定的。

中央设备:能scan所有的外围设备。谁发起扫描,谁就是中央设备。

GATT协议(Generic Attribute Profile):用于定义  BLE 设备如何组织主从关系,通信编码和数据传输的一个基础设施型的profile. 

做蓝牙应用,要实现的业务流程有些啥?

外围设备发数据的经典流程:
1.初始化蓝牙
2.add service
然后写数据:特征值(Characteristic)+描述符(Descriptors)
3.发送广播

蓝牙的业务逻辑,常见的封装方式:
*发现蓝牙设备
*扫描
*配对
*获取本地的信息
*数据的发送和获取

做蓝牙设备,实现通信兼容,需要注意些啥?

以下来自参考博客:蓝牙低功耗ATT/GATT/Profile/Service/Characteristic规格解读 - iini - 博客园
蓝牙应用程序开发核心
所谓开发蓝牙应用程序,其实就是开发service和characteristic
- 实现方式:利用API添加所需的Service和Characteristic,构建蓝牙设备。只要符合GATT规范,设备就能与手机等其他蓝牙设备互联互通。
蓝牙设备分类
分为profile/非profile两种
蓝牙 ATT命令, 正式称谓ATT PDU(Protocol Data Unit,协议数据交互单元) 是蓝牙低功耗(BLE)的数据交互协议——专门负责在客户端和服务器之间读、写、发现 那些被称为 Attribute 的小数据块(服务、特征、描述符等)。

ATT命令有下面这几种

http://www.dtcms.com/a/290007.html

相关文章:

  • 板凳-------Mysql cookbook学习 (十二--------3_1)
  • 【Linux】Prometheus 监控 Kafka 集群
  • Spring MVC 核心工作流程
  • 车载电子电器架构 --- MCU信息安全相关措施
  • docker 软件bug 误导他人 笔记
  • JSX(JavaScript XML)‌简介
  • 力扣15:三数之和
  • 【洛谷】The Blocks Problem、合并两个有序数组,补充pair(vector相关算法题p2)
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十八课——图像膨胀的FPGA实现
  • “融合进化,智领未来”电科金仓引领数字化转型新纪元
  • Flutter和Kotlin的对比
  • 【用unity实现100个游戏之34】使用环状(车轮)碰撞器(Wheel Collider)从零实现一个汽车车辆物理控制系统,实现一个赛车游戏
  • kotlin和Jetpack Compose对于Android系统来说是什么关系?
  • Python 进阶(七):XML 基本操作
  • opencv无法读取视频
  • Python100个库分享第38个—lxml(爬虫篇)
  • Navicat 17.3 正式发布 | 现已支持达梦、金仓和 IvorySQL 数据库
  • 图片转 PDF三个免费方法总结
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(二)
  • CoolUtils Total PDF Converter:多功能PDF转换专家
  • STM32之GPS定位模块(GT-U8)
  • 合并pdf工具下载
  • Kotlin 高阶函数初步学习
  • k8s的calico无法启动报错解决
  • 集群技术笔记-HAProxy 与 Keepalived 高可用负载均衡实战
  • 如何使用python网络爬虫批量获取公共资源数据实践技术应用
  • 江苏思必驰科技25Java实习面经
  • 杰和科技工业计算机AF208,打造高可靠新能源汽车检测产线
  • Valgrind Cachegrind 全解析:用缓存效率,换系统流畅!
  • 基于springboot+vue+mysql的在线教育系统(源码+论文)