ESP32 例程解析及实战总结(二)——ble 设备开发

news2024/11/14 21:37:27

上一篇详细讲解了ESP32 平台的入门操作:

ESP32 例程解析及实战总结(一)——开发环境搭建-CSDN博客


本篇基于ESP32 平台,讲解如何开发一个我们自己的 ble 设备,包含如下内容: 

  • 什么是service?
  • 客户端如何发现ble设备?
  • 客户端如何知道ble设备有哪些service?
  • 客户端与ble 设备的service 是如何收发数据的?
  • 实战:如何添加service?

什么是service?

BLE Service是完成设备或设备部分的特定功能或特性的数据和相关行为的集合,它主要包含如下几部分

1. UUID(通用唯一识别码)

        • 定义:UUID是一个128位的唯一标识符,用于在BLE通信中唯一地标识该Service。

        • 功能:确保每个Service在BLE网络中的唯一性,便于设备间的识别和通信。

 2. Characteristic(特征)

         • 定义:Characteristic是Service中的一个数据单元,包含了实际的数据值以及关于如何访问、显示或表示这些值的属性和配置信息。

        • 组成:每个Characteristic包含一个Value(值)和0至多个Descriptor(描述符)。

                 • Value:存储了Characteristic的实际数据。

                 • Descriptor:描述了Characteristic的额外信息,如人类可读的描述、取值范围或度量单位等。    

3. Descriptor(描述符)

        • 定义:Descriptor是描述Characteristic的已定义属性,提供了关于Characteristic的额外信息。

        • 功能:帮助设备理解如何正确读取、写入或通知Characteristic的值。  

4. 属性(Properties)

        • 定义:Characteristic具有一组属性,这些属性定义了Characteristic的行为,如是否可读、可写、可通知等。

        • 常见属性:READ(可读)、WRITE(可写)、NOTIFY(通知)、INDICATE(指示)等。  

关系与结构:

        • 一个BLE设备可以包含多个Service。

        • 一个Service可以包含多个Characteristic。

         • 一个Characteristic包含一个Value和0至多个Descriptor。

        • 每个Service、Characteristic和Descriptor都由一个UUID作为唯一标识符。


总结:以上对service的描述,初学者读完有点晕,其实简单讲就是:

  • BLE 设备的各种功能,都是由各种不同的service组成
  • 添加一个service,包含以下5点:
    1. 给service指定一个UUID(唯一的识别码
    2. 分配Characteristic数据单元
    3. 给Characteristic也指定一个 UUID(唯一的识别码
    4. 配置Characteristic 的属性(READ(可读)、WRITE(可写)、NOTIFY(通知)、INDICATE(指示)
    5. 对Characteristic 的描述(可以不需要

只要完成以上5个动作,就可以完成添加一个service,也就可以实现一个ble 的功能了


客户端如何发现ble设备?

        给ble 设备添加sevice服务后,ble 设备是要通过这些service 提供的Characteristic 数据,与客户端进行数据交互的,那客户端(手机APP)是如何知道存在这个ble 设备的呢?这时候,ble 设备就必须先把自己的身份信息发送出去,也就是 ble 广播,广播包含如下信息:

  1.  广播类型:可连接的广播:可扫描的广播:定向广播

  2. 设备名称:这是一个可选字段,但非常有助于用户识别设备。
  3.  UUID:用于标识设备提供的服务或特征(Characteristic),是BLE设备间进行通信的基础。
  4. 制造商特定数据:这些数据可以是任何格式,用于实现特定的功能或标识,为制造商提供了一种灵活的方式来添加额外的信息或功能。
  5. 传感器数据:在某些情况下,广播包可能直接包含传感器(如温度、湿度、运动传感器等)的读数,允许其他设备在无需建立连接的情况下实时获取传感器的数据。  
  6. 设备地址:(用于唯一标识设备)、标志位(用于指示设备的某些特性或状态)等信息。     

 总结:ble 设备在被连接前,只要广播这几个必要的基本信息,就可以被客户端扫描到了。


客户端如何知道ble设备有哪些service?

        客户端要了解BLE(蓝牙低功耗)设备能提供哪些服务,通常需要通过一个称为“服务发现”的过程。以下是客户端如何知道BLE设备能提供哪些服务的详细步骤:

  1. 扫描BLE设备:客户端首先需要使用BLE API扫描周围的BLE设备,找到想要连接的设备。

  2. 建立连接:一旦找到目标设备,客户端会尝试与该设备建立连接。

  3. 发现服务:客户端会遍历设备上所有服务的列表。获取每个服务的UUID、类型、属性等信息。UUID是一个全局唯一的标识符,用于区分不同的服务。

  4. 获取特征列表:对于每个服务,客户端会获取该服务下的所有特征(Characteristic)。特征包含了可以读取、写入或通知的数据。

  5. 获取描述符:类似地,对于每个特征,客户端还可以获取其描述符(Descriptor)。描述符提供了关于特征的额外信息,如值的格式、单位等。

四:客户端与ble 设备的service 是如何收发数据的?

        客户端通过读写service 的 特征值Characteristic,就可以实现数据收发

五:实战:如何添加service?

ESP32 例程proximity_sensor_prph     

源代码目录:...\esp-idf-v5.3.1\examples\bluetooth\nimble\ble_proximity_sensor\proximity_sensor_prph

现在实际添加一下service,步骤如下: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

再见 阿里巴巴EasyExcel替代品EasyExcel-Plus即将诞生

最近阿里发布公告通知,停止对EasyExcel 更新和维护,EasyExcel 是一款知名的 Java Excel 工具库,由阿里巴巴开源,作者是玉霄,在 GitHub 上有 30k stars、7.5k forks。 据了解,EasyExcel作者玉霄)去年已经从…

Acrobat Pro DC 2023(pdf免费转化word)

所在位置 通过网盘分享的文件:Acrobat Pro DC 2023(64bit).tar 链接: https://pan.baidu.com/s/1_m8TT1rHTtp5YnU8F0QGXQ 提取码: 1234 --来自百度网盘超级会员v4的分享 安装流程 打开安装所在位置 进入安装程序 找到安装程序 进入后点击自定义安装,这里…

13载匠心独运,BI+AI启航新征程

13载匠心独运,BIAI启航新征程! 思迈特的13年,是在坚守中持续创新,在创新中不断追求卓越,是在挑战与机遇并行中开创全新篇章的历程。感谢每一位陪伴走过这段旅程的人。展望未来,思迈特将继续以初心为舵、以…

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种: Minor Compaction:是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,对于删除、过期、多余版本的数据不进行清除。 Major Compaction:是指将所有的StoreFile合并成一个StoreFile&am…

git config是做什么的?

git config是做什么的? git config作用配置级别三种配置级别的介绍及使用,配置文件说明 使用说明git confi查看参数 默认/不使用这个参数 情况下 Git 使用哪个配置等级? 一些常见的行为查看配置信息设置配置信息删除配置信息 一些常用的配置信…

Warped Universe游戏即将在Sui上推出,为玩家提供多样化的游戏体验

Warped Games选择Sui作为其即将推出的创新多类型游戏Warped Universe的首选Web3技术。Warped Universe让玩家可以体验第三视角实时动作、回合制策略和基地建设等玩法。该游戏使用Unreal Engine 5开发,将借助Sui的技术使玩家能够拥有、交易和变现其游戏内资产。 War…

Autosar CP XCP规范导读

XCP 模块在汽车电子系统架构中起到重要作用,通过与多个模块的连接,实现了数据采集、校准、诊断等功能。它通过 RTE 进行控制,通过 PDUR 进行数据路由,通过通信硬件抽象层访问底层硬件,并与操作系统和其他相关模块协同工作,确保系统的稳定运行。 主要功能用途 通信协议支…

Scala学习记录,case class,迭代器

case class case class创建的对象的属性是不可改的 创建对象,可以不用写new 自动重写:toString, equals, hashCode, copy 自动重写方法:toString,equals,hashCode,copy 小习一下 1.case class 的定义语法是什么 基本形式:case …

B2B订货系统功能设计与代码开发(PHP + MySQL)

在B2B(Business to Business)电子商务中,企业之间的商品订购、交易和供应链管理是核心功能。一个高效的B2B订货系统可以帮助企业管理库存、订单、采购等业务流程。本文将介绍一个基于PHP与MySQL技术栈的B2B订货系统的功能设计与开发流程。 一…

前端CSS3 渐变详解

文章目录 CSS3 渐变详解一、引言二、CSS3 渐变基础1、线性渐变1.1、基本线性渐变1.2、改变渐变方向 2、径向渐变2.1、基本径向渐变2.2、设置径向渐变的中心 三、高级渐变技巧1、重复渐变1.1、重复线性渐变1.2、重复径向渐变 四、总结 CSS3 渐变详解 一、引言 在现代网页设计中…

2024-11-13 Unity Addressables2——寻址资源设置

文章目录 1 设置可寻址资源2 资源组窗口2.1 资源信息2.2 右键资源选项2.3 右键分组选项2.4 创建分组2.5 配置文件2.6 Tools 工具2.7 Play Mode Script2.7 构建打包 3 补充 1 设置可寻址资源 方法一:勾选 Inspector 窗口中的 “Addressable”。方法二:选…

课程讲解--哈夫曼树:原理、特性、应用与实践

前言 在这个信息如潮水般涌动的时代,我,一篇小小的文章,静静地躺在某个角落,怀揣着一份期待,一份对认可的渴望。 我可能没有华丽的辞藻堆砌成的璀璨外表,也没有跌宕起伏如传奇故事般的情节,但…

HP G10服务器ESXI6.7告警提示ramdisk tmp已满

物理服务器是HP G10 VCENTER内两台服务器报错提示ramdisk"tmp"已满,无法写入文件 登录ESXI命令行后发现两台主机的/tmp目录都没有空间了 定位到是ams-bbUsg.txt文件占用了大量的空间 1、关闭集群的DRS功能 2、迁移当前主机上面运行的所有虚拟机至其他主…

Mysql篇-Buffer Pool中的三大链表

为什么要有 Buffer Pool? 虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。 要想提升查询性能,那就加个缓存。所以,当数据从磁盘中取出后,缓存内存中&#xf…

万字长文解读深度学习——ViT、ViLT、DiT

文章目录 🌺深度学习面试八股汇总🌺ViT1. ViT的基本概念2. ViT的结构与工作流程1. 图像分块(Image Patch Tokenization)2. 位置编码(Positional Encoding)3. Transformer 编码器(Transformer En…

PNG图片批量压缩exe工具+功能纯净+不改变原始尺寸

小编最近有一篇png图片要批量压缩,大小都在5MB之上,在网上找了半天要么就是有广告,要么就是有毒,要么就是功能复杂,整的我心烦意乱。 于是我自己用python写了一个纯净工具,只能压缩png图片,没任…

2.索引:MySQL 索引分类

MySQL中的索引是提高数据查询速度的重要工具,就像一本书的目录,可以帮助我们快速定位到所需的内容。选择适合的索引类型对数据库设计和性能优化至关重要。本文将详细介绍MySQL中常见的索引类型,并重点讲解聚集索引和二级索引的概念及应用。 1…

attention 注意力机制 学习笔记-GPT2

注意力机制 这可能是比较核心的地方了。 gpt2 是一个decoder-only模型,也就是仅仅使用decoder层而没有encoder层。 decoder层中使用了masked-attention 来进行注意力计算。在看代码之前,先了解attention-forward的相关背景知识。 在普通的self-atten…

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者:来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ(Better Binary Quantization - 更好的二进制量化)—— 一种压缩向量化数据的创新方法,其性能优于传统方法,例如乘积量化 (Product Qu…

C语言 char 字符串 - C语言零基础入门教程

目录 一.char 字符串简介 二.字符和字符串区别 1.取值范围相同2.字符串由多个字符构成3.字符串和字符使用 printf 函数 三.char 字符串遍历四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.char 字符串简介 在C 语言中,除了前面介绍…