蓝牙简学(三)

本文介绍了如何在蓝牙低功耗设备中使用UUID来标识服务和特性,如电池电量和环境传感器,同时展示了如何使用SPP协议进行串口数据透传。作者提供了创建特定UUID和服务的详细代码示例。
摘要由CSDN通过智能技术生成

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


一、UUID

GATT层”中定义的所有属性都有一个UUID值,UUID是全球唯一的128位的号码,它用来识别不同的特性。
可以在上一章中下载pdf查看更多的uuid设定;

从0x1800开始是定义好的:服务uuid,比如0x180a是设备信息,0x180D是心率,0x180f是电池

从0x2A00开始是定义好的:特性UUID,比如0x2a00是设备名称, 0x2a01是设备外观,0x2a19为设备电量,0x2a6d是压力,0x2a6e是温度,0x2a6f是湿度

更多的可以从下面的pdf查阅。

在这里插入图片描述

一些文档中定义了的服务和特性,比如说:
电池电量服务的UUID是0x180F,电池电量特性的UUID是0x2A19
在这里插入图片描述

#创建电池服务和特性的UUID
BATTERY_SERVER_UUID = ubluetooth.UUID(0x180F)
BATTERY_CHAR_UUID = ubluetooth.UUID(0x2A19)


#创建环境传感器服务和特性的UUID
ENV_SERVER_UUID = ubluetooth.UUID(0x181A) #环境传感器服务
TEM_CHAR_UUID = ubluetooth.UUID(0x2A6E)   #温度特性
HUM_CHAR_UUID = ubluetooth.UUID(0x2A6F)   #湿度特性 
from machine import Pin
from time import sleep_ms
import ubluetooth        #导入BLE功能模块

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

#创建电池服务和特性的UUID
BATTERY_SERVER_UUID = ubluetooth.UUID(0x180F)
BATTERY_CHAR_UUID = ubluetooth.UUID(0x2A19)

#创建特性并设置特性的读写权限
BATTERY_CHAR = (BATTERY_CHAR_UUID, ubluetooth.FLAG_READ , )

BATTERY_SERVER = (BATTERY_SERVER_UUID, (BATTERY_CHAR, ) , ) #把电量特性放入电池服务
SERVICES = (BATTERY_SERVER, ) #把电池服务服务放入服务集和中

((battery_char,), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts

ble.gatts_write(battery_char, b'\x50') #设置电池电量为80%

#设置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: #收到数据
      print("收到新消息")

ble.irq(ble_irq) 

每个特性的数值类型以及范围

可以查下面的文档,GATT Specification Supplement(bing直接搜索这个,超链接有时候会丢)。

gatt文档

–比如截图的:
湿度,采用的是16位无符号类型的数据,单位是0.01%,范围是0到100.

在这里插入图片描述

然后是温度:
采用的16位有符号类型的数据,单位是0.01摄氏度,范围是-273.15-327.67

在这里插入图片描述

#创建环境传感器服务和特性的UUID
ENV_SERVER_UUID = ubluetooth.UUID(0x181A) #环境传感器服务
TEM_CHAR_UUID = ubluetooth.UUID(0x2A6E)   #温度特性
HUM_CHAR_UUID = ubluetooth.UUID(0x2A6F)   #湿度特性 

ble.gatts_write(tem_char, b'\x06\x08') #设置温度为20.54(0x0806 = 2054)
ble.gatts_write(hum_char, b'\x09\x07') #设置湿度为18.01%(0x0709 = 1801) 

同样的,可以用以上代码替换到上面的电池电量服务代码即可显示温湿度数据。
当然这个数据是我们自己写的,实际情况中需要写温湿度的驱动,将获取到的值通过以上方式传送出去。

二、SPP协议

全称Serial Port Profile,串口协议,是通过蓝牙实现的串口数据透传,比如HC-05蓝牙模块采用的就是spp协议。

低功耗蓝牙规范里面是没有定义spp服务标准的,但是我们可以自定义一个服务和特性,实现类似的功能

以下是代码

from machine import Pin,UART
from ubletooth import BLE
import ubluetooth        #导入BLE功能模块

uart1= UART(1,baudrate=115200,tx=23,rx=22)#默认串口被控制台占用,这里使用串口1

ble = BLE()   #创建蓝牙对象
ble.active(True)         #打开BLE

#创建SPP服务和特性的UUID,为了避免uuid重复,采用128bit的uuid
SPP_SERVER_UUID = ubluetooth.UUID('835892ab-edbc-1234-5678-112233445566')
SPP_CHAR_UUID = ubluetooth.UUID('835892ab-edbc-1234-5678-00805F9B34FB')

#创建特性并设置特性的读通知权限
SPP_CHAR = (SPP_CHAR_UUID, ubluetooth.FLAG_READ ,ubluetooth.NOTIFY )

SPP_SERVER = (SPP_SERVER_UUID, (SPP_CHAR, ) , ) #把特性A放入服务
SERVICES = (SPP_SERVER, ) #把服务放入服务集和中

((spp_char,), ) = ble.gatts_register_services(SERVICES) #注册服务到gatts


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

def ble_irq(event, data): # 蓝牙中断函数
    if event == 1: #蓝牙已连接
      print("BLE 连接成功")

    elif event == 2: #蓝牙断开连接
      print("BLE 断开连接")
	  ble.gap_advertise(100, adv_data = b'\x02\x01\x05\x05\x09\x42\x69\x62\x69')

    elif event == 3: #收到数据
    conn_handle,char_handle = date
    buffer = ble.gatts_read(char_handle)#这里事件段是处理特性的write请求
    uart1.write(buffer)#把收到的数据通过串口输出
    #这样就是实现了接收数据

ble.irq(ble_irq) 

while 1 :
if uart1.any() !=0:
	r=uart1.read()#读取串口数据
	ble.gatts_notify(0,spp_char,r)#通过蓝牙发送给手机
#这里是不断的读取数据,并且将数据通过notify发送到手机,实现数据发送的功能

以上的代码就是实现了一个简单的spp协议

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝牙是一种无线通信技术,可使不同设备之间实现数据交流和传输。学习如何下载蓝牙pdf文件可以帮助我们更好地利用蓝牙技术,并将其应用于我们的日常生活中。 首先,我们需要了解如何打开设备的蓝牙功能。这通常可以在设备的设置菜单中找到。一旦找到并打开蓝牙功能,设备就可以开始搜索附近的蓝牙设备。 接下来,我们需要找到提供蓝牙pdf下载的设备或来源。这可以是另一个设备,如手机或电脑,或通过蓝牙接收器连接到打印机或其他外部设备。确保该设备已开启并处于可见状态,以便被其他设备检测到。 接下来,我们需要在设备上选择要下载的蓝牙pdf文件。这可能需要进入文件管理或文档阅读应用程序,并找到目标文件。一旦找到文件,我们可以选择将其发送到蓝牙设备。 在发送文件之前,我们将被要求选择目标设备。这将显示附近的可用蓝牙设备列表。选择我们要连接的设备,然后点击发送按钮。 然后,目标设备将显示一个提示,询问我们是否接受发送的文件。在目标设备上,我们需要确认文件接受请求。 一旦目标设备接受文件,蓝牙传输就会开始。这可能需要一些时间,具体取决于文件的大小和设备之间的蓝牙连接质量。一旦传输完成,我们就可以在目标设备上找到已下载的蓝牙pdf文件。 通过这种手把手的学习过程,我们可以学会如何使用蓝牙技术下载pdf文件。这将为我们提供方便和灵活性,使我们能够更好地利用无线通信技术。 ### 回答2: 蓝牙PDF下载的步骤相对简单,下面我将以手把手的方式教你如何进行操作。 首先,确保你的设备具备蓝牙功能。通常,大多数智能手机、平板电脑和电脑都已经内置了蓝牙模块。如果你的设备不具备蓝牙功能,你可以考虑购买一个蓝牙适配器。 接下来,确保你已经打开了蓝牙功能。这通常可以在设备的设置菜单中找到。在Android设备中,你可以在"设置"菜单中找到"蓝牙"选项。在iOS设备(如iPhone或iPad)中,你可以在"设置"菜单的顶部找到蓝牙开关。 启动蓝牙后,设备将自动搜索周围的可用蓝牙设备。在PDF文件的来源设备上,确保该设备已经设置为可被其它蓝牙设备发现。在设备的设置菜单中,你应该能够找到相关选项。在某些设备上,你可能需要设置一个固定的蓝牙配对PIN码。 在PDF来源设备上,打开你想要分享或发送的PDF文件。然后,选择分享选项,通常是一个"分享"或"发送"按钮。在选择分享选项后,你应该能够看到蓝牙图标,代表你可以使用蓝牙进行文件传输。 点击蓝牙图标后,设备将开始搜索附近的蓝牙设备。在搜索结果中,应该能够看到你想要与之分享文件的设备名称。选择该设备后,系统将提示你进行配对。在进行配对时,请确保同意配对请求并输入相应的配对PIN码,如果有的话。 一旦配对成功,文件传输将自动开始。传输时间取决于文件大小和蓝牙设备之间的距离。在传输过程中,请确保设备之间保持一定的距离,以确保连接稳定。 完成以上步骤后,你就成功地使用蓝牙下载了PDF文件。在接收设备上,你可以在相应的文件夹中找到下载好的PDF文件。 ### 回答3: 学习如何通过蓝牙下载PDF文件是一项非常实用的技能。下面我将手把手地教你如何进行操作。 首先,确保你的设备(例如手机或电脑)已经连接到蓝牙。在设置或控制面板中,查找并打开蓝牙设置选项。启用蓝牙功能并确保可见性设置为“可见”或“所有设备可见”。 接下来,找到你想要下载的PDF文件。这可以是来自互联网的在线PDF文件,也可以是其他设备上已下载好的文件。 如果你要下载在线PDF文件,找到该文件的下载链接。在你的设备上打开浏览器,并粘贴或输入下载链接地址。然后点击“下载”按钮。 如果你要下载其他设备上的文件,确保蓝牙已经与该设备连接。在你的设备上打开文件管理器或资源管理器,并找到蓝牙连接的设备。在设备列表中选择该设备,并浏览文件夹以找到目标PDF文件。 无论是在线PDF文件还是其他设备上的文件,点击文件后,选择“分享”或“发送”选项。在弹出的分享列表中,选择蓝牙选项。 然后,选择接收蓝牙传输的设备。如果你的设备已连接多个蓝牙设备,确保选择正确的设备。然后开始传输。 在接收设备上,你需要确认接受蓝牙文件传输。根据设备的操作系统,你可能需要点击“接受”、“确定”或类似选项。等待传输完成。 完成以上步骤后,你将成功通过蓝牙下载了你想要的PDF文件。你可以在设备的文件管理器或下载文件夹中找到并打开该文件。 希望以上步骤能够帮助你学会如何通过蓝牙下载PDF文件。如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值