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

欢乐熊大话蓝牙知识1:蓝牙通信全流程拆解:从广播到连接的每一步

——当蓝牙设备开始“社交”,它们都聊了些什么?

你有没有想过,你手上的蓝牙耳机和手机,在悄悄连上之前,是不是也经历了一段暗送秋波、互发短信、最后牵手成功的过程?

别笑,其实还真差不多。

今天,我们就来看看蓝牙设备在“谈恋爱”时的全过程:从第一眼看对方(广播)、到开始搭话(扫描)、互表心意(连接)、再到正式交往(数据传输),整个流程,堪称无线通信界的“恋爱剧本”。


一、谁主动?谁被追?——设备角色介绍

在 BLE(蓝牙低功耗)世界里,每个设备都有自己的“社交身份”:

  • Central(主机):像个主动出击的搭讪王,总是在寻找目标。比如你的手机、蓝牙网关。
  • Peripheral(从机):像个安静发呆的文艺青年,坐在那里不停发广播,希望被注意。比如耳机、温湿度传感器、智能灯泡。

两者角色分明,一个负责找人,一个负责等人。


在这里插入图片描述

二、“嘿,我在这!”——广播(Advertising)

广播就像你在广场上喊话:“我单身,爱钓鱼,会煮咖喱,想找人聊天!”

BLE 外设设备(如传感器)会周期性地发广播包,告诉路过的 Central:“哥在这,快来连我!”
广播包里一般塞着:

  • 名字(Device Name)
  • 特征(服务 UUID)
  • 特别说明(厂商自定义字段)
  • 是否能被连(这很重要)

广播类型也有“性格分类”:

广播类型性格描述
Connectable可以被连接的“开放型”
Non-Connectable只想分享不想被打扰的“佛系型”
Scannable可以多聊几句,但别拉我入伙的“社恐型”

而且它们只在三个信道上喊(37/38/39),这叫“集中发力,躲开Wi-Fi”。


三、“你喊我听”——扫描(Scanning)

主机这边(比如你的手机)则像一个在广场上戴着耳机逛街的“猎人”,不停地听谁在喊。

扫描有两种方式:

  • Passive Scan(被动听):装作路人,默默听你说什么
  • Active Scan(主动搭话):听完还会问一句:“你还有啥更多信息?”

如果广播包对它口味,比如有“心率服务 UUID”,Central 就准备出手啦。


四、“要不要在一起?”——连接建立(Connect Request)

当 Central 觉得“这个外设还挺靠谱”,它就会发出正式的Connection Request:“我们来聊聊吧?”

如果 Peripheral 愿意(一般都愿意),就开始进入“稳定交往期”,也就是连接建立成功!

此时双方要约法三章,商量几个重点:

  • 多久聊一次?(连接间隔)
  • 能否迟到几次?(从机延迟)
  • 多长时间不说话就分手?(连接超时)
  • 一次最多说多少字?(MTU size)

这几个参数对BLE设备的功耗有直接影响。设太紧张,就累,设太松散,又容易断。


五、“咱们正式聊天吧!”——GATT 数据交换

蓝牙 BLE 的聊天协议叫 GATT,别看名字像哈利波特魔法咒,其实是 Generic Attribute Profile 的缩写。

Peripheral 会开个“服务清单”,像这样:

  • 服务1:体温服务

    • 特征值1:当前温度
    • 特征值2:单位(摄氏/华氏)
  • 服务2:电量服务

    • 特征值1:当前电量百分比

Central 这边可以:

  • 读(Read):比如“你现在多少度?”
  • 写(Write):比如“切换成华氏!”
  • 订阅(Notify):比如“有温度变化随时告诉我!”

整个过程其实就是:你问我答、我说你听,乖巧又规范。


六、断开也讲究礼貌

连接结束有两种情况:

  • 和平分手:主机或从机主动说再见
  • 冷暴力:一方太久不理会,超时断开

建议在代码里加好“断开事件回调”,否则连接一断,主控还在“等消息”,那就尴尬了。
在这里插入图片描述


七、总结:蓝牙通信就是一场“设备社交剧”

所以,如果你觉得蓝牙通信难,那是因为你把它当成“技术协议”在学。
但你要是把它当“交朋友”的过程来看,瞬间豁然开朗:

  • 外设:广场喊话,坐等表白
  • 主机:扫描信息,挑个合适下手
  • 成功后:建立连接,定下聊天频率
  • 正式通信:GATT 交换感情内容
  • 断开连接:礼貌说再见,或尴尬离场

掌握这个流程,无论你是要做蓝牙灯控、BLE传感器、还是智能门锁,都能轻松搞定设备之间的“感情线”。
在这里插入图片描述
在这里插入图片描述


喜欢的盆友点赞加收藏,关注欢乐熊,下一期为大家分享的题目是《BLE 是怎么省电的?核心机制全解析》”,不要错过哈~~

相关文章:

  • 在C++中进行套接字编程时,主要使用以下头文件
  • 易学探索助手-项目记录(九)
  • 什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
  • 数据 分析
  • primitive创建图像物体
  • new optimizers for dl
  • 【3Ds Max】.ive格式文件的导出与加载
  • CMake入门与实践:现代C++项目的构建利器
  • 怎样将MM模块常用报表设置为ALV默认格式(MB52、MB5B、ME2M、ME1M等)
  • 对抗系统熵增:从被动救火到主动防御的稳定性实战
  • 笔记本/台式机加装PCIe 5.0固态硬盘兼容性与安装方法详解 —— 金士顿Kingston FURY Renegade G5装机指南
  • Python Day25 学习
  • Java实现美术机构教务管理系统:基于爱耕云功能模式的解决方案
  • Express项目解决跨域问题
  • 3337|3335. 字符串转换后的长度 I(||)
  • 不借助 Cursor,如何开发第一款 ios 产品并做到付费榜 Top 2
  • 右值引用和移动语义
  • 简单易懂的JavaScript中的this指针
  • K8S Ingress 实现AB测试、蓝绿发布、金丝雀(灰度)发布
  • 【Linux网络】认识网络
  • 共建医学人工智能高地,上海卫健委与徐汇区将在这些方面合作
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 泽连斯基启程前往土耳其
  • 市场监管总局等五部门约谈外卖平台企业
  • 对话郑永年:我们谈判也是为世界争公义
  • 国羽用冠军开启奥运周期,林丹:希望洛杉矶奥运取得更好成绩