蓝牙简学(二)

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

文章目录

  • 一、服务和特性
  • 二、数据收发
  • 三、UUID


一、服务和特性

service、characteristic
下面的图是蓝牙协议的整体架构,
1.物理层:负责无线电波的收发和信号链路的管理
2.协议层:主要实现蓝牙协议栈
3.应用层:根据业务需求实现不同的程序,比如电池电量,温度计,hid键值,

基本要改的都在应用层,协议和物理很多都固定,都在芯片厂那里改

其中HCI是主机与控制器之间的通信接口,很多时候找bug会在这里捉。

在这里插入图片描述

我现在使用手机连接一个蓝牙鼠标,然后使用lightblue app进行查看它的服务和特性,这里只展示了部分

在这里插入图片描述
蓝牙设备应用层是通过特性和服务来实现的,
一个蓝牙设备可以有很多服务,一个服务又又很多的特性,每个特性又有读写,通知等权限。
每一个服务和特性都有一个uuid

在这里插入图片描述

uuid是蓝牙组织用于定义的,用于区分各个服务和特性的标识符,总长度是128bit;
在这里插入图片描述
其中,蓝牙组织允许用户使用16bit的uuid 与该基地址拼接,形成128bit的uuid,比如,使用16bit的uuid是2a37,
128bit就是00002a37 - 0000 - 1000 - 8000 - 00805f9b34fb
在这里插入图片描述

通过程序代码构建一个蓝牙应用设备,所要求的服务和特性
假如程序的要求是:
有一个服务其中uuid是9011,服务中有两个特性,特性A的uuid是9012,访问权限是可读,可写,特性B的uuid是9013,访问权限是可读,可通知
分3步写:
1.

#创建要使用的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013) 
#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, ) 
SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts 

可将其放入上一个程序进行实验

二、数据收发

数据的收发都要依托上面服务中的特性这些数据点,其中他们的权限共有5种,分别是读,写,写但是无应答,通知,标示

在这里插入图片描述
其中,这些权限都有什么区别呢
通过手机和从设备来解释

1.读,手机读去从机某个特性的值
2.写,手机修改设备中某个特性的值
3.写但无应答,。。
4.通知,是设备里面的数据发生变化之后,通知手机来取数据
5.标示,跟通知类似,但是须有手机收到后回应

案例:

from machine import Pin
from time import sleep_ms
import ubluetooth        #导入BLE功能模块ble = ubluetooth.BLE()   #创建BLE设备
ble.active(True)         #打开BLE#创建要使用的UUID
SERVER_1_UUID = ubluetooth.UUID(0x9011)
CHAR_A_UUID = ubluetooth.UUID(0x9012)
CHAR_B_UUID = ubluetooth.UUID(0x9013)#创建特性并设置特性的读写权限
CHAR_A = (CHAR_A_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY, )
CHAR_B = (CHAR_B_UUID, ubluetooth.FLAG_READ | ubluetooth.FLAG_NOTIFY, )SERVER_1 = (SERVER_1_UUID, (CHAR_A , CHAR_B, ) , ) #把特性A和特性B放入服务1
SERVICES = (SERVER_1, ) #把服务1放入服务集和中
((char_a, char_b), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts#设置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请求时触发该事件onn_handle, char_handle = data #判断是来自那个特性的消息buffer = ble.gatts_read(char_handle) #读取接收到的消息print(char_handle, buffer) #打印消息内容ble.gatts_notify(0, char_handle, 'Hello') #回复Hello#这里是设备收到通知,就回复手机hello (手机要打开对设备的监听)ble.irq(ble_irq) 

三、UUID

蓝牙组织定义好的一些UUID,比如电量服务-0x180F

16bit uuid文档
在这里插入图片描述

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

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

相关文章

x-cmd pkg | procs - ps 命令的现代化替代品

目录 简介首次用户功能特点类似工具进一步阅读 简介 procs 是用 Rust 编写的 ps 替代品,用于显示有关任务进程的信息 首次用户 使用 x procs 即可自动下载并使用 在终端运行 eval "$(curl https://get.x-cmd.com)" 即可完成 x 命令安装, 详情参考 x-cmd…

python学完之后可以做什么,python学完可以做什么

大家好,小编来为大家解答以下问题,python学完可以做哪些工作,python学完之后可以做什么,今天让我们一起来看看吧! Python是一种全栈的开发语言,你如果能学好Python,前端,后端&#x…

Spring实现IoC:依赖注入/构造注入

● 控制反转,反转的是什么? ○ 将对象的创建权利交出去,交给第三方容器负责。 ○ 将对象和对象之间关系的维护权交出去,交给第三方容器负责。 ● 控制反转这种思想如何实现呢? ○ DI(Dependency Injection&…

Linux telnet命令

Linux telnet命令用于远端登入。 执行telnet指令开启终端机阶段作业&#xff0c;并登入远端主机。 语法 telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>…

Eureka工作原理

Eureka的工作原理 Eureka是Netflix开发的一个服务发现框架&#xff0c;它主要用于AWS云环境中&#xff0c;用于构建可伸缩的微服务架构。Eureka主要由两个组件构成&#xff1a;Eureka Server和Eureka Client。下面详细介绍它们的工作原理。 Eureka Server Eureka Server提供服…

【开题报告】基于SpringBoot的校园投诉系统的设计与实现

1.选题背景 校园管理是学校日常运行的重要组成部分&#xff0c;随着社会的发展和学生数量的增加&#xff0c;校园内的问题和纠纷也逐渐增多。例如&#xff0c;学生可能遇到与教师或其他学生之间的矛盾、设施维护问题、课程安排冲突等。这些问题如果得不到及时解决&#xff0c;…

【损失函数】Cross Entropy Loss 交叉熵损失

1、介绍 主页介绍的几种损失函数都是适用于回归问题损失函数&#xff0c;对于分类问题&#xff0c;最常用的损失函数是交叉熵损失函数 Cross Entropy Loss。它用于测量两个概率分布之间的差异&#xff0c;通常用于评估分类模型的性能。 2、公式 对于二分类问题&#xff0c;交…

服务器日常怎么维护 有哪些

服务器日常维护主要包含两位部分&#xff1a;硬件维护和软件维护。硬件维护 硬件维护就是指对服务器的硬件进行检测&#xff0c;更换&#xff0c;升级&#xff0c;最常见的是防火墙更新&#xff0c;时刻能够应对市场上的变化。 也包含服务器环境的一些维护&#xff0c;定期检查…

SV-7042VP 15W sip网络有源音箱,可外接15W无源副音箱

SV-7042VP 15W sip网络有源音箱,可外接15W无源副音箱 一、描述 SV-7042VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的…

【GO语言卵细胞级别教程】01.GO基础知识

01.GO基础知识 目录 01.GO基础知识1.GO语言的发展历程2.发展历程3.Windowns安装4.VSCode配置5.基础语法5.1 第一段代码5.2 GO执行的流程5.3 语法规则5.4 代码风格5.5 学习网址 1.GO语言的发展历程 Go语言是谷歌公司于2007年开始开发的一种编程语言&#xff0c;由Robert Griese…

Java版直播商城免 费 搭 建:平台规划与常见营销模式,电商源码、小程序、三级分销及详解

【saas云平台】打造全行业全渠道全场景的saas产品&#xff0c;为经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多样的营销玩法覆盖所有经营场景…

游戏引擎?

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具&#xff0c;其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台&#xff0c;如Linux、…

使用AOP实现自定义日志

在实现自定义日志之前&#xff0c;我们需要了解AOP。 1.AOP AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程范式&#xff0c;旨在通过将横切关注点&#xff08;cross-cutting concerns&#xff09;从主要业务逻辑中分离出来&…

macOS跨进程通信: XPC 创建实例

一&#xff1a;简介 XPC 是 macOS 里苹果官方比较推荐和安全的的进程间通信机制。 集成流程简单&#xff0c;但是比较绕。 主要需要集成 XPC Server 这个模块&#xff0c;这个模块最终会被 apple 的根进程 launchd 管理和以独立进程的方法唤起和关闭&#xff0c; 我们主app 进…

【运维】界面操作与直接操作

对于一个大型的复杂的系统&#xff0c;各个模块之间紧密关联&#xff0c;界面上的一个操作&#xff0c;可能涉及到很多底层逻辑的连携反应。 在一个共享文件系统中&#xff0c;一个简单的小操作&#xff0c;可能就涉及到数据库多张表的改动&#xff0c;而且往往改动的表并不是…

Flume基础知识(四):Flume实战之实时监控单个追加文件

1&#xff09;案例需求&#xff1a; 实时监控 Hive 日志&#xff0c;并上传到 HDFS 中 2&#xff09;需求分析&#xff1a; 3&#xff09;实现步骤&#xff1a; &#xff08;1&#xff09;Flume 要想将数据输出到 HDFS&#xff0c;依赖 Hadoop 相关 jar 包 检查/etc/profile.d…

【MySQL】MySQL运维SQL(持续更新。。。)

MySQL运维SQL 信息统计 查询数据库有多少张表 SELECT COUNT(*) AS table_count FROM information_schema.TABLES WHERE table_schema 数据库名;查询表中有多少个字段 SELECTCOUNT(*) AS field_count FROMinformation_schema.COLUMNS WHEREtable_schema 数据库名 AND tab…

Spark内核解析-Spark shuffle6(六)

1、Spark Shuffle过程 1.1MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌、混洗&#xff0c;把一组有一定规则的数据尽量转换成一组无规则的数据&#xff0c;越随机越好。MapReduce中的Shuffle更像是洗牌的逆过程&#xff0c;把一组无规则的数据尽量转换成一组具有一定规则…

RFID数据中心智能资产管理系统

数据中心机房承担着保障企业关键数据处理的重要责任&#xff0c;机房的日常管理直接关系到整体机房的日常维护和运行安全&#xff0c;数据资产管理中心在监管机房各部分设备的运行情况、维护数据中心的资产方面发挥着重要的作用。 成功的数据中心机房管理不仅需要选择高可靠性…

游戏分组(100用例)C卷 (JavaPythonC语言C++Node.js)

部门准备举办一场王者荣耀表演赛,有10名游戏爱好者参与,分为两队,每队5人。 每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把10名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队5名队员的评分总和。 现在给你10名参与者的游戏水…