蓝牙简学(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、蓝牙广播
  • 二、通过设备广播数据
  • 三、蓝牙广播类型
  • 四、蓝牙状态切换


一、蓝牙广播

1、低功耗蓝牙一共有40个信道,频段范围从2402MHz到2480Mhz,37、38、39是蓝牙广播信道,剩余37个是数据信道。

为什么不使用相近的信道作为广播信道呢?

答案:为了避免广播扫描中相邻信道相互干扰。
在这里插入图片描述

2、一个广播数据包最长37个字节,其中6个字节是mac地址,剩下的31个字节是很多个广播数据结构体。每个结构体都有3个东西,长度,类型和内容。

在这里插入图片描述

具体示例:

在这里插入图片描述

4=1+3,3=1+2 字节

其中广播数据没用完的话,系统会自动补0,凑够31字节。

在这里插入图片描述

这一串跟上面那一串是一样的。

Ox03 0x08 0x41 0x49 0x02 0x0A Ox02 0x02 0x01 0x05 0x06 OxFF 0x42 0x69 0x62 0x69

好,上面这一串是多少个数据结构体呢?

答案在最后

3、蓝牙广播数据的意义

在这里插入图片描述
这里说的是第二个字节类型的意义,
a.第一个广播数据结构体钟,通过UTF-8得知,字符1就是0x31.
b.第二个广播数据结构体中,0x08就是发射功率为8dBm
c.第三个是厂商自定义结构体
详细的类型意义可以从官网下载
https://www.bluetooth.com/

二、通过设备广播数据

0x02 0x01 0x05 0x05 0x09 0x42 0x69 0x62 0x69 0x02 0x0A 0x02

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE

#设置BLE广播数据并开始广播
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42') 

这是python的代码,c语言版本待加- -
\x表示16进制数据
安装nRF Connect手机软件,使用es32开发模组下载固件和代码后可以看到出来的广播,\x41\x42

三、蓝牙广播类型

1.可连接非定向:普通蓝牙设备采用的广播方式
2.可连接定向:已配对设备中的快速连接
3.不可连接定向:蓝牙信标和蓝牙传感器的广播方式
4可扫描非定向:在3的基础上加了扫描响应的功能,能传输更多数据

在这里插入图片描述
扫描响应:是在从机收到蓝牙主机的扫描请求(scan request),回复给蓝牙主机的数据(scan reponse)。
跟广播是不一样的
广播(advertises)是:蓝牙主动发射的一些数据.
在这里插入图片描述

广播最多发送31个字节数据,但是通过扫描响应就可以发送更多的数据

from machine import Pin
from time import sleep_ms
import ubluetooth         #导入BLE功能模块

ble = ubluetooth.BLE()    #创建BLE设备
ble.active(True)          #打开BLE

#设置BLE广播数据并开始广播
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42', resp_data = b'\x03\xFF\x4C\x00')

总结
1.扫描响应数据和广播数据格式是一样的
2.扫描响应数据是非必需的
3.扫描响应可作为广播数据的补充
4.扫描响应有一定的触发条件(收到扫描请求)

四、蓝牙状态切换

总共有5个状态,分别是:
就绪态,广播态,连接态,扫描态,发起态。
前3个都很好理解,开机之后就是就绪,发广播就是广播,连上了就是连接

扫描态是主机在就绪态发起扫描,就是扫描态
发起态是,发现想要连接的设备,就是发起态

其中扫描态和广播态看着好像差不多,但是不一样的
蓝牙模块设置广播数据并开始广播后是广播态,手机扫描附近范围内的蓝牙设备时,手机将处于扫描态。
在这里插入图片描述
这是蓝牙广播的代码

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)

#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')

但是上面的代码在连上之后再断开了就不会继续发广播了,所以加了下面一些
加了个灯判断连上还是断开和连上断开之后继续发广播

from machine import Pin
from time import sleep_ms
import ubluetooth   #导入BLE功能模块

ble = ubluetooth.BLE()  #创建BLE设备
ble.active(True)  #打开BLE(此时设备将处于就绪态)

#设置BLE广播数据并开始广播(开始广播后设备将处于广播态)
ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')


#定义一个函数,用作蓝牙事件中断
def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接(此时蓝牙将处于连接态)
      print("BLE 连接成功")

    elif event == 2: #蓝牙断开连接(此时蓝牙将从链接态进入就绪态)
      print("BLE 断开连接")
      ble.gap_advertise(100, adv_data = b'\x02\x01\x06\x03\x09\x41\x42')#再次启动广播

    elif event == 3: # 收到新write消息
      print("BLE 收到新消息")

ble.irq(ble_irq) #注册蓝牙中断函数

下一章节,写最重要的蓝牙服务和特性,还有数据收发

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea的pom.xml文件灰色删除线解决办法

以上是点击了移除module后就变成这样 如果再次对着已移除的module右键会发现有个delete,点击这个是真删了,要谨慎备份哦 解决方案:恢复误操作remove module的解决方法 idea最右边,有个Maven控件,找到要恢复的module&a…

连理:保险中的实名DID创新应用

2023年12月12日,BSN实名DID服务发布会在北京成功举办,会上正式发布了BSN实名DID服务。这一服务充分融合了BSN区块链服务网络和CTID数字身份链两大基础设施,满足“前台匿名、后台实名”的管理要求,对服务数字经济发展、支撑国家数据…

TiDB 7.1 多租户在中泰证券中的应用

本文详细介绍了中泰证券在系统国产化改造项目中采用 TiDB 多租户技术的实施过程。文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术的必要性,探讨了 TiDB 多租户的关键特性,并阐述了在实际应用中的具体操作步骤。通过该技术的应用&#xff0…

bat命令清理Window应用注册表(Unity开发Window应用)

bat命令清理Window应用注册表(Unity开发Window应用) 介绍出现的问题方案一方案二方案二解决方案1. 首先使用【Win】【R】组合快捷键,快速打开运行命令框,在打开后面键入命令:【Regedit】2. 完后后按回车键(…

华为发布的工业软件三大难题: 面向装配场景,10万+零件的超大规模几何约束系统的求解问题

华为发布的工业软件三大难题: 面向装配场景,10万零件的超大规模几何约束系统的求解问题。 一方面是算法改进, 另一方面是对云几何内核的需求:并行计算、分布式、缓存、集群等云计算技术对CAD系统的辅助提升。 云几何内核可以(/需要能)支撑…

HTML+CSS+JS网页设计期末课程大作业 web课程设计 web前端开发 网页规划与设计

HTMLCSSJS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计 💥 文章目录一、🚩 网站描述二、🎌 网站介绍三、🏴 网站类型A 个人博客主题B 人物明星主题C 旅游主题D 游戏主题E 动漫主题F 美食主题G 校园主题H 企…

GPT编程(1)八分类图像数据集转换为二分类

一个核心问题就是要将这八类数据图片全部重命名,尝试了一步到位 有一个图像数据集,有八个类别amusement,anger,awe,contentment,disgust, excitement, fear,sadness的图片,每张图片被命名为“类别数字”。采用遍历的方式,按顺序阅…

每天坐在电脑前10小时的投资者的现货黄金投资秘密

很多人在现货黄金市场中苦作舟,希望通过交易、实践来找出市场中的奥秘。笔者最近看了一个每天坐在电脑面前十个小时以上做分析和投资的投资者的经验介绍,他道出了一些投资的秘密,笔者认为,这是适合现货黄金投资者借鉴和学习的&…

7.7复原IP地址(LC93-M)

算法: 根据题意 有效的 IP 地址 : (1)由四个整数构成 (2)每个整数位于 0 到 255 之间 (3)每个整数不能含有前导 0,如011、021等,但是可以有单独的一个“…

【笔记】Spring的事务是如何回滚的/Spring的事务管理是如何实现的

Spring的事务是如何回滚的/Spring的事务管理是如何实现的 数据库(Spring事务) 1、建立连接、开启事务(准备工作) 2、进行sql操作(业务逻辑) 3、执行成功,则commit; 执行失败&#x…

MySQL 执行过程

MySQL 的执行流程也确实是一个复杂的过程,它涉及多个组件的协同工作,故而在面试或者工作的过程中很容易陷入迷惑和误区。 MySQL 执行过程 本篇将以 MySQL 常见的 InnoDB 存储引擎为例,为大家详细介绍 SQL 语句的执行流程。从连接器开始&…

直播的营销多样性

直播的营销多样性主要体现在以下几个方面: 1.互动性高:直播能够实时互动,观众可以提问、评论、点赞,甚至直接在直播中购买商品,这种互动性使得直播成为一种非常有效的营销手段。 2.内容生动:直播能够以视频的形式展示产品或服务,相比传统的…

概率论相关题型

文章目录 概率论的基本概念放杯子问题条件概率与重要公式的结合独立的运用 随机变量以及分布离散随机变量的分布函数特点连续随机变量的分布函数在某一点的值为0正态分布标准化随机变量函数的分布 多维随机变量以及分布条件概率max 与 min 函数的相关计算二维随机变量二维随机变…

UWB高精度人员定位系统源码,全方位护航安全生产

定位管理系统使用UWB定位技术,通过在厂区安装定位基站,为人员或设备佩戴定位标签的形式,实现人员精准实时定位。可以实现人员、车辆物资实时定位、工作考勤、电子围栏、历史轨迹回放、巡检巡查、物资盘点、路径规划、三维显示等,以…

JAVA B/S架构智慧工地源码,PC后台管理端、APP移动端

智慧工地系统充分利用计算机技术、互联网、物联网、云计算、大数据等新一代信息技术,以PC端,移动端,设备端三位一体的管控方式为企业现场工程管理提供了先进的技术手段。让劳务、设备、物料、安全、环境、能源、资料、计划、质量、视频监控等…

【小白专用】C# 压缩文件 ICSharpCode.SharpZipLib.dll效果:

插件描述: ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip、Tar 、 BZip2 类库,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL,底线是允许用在不开源商业软件中,意思就是免费使用。具体可访问ICSha…

【AI】文本转语音 变声 音色克隆 数字人音视频口型同步AI应用

文本转语音 项目地址:https://github.com/coqui-ai/TTS 环境安装: 下载项目;安装Python,安装项目依赖: pip install TTS 1. 下载安装AI模型: https://github.com/facebookresearch/fairseq/tree/main…

大数据框架数仓Doris学习网站,让你轻松掌握数据仓库技能。

介绍:Doris是一款基于大规模并行处理技术的分布式SQL数据库,由百度开源,主要用于实时数据仓库和多维分析。它是一款大数据分析引擎,适用于实时分析场景,支持多种数据接入和输出,提供丰富的核心特性和性能优…

面试算法77:链表排序

题目 输入一个链表的头节点,请将该链表排序。 分析 归并排序的主要思想是将链表分成两个子链表,在对两个子链表排序后再将它们合并成一个排序的链表。 这里可以用快慢双指针的思路将链表分成两半。如果慢指针一次走一步,快指针一次走两步…

【Midjourney】Midjourney根据prompt提示词生成人物图片

目录 🍇🍇Midjourney是什么? 🍉🍉Midjourney怎么用? 🔔🔔Midjourney提示词格式 Midjourney生成任务示例 例1——航空客舱与乘客 prompt prompt翻译 生成效果 大图展示 细节大…