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

BLE 连接和通信 的实现

文章目录1、从机广播2、主机扫描3、建立连接4、发送与接收数据为了创建和维护一个BLE连接引入角色这一概念。一个BLE设备不是主机Master集中器角色就是从机Slave外围设备角色。这是根据是谁发起这个连接来确定的主机Master设备总是连接的发起者而从机Slave总是被连接者。这个访问与连接过程都在通用访问规范GAP进行实现的。1、从机广播从机要被主机连接它就必须先被主机发现。这个时候从机设备把自身信息以广播形式发射出去。比如设备AAdvertiser需要先进行广播设备AAdvertiser不断发送 广播信号T 为广播间隔。每发送一次广播包称为一次广播事件Advertising Event因此 T 也称为广播间隔。广播间隔它的范围是20ms到10.24s。广播间隔影响建立连接的时间。当广播发出的时候每一个广播事件包含三个广播包即分别在 37/38/39 三个信道上同时广播相同的信息。下图 Observer 为主机观察者Advertiser 就是从机广播。2、主机扫描设备AAdvertiser不断发送广播信号给主机Observer如果手机不开启扫描窗口主机是收不到设备A的广播的。如下图所示不仅手机要开启射频接收窗口而且只有主机的射频接收窗口跟广播发送的发射窗口 匹配成功手机才能收到设备A的广播信号。由于这种匹配成功是一个概率事件因此手机扫到设备A也是一个概率事件。也就是说主机有时会很快扫描到设备A比如只需要一个广播事件主机有时又会很慢才能扫到设备A比如需要10个广播事件甚至更多。下面图表示了 主机主动扫描广播的过程控制器收到扫描数据包后将向主机发送一个广播报告事件adv_report该事件同样包括了 链路层数据包的广播类型。因此主机能够判断 对端设备 是否可以连接或者扫描并且区分出广播数据包和扫描响应数据包。3、建立连接如图所示手机在收到A1广播包ADV_IND后以此为初始点T_IFS 后给Advertiser 发送一个Connection Request命令即A2数据包告诉Advertiser我将要过来连你请你做好准备。Advertiser 根据Connect_req命令信息做好接收准备。Connect_req其实是在告诉 Advertiser手机将在 Transmit Window 期间发送第一个同步包P1给你请在这段时间里把你的射频接收窗口打开。设备B收到P1后在 T_IFS 时间后将给手机回复数据包P2。一旦手机收到数据包P2连接即可认为建立成功。后续手机将以P1为锚点原点Connection Interval 为周期周期性地给设备B发送Packet。4、发送与接收数据连接成功后Master和Slave在每一个 Connection Interval 开始的时候都必须交互一次即Master给Slave发一个包Slave再给Master发一个包整个交互过程称为一个 Connection Event。蓝牙芯片只有在 Connection Event 期间才把射频模块打开此时功耗比较高其余时间蓝牙芯片都是处于Idle状态的。因此蓝牙芯片平均功耗就非常低。Master不可能时时刻刻都有数据发给Slave所以Master大部分时候发的都是空包Empty Packet给Slave。同样 Slave 也不是时时刻刻都有数据给 Master因此Slave回复给Master的包大部分时候也是空包。另外在一个 Connection Event 期间Master 也可以发多个包给 Slave以提高吞吐率。综上所述连接成功后的通信时序图应该如下所示图中主从数据发送的数据包TX和RX表示方向性的数据通道也就是蓝牙的空中属性空中操作时间都是采用蓝牙操作句柄来进行的因此句柄能够唯一表示各个属性。空中特性的性质包括1、主机RX从机TX方向1通知从机 上传数据给 主机不需要主机回复一个响应2指示从机 上传数据给 主机需要主机发一个确认给服务器通知和指示之间不同点 在于指示有应用层上的确认而通知没有。2、主机TX从机RX方向1写2没有回应的写3读

相关文章:

BLE 连接和通信 的实现

文章目录1、从机广播2、主机扫描3、建立连接4、发送与接收数据为了创建和维护一个BLE连接,引入角色这一概念。 一个BLE设备不是 主机Master(集中器)角色,就是 从机Slave(外围设备)角色。 这是根据是谁发起…...

B站缓存视频无法播放?m4s-converter让您的收藏永不消失

B站缓存视频无法播放?m4s-converter让您的收藏永不消失 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字内容爆炸的时代&#x…...

Telemetry技术在现代网络运维中的高效应用

1. Telemetry技术如何颠覆传统网络监控 第一次接触Telemetry是在2018年的一次网络故障排查中。当时客户的视频会议系统频繁卡顿,我们用SNMP轮询了所有设备指标都没发现问题。直到启用了某厂商的Telemetry功能,才发现是核心交换机上存在毫秒级的流量突发。…...

DeepAudit实战:揭秘多智能体如何协同作战,实现企业级代码安全自动化审计

1. 为什么企业需要代码安全自动化审计 最近几年,我接触过不少企业的技术负责人,他们最头疼的问题之一就是代码安全问题。传统的人工代码审计方式,就像是用放大镜一寸寸检查整栋大楼的墙面裂缝,不仅效率低下,而且成本惊…...

Windows系统登录界面多账户问题解析:Administrator账户的隐藏与显示

1. Windows登录界面多账户问题解析 你有没有遇到过这样的场景:开机时发现Windows登录界面莫名其妙多出几个账户,尤其是那个神秘的Administrator?这种情况在Win10/Win11系统中其实很常见。我去年给公司部署新电脑时就遇到过——明明只创建了一…...

FPGA资源告急还能用Signal Tap吗?Quartus调试中的资源占用分析与实战避坑指南

FPGA资源告急时Signal Tap的极限调试策略:从原理到实战的完整避坑指南 当你在Cyclone IV或Artix-7这类资源受限的FPGA平台上调试时,是否遇到过这样的困境:添加Signal Tap后编译失败,或者勉强通过编译却出现时序违例?这…...

Python的__init_subclass__中的控制框架

Python的__init_subclass__钩子方法为类继承机制提供了强大的控制能力,它允许开发者在子类创建时介入并执行自定义逻辑。这一特性在框架开发、插件系统以及元编程中具有广泛的应用价值,能够显著提升代码的灵活性和可维护性。本文将深入探讨__init_subcla…...

别再手动调参了!用skLearn的RidgeCV自动选择岭回归最佳alpha(附加州房价实战)

告别手动调参时代:用RidgeCV实现岭回归超参数智能优化 在数据科学项目中,模型调参往往是最耗时的环节之一。以岭回归为例,传统方法需要手动绘制岭迹图、反复调整正则化参数alpha,整个过程既繁琐又依赖经验。而sklearn的RidgeCV模块…...

低压电力线宽带载波通信数据链路层:从帧格式到网络管理的实战解析

1. 低压电力线载波通信的实战价值 第一次接触电力线载波通信时,我盯着电表箱里错综复杂的线路发愣——这些普通的电力线真能传输数据?直到亲眼看到采集器通过220V电线稳定回传用电数据,才真正理解这项技术的精妙。低压电力线宽带载波通信&…...

[4G5G专题-6]:RRU 深度剖析4G+5G RF动态频谱共享的三大技术实现路径与权衡

1. 动态频谱共享DSS的核心价值与技术挑战 在4G向5G演进的进程中,频谱资源如同城市中的黄金地段一样稀缺。动态频谱共享(DSS)技术就像一位精明的城市规划师,让4G和5G两代通信系统在同一段频谱上和谐共存。想象一下早高峰的公交专用…...

Vision Pro 8.4 保姆级安装教程:从下载到激活,手把手带你避开许可证过期坑

Vision Pro 8.4 终极安装指南:从零部署到专业级应用 Vision Pro作为康耐视旗下的旗舰级机器视觉开发平台,其强大的图像处理能力和灵活的编程接口使其成为工业自动化领域的首选工具。但对于初次接触这款软件的用户来说,复杂的安装流程和许可证…...

别怕AI部署!用STM32CubeAI插件,10分钟搞定你的第一个单片机AI应用(从数据生成到上板推理)

用STM32CubeAI在单片机上10分钟跑通你的第一个AI模型 第一次听说单片机也能跑AI模型时,我盯着手边那块比指甲盖大不了多少的STM32开发板发了好一会儿呆。这玩意儿连个像样的操作系统都没有,怎么跑得动那些动辄几个G的神经网络?直到后来发现ST…...

Qwen3-14B行业分析实战:如何快速生成深度研究报告

Qwen3-14B行业分析实战:如何快速生成深度研究报告 1. 引言:为什么选择Qwen3-14B进行行业分析 在当今信息爆炸的时代,金融分析师、市场研究员和企业战略部门每天都需要处理海量数据并生成专业报告。传统的人工分析方式不仅耗时耗力&#xff…...

DETR目标检测实战:从零搭建与核心模块解析

1. DETR目标检测模型初探 第一次接触DETR(Detection Transformer)时,我被它简洁优雅的设计深深吸引。传统目标检测模型如Faster R-CNN、YOLO等都需要复杂的锚框设计和后处理步骤,而DETR直接用Transformer实现了端到端的目标检测,完全摒弃了这…...

intv_ai_mk11保姆级教程:非程序员也能学会的AI提示词结构——角色+任务+约束+输出格式

intv_ai_mk11保姆级教程:非程序员也能学会的AI提示词结构——角色任务约束输出格式 1. 为什么需要学习提示词结构 很多人在使用AI对话机器人时,常常遇到这样的困扰:明明想问一个问题,但AI给出的回答总是不尽如人意。这通常不是因…...

幻境·流金开发者案例:接入企业微信机器人,实现群内@生成即时响应

幻境流金开发者案例:接入企业微信机器人,实现群内生成即时响应 想象一下这个场景:你的团队正在企业微信群里热烈讨论一个新产品海报的设计方案。有人提出:“我们需要一个充满未来感的城市夜景,要有悬浮的交通工具和巨…...

Spring AI 智能体开发实战:基于 Java 的落地方案详解

Spring AI 智能体开发实战:基于 Java 的落地方案详解 前言 随着大模型和人工智能技术的普及,智能体(Agent)正在成为企业级应用智能化转型的关键驱动力。Spring AI 框架的出现,为 Java 团队在智能体落地过程中&#xff…...

告别理想模型:在Simulink中用Simscape为真实工业机械臂(如GLUON-2L6)设计滑模控制器

告别理想模型:在Simulink中用Simscape为真实工业机械臂设计滑模控制器 当我在实验室第一次看到GLUON-2L6机械臂完成复杂轨迹跟踪时,那些在论文中看似完美的控制算法却在真实硬件上暴露出各种问题——关节摩擦、传动间隙、未建模动力学特性,这…...

android 自定义Dialog,baseDialog,居中、底部对其,弹框设置背景透明、显示时隐藏系统导航栏,view的显示和添加,任意布局view;ProgressBar样式

1、自定义 若使用百分比宽高:percentHight、percenWidth,dialog的xml的最高层布局的宽高,必须是match_parent,要不然,会不生效package com.jd.oa.joy.note.util;import android.app.Dialog; import android.content.Context; impo…...

YOLO26涨点改进| CVPR 2026 | 独家创新首发、卷积改进篇| 引入 AFFN 自相关前馈网络模块,通过频域与空间域的双域融合增强,助力多种目标检测、图像分割、图像分类、图像修复任务涨点

一、本文介绍 🔥本文给大家介绍使用 AFFN 自相关前馈网络模块 改进YOLO26网络模型,通过在特征提取与融合阶段显式建模特征图内部的周期性结构信息,通过自相关机制强化重复出现的目标纹理与结构特征,从而提升模型对规则性模式的感知能力。在复杂背景或存在噪声干扰的情况下…...

从“盐值”到“密钥”:HMAC比普通哈希强在哪?一个登录案例讲明白

从“盐值”到“密钥”:HMAC比普通哈希强在哪?一个登录案例讲明白 在用户认证系统中,密码存储方案的选择直接影响着系统的安全性。许多开发者误以为“加盐哈希”已经足够安全,甚至将其与HMAC混为一谈。本文将用一个真实的登录系统案…...

Qwen3.5-9B-AWQ-4bit WSL2开发环境配置:在Windows上无缝运行Linux模型服务

Qwen3.5-9B-AWQ-4bit WSL2开发环境配置:在Windows上无缝运行Linux模型服务 1. 为什么要在WSL2中运行AI模型? 对于Windows开发者来说,直接在本地运行Linux环境下的AI模型服务一直是个挑战。WSL2(Windows Subsystem for Linux&…...

GLM-4-9B-Chat-1M效果实测:1M上下文下跨500页文档的因果推理与事实核查

GLM-4-9B-Chat-1M效果实测:1M上下文下跨500页文档的因果推理与事实核查 1. 引言:当AI遇上超长文本 想象一下,你面前放着500页的文档资料,需要从中找出特定信息、分析因果关系、验证事实准确性。这对人类来说都是个艰巨任务&…...

DeerFlow 系列教程 第二十篇 | 前端定制与二次开发指南

DeerFlow 系列教程 第二十篇 本篇教程延续**模块六:部署与运维(工程实践)**的内容。我们将深入 DeerFlow 前端架构,帮助有开发需求的读者理解其技术栈、源码结构和核心交互流程,从而能够进行定制化开发和二次开发。内容涵盖:Next.js 16 App Router + React 19 + Tailwind…...

DeerFlow 系列教程 第十七篇 | 实战案例二——用 DeerFlow 生成数据可视化与分析报告

DeerFlow 系列教程 第十七篇 本篇教程继续模块五:实战应用场景(案例驱动),展示如何使用 DeerFlow 的数据分析和可视化技能。我们将剖析 data-analysis 技能基于 DuckDB 的 SQL 分析引擎、chart-visualization 技能的 26 种图表类型选择与渲染机制、从文件上传到报告输出的完…...

【AI Agent实战】养了一个月AI Agent,我的工作方式发生了5个根本变化|养虾系列17·收官

不是"效率提高了X%"——那种数字好看但没意义。 而是工作方式本身变了。像从手洗衣服变成用洗衣机——不只是快了,是你再也不想手洗了。变化1:从"自己做"到"描述→审核→微调" 之前所有工作亲力亲为——写报告自己写&…...

JetBrains全家桶通用警告优化方案:我用这份settings文件统一了IDEA/PyCharm/GoLand的代码提示风格

JetBrains全家桶通用警告优化方案:统一IDEA/PyCharm/GoLand的代码提示风格 作为全栈开发者,我们常常需要在不同语言的IDE之间切换。JetBrains系列工具虽然强大,但默认的代码检查规则往往过于"热心"——那些红黄交错的波浪线不仅分散…...

别再死记硬背了!用Python+Modbus-TCP/RTU模拟器,5分钟搞懂BMS通信协议

用PythonModbus模拟器5分钟实战BMS通信协议 第一次接触BMS通信协议时,我被厚厚的文档吓退了——各种寄存器地址、功能码、校验算法像天书一样。直到发现用Python脚本配合Modbus模拟器,原来理解协议可以如此直观。本文将带你用不到5分钟的实操&#xff0c…...

影刀RPA实战指南:从零到一构建自动化流程

1. 为什么你需要影刀RPA? 第一次接触影刀RPA是在三年前,当时我每天要花两小时处理Excel报表。直到同事演示了一个自动化脚本——原本需要手动操作半小时的合并表格工作,现在点一下按钮10秒就能完成。这种效率提升的震撼,让我彻底迷…...

阅读量优化的五个关键动作

别把阅读量当成玄学你可能每天盯着后台数据,看着那点可怜的阅读数发愁。其实,阅读量优化不是靠运气,也不是靠堆关键词,而是有迹可循的系统动作。很多人误以为只要内容“好”,自然有人看——但现实是,再好的…...