首页 > 其他分享 >【嵌入式开发】探讨下PC端的BLE开发

【嵌入式开发】探讨下PC端的BLE开发

时间:2024-12-22 13:30:26浏览次数:6  
标签:par characteristic print 嵌入式 PC device BLE asyncio

目前在嵌入式设备端,实现了不少ble的功能。比如音频传输,图片传输。一般要方便演示,需要开发个对应的手机app。但是我又是很偷懒的人。想着,python这个工具这么强大,在PC端可以用python几行代码就实现掉吧?
说干就干!
根据同事的推荐,用了python的bleak蓝牙库。
我是在windows10上实现的,先安装:

pip install bleak


先打开蓝牙。
然后写了个简单的扫描代码:

import asyncio
from bleak import BleakScanner

async def main():
    devices = await BleakScanner.discover()
    for d in devices:   #d为类,其属性有:d.name为设备名称,d.address为设备地址
        print(d)

asyncio.run(main())

运行结果如下:

# -*- coding: utf-8 -*-
import asyncio
from bleak import BleakClient, BleakScanner
from bleak.backends.characteristic import BleakGATTCharacteristic

#设备的Characteristic UUID
par_notification_characteristic="00002A4F-0000-1000-8000-00805F9B34FB"
#设备的Characteristic UUID(具备写属性Write)
par_write_characteristic="6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#设备的MAC地址
#par_device_addr="AB:89:67:A0:34:26"
par_device_addr="AB:8B:67:45:23:09"


#准备发送的消息,为“hi world\n”的HEX形式(包括回车符0x0A 0x0D)
send_str=bytearray([0x68,0x69,0x20,0x77,0x6F,0x72,0x6C,0x64,0x0A,0x0D])

#监听回调函数,此处为打印消息
def notification_handler(characteristic: BleakGATTCharacteristic, data: bytearray):
    print("rev data:",data)

async def main():
    print("starting scan...")

    #基于MAC地址查找设备
    device = await BleakScanner.find_device_by_address(
        par_device_addr, cb=dict(use_bdaddr=False)  #use_bdaddr判断是否是MOC系统
    )
    if device is None:
        print("could not find device with address '%s'", par_device_addr)
        return``

    #事件定义
    disconnected_event = asyncio.Event()

    #断开连接事件回调
    def disconnected_callback(client):
        print("Disconnected callback called!")
        disconnected_event.set()

    print("connecting to device...")
    async with BleakClient(device,disconnected_callback=disconnected_callback) as client:
        print("Connected")
        await client.start_notify(par_notification_characteristic, notification_handler)
        while True:
            #await client.write_gatt_char(par_write_characteristic, send_str)
            await asyncio.sleep(0.1)           #每休眠1秒发送一次


asyncio.run(main())

音频是通过notify的方式传输的。按照这个代码的预期,遥控器发送音频的数据,会被动的接收到(看监听回调函数)。
执行后,发现连接上遥控器后,过了一会,就断开了连接。但是用PC系统的蓝牙扫描工具,扫描和连接是正常的。

这样看,break这个库,使用上是有限制的。或者它有什么功能要开启,比如支持加密配对和绑定。但是我还没有找到。
我猜测和配对与绑定有关系,因此我关闭了遥控器的绑定功能(宏配置了关闭了绑定)。在遥控器的代码端,发现连接成功后,会调用:ble_gap_security_initiate 这个接口,主动要求主机发起配对请求。我也把这个代码屏蔽掉。
然后再重新执行python代码,就可以正常连接,并与指定的特征接收对方的数据了。
手机端每次连接都会弹下面这个配对提示:

其实,也是和对方调用了 ble_gap_security_initiate 有关系。但是在PC端连接,没有这个提示,我认为和主机的处理行为有关。因为,这个配对使用的加密机制是最简单的just work,密码就是默认的“0000”。我猜测PC主机就内部默认处理掉了,不给提示了。
不管怎么说,至少后面需要快速验证下某些ble传输的数据效果,某些idea的验证,用python就会很便捷了。

原创 阎阿福 阿福的技术小窝

标签:par,characteristic,print,嵌入式,PC,device,BLE,asyncio
From: https://www.cnblogs.com/o-O-oO/p/18622034

相关文章

  • CPCI 转 PMC 载板转接卡
    CPCI转PMC载板转接卡是一种用于实现CompactPCI(CPCI)接口与PCIMezzanineCard(PMC)接口之间转换和连接的硬件设备。它的主要作用是解决CPCI总线设备与PMC接口设备之间的接口不兼容问题,使得这两种不同接口标准的设备能够相互通信和协同工作。在结构上,转接卡通常一端具有CP......
  • Google Kickstart2021 Round C Problem A
    数位DP传送思路简单的数位DP,假定每一位的字符前面是最大的字符,对于每一位的字符,小于当前字符的数量是(s[i]-'a'),此时如果这样选择,那么后面的每一个到字符串中间的字符都可以任选m个,设第i个到中间字符的数量是y,所以此时可以构成的满足条件的字符是\((s[i]-'a')*m^y\)但是我们......
  • 全网最全,保姆级Stable Diffusion入门使用教程(附模型下载使用说明)
    一、出图的基本操作在出图之前,我们先来了解一下SD操作界面常用的一些功能1、模型选择:选择合适的大模型2、文生图:通过输入提示词,让AI生成图片3、图生图:在已经输入文字指令的基础上,通过一张参考图片,让AI根据提示词生成类似的效果。4、附加功能:提高生成图片的分辨率......
  • 全网最全,保姆级Stable Diffusion系列入门使用教程下篇(图生图、LoRA、提示词权重)
    一、LoRA1、什么是LoRALoRA通常称之为微调模型,用于满足指定的风格或者人物特征属性。这种技术通过在模型的交叉注意力层中添加小的调整来实现风格和内容的变化,而不是对整个模型进行训练。LoRA几大特点①文件大小小:LoRA模型通常比检查点模型小10到100倍,文件大小更易于......
  • AI绘画教程:如何在stable diffusion中生成高清大图?
    stablediffusion中,默认生成的图片是512*512尺寸的,分辨率较低,图像质量一般。要想生成高清大图,有两种方法。一是在文生图的时候,选择下方的hires.fix高分辨率修复,就会将生成图片的512512尺寸调整成10241024的大图。不过,这会导致出图速度变慢。更值得推荐的是第二种方式:ext......
  • EFI Boot Editor 是一个用于管理和编辑计算机引导加载程序的工具,尤其在基于 UEFI (Uni
    EFIBootEditor是一个用于管理和编辑计算机引导加载程序的工具,尤其在基于UEFI(UnifiedExtensibleFirmwareInterface)固件的系统上,EFI(或称为UEFI)引导加载器起着至关重要的作用。它允许用户通过图形界面或命令行界面对启动项进行定制、编辑、删除、添加等操作。以下是关于E......
  • 嵌入式Linux,proc文件系统讲解,介绍以及读取使用
    1.简介         proc文件系统是一个虚拟文件系统,它以文件系统的方式为应用层访问系统内核数据提供了接口,用户和应用程序可以通过proc文件系统得到系统信息和进程相关信息,对proc文件系统的读写作为与内核进行通信的一种手段。但是与普通文件不同的是,proc文......
  • Introduction to gRPC
    IntroductiontogRPChttps://grpc.io/docs/what-is-grpc/introduction/ AnintroductiontogRPCandprotocolbuffers.ThispageintroducesyoutogRPCandprotocolbuffers.gRPCcanuseprotocolbuffersasbothitsInterfaceDefinitionLanguage(IDL)and......
  • 嵌入式系统 第三讲 嵌入式Linux操作系统
    自己整理的笔记自用,抄录老师给的课件,只是看没有印象,所以我就敲出来了,不算原创也不算翻译,考试复习用的,有需要的伙伴可以看看,个人觉得还是有逻辑的。嵌入式系统对操作系统(OS)的要求:(1)高度简练(2)质量可靠(3)界面友善(4)易开发(5)多任务(6)价格低•3.1嵌入式Linux简介3.1.1μCLinux-......
  • 嵌入式系统 第二讲 ARM处理器和指令集
    自己整理的笔记自用,抄录老师给的课件,只是看没有印象,所以我就敲出来了,不算原创也不算翻译,考试复习用的,有需要的伙伴可以看看,个人觉得还是有逻辑的。•2.1ARM处理器简介2.1.1ARM公司和ARM产品简介ARM公司本身不生产芯片,而是通过转让设计方案(IP核)由合作伙伴(Samsung、Int......