一、蓝牙设备的两种角色

   1、服务端

     接收客户端的连接,对外提供服务。

     对外主动广播自己。

 

   2、客户端

     主动扫描周围设备,主动连接。

     主动发起服务调用,获取服务端的数据,控制服务端的行为。

 

二、MicroPython开发蓝牙服务端的接口

 (一)UUID的约定

   1、蓝牙的很多功能组成一个服务,每个服务用一个唯一ID来描述。

   2、服务的每个功能也用一个唯一ID描述。

   3、每个功能有读取、写入、通知等权限。

  服务端开放了权限,客户端才能调用。

 

  (二)具体的接口

   1、导入依赖

# 导入bluetooth依赖库

import  bluetooth

   2、建立BLE对象

# 建立对象

ble = bluetooth.BLE()

 

# 启用蓝牙

# 设为True真,激活使用

ble.active(True)

  3、定义监听器方法

# 事件方法

# 参数event是触发的事件码,是整数值

# 参数data是读写的连接对象

def handle(event, data):

    if event == 1:

        处理已连接事件

    elif event == 2:

        处理断开连接事件

    elif event == 3:

        # 有数据可读

        处理来自客户端的数据

 

 4、设置中断触发监听

# 设置监听方法

# irq(函数名) 设置事件触发时的处理函数

# handle是上面定义的函数

ble.irq(handle)

 

 5、对外间隔广播

# 对外广播

# 参数

#   定时周期:整数,单位是微秒

#   广播数据:是字节序列类型,不超过31个字节

ble.gap_advertise(定时周期,  广播数据)

   停止广播的方法:

# 设为None会停止广播

ble.gap_advertise(None)

 

  6、注册服务

元组变量 = 

对象.gatts_register_services(服务的元组)

   1)  UUID的定义

     可以是按照约定或者自定义。

     可以指定16位比特的整数。

     例如:0xA0B0

   2) 权限常量

      bluetooth库中定义有下列常量:

         FLAG_READ         读取权限

         FLAG_WRITE       写入权限

         FLAG_NOTIFY     通知权限

 

  7、读写方法

   1) 读取客户端数据:

字节序列  =  对象.gatts_read(连接对象)

   2)写入数据给客户端

对象.gatts_write(连接对象,  字节序列)

    3) 通知客户端

对象.gatts_notify(连接对象,  字节序列)

 

三、其他

   对外广播的案例:

# 1、导入依赖

import bluetooth

 

# 2、定义标志:普通可发现模式且不支持BR/EDR

 

# 字节序列格式:

#   1字节长度 + 1字节标志  + 1字节类型值

#    长度是2字节。

#    标志是常量GAP_ADTYPE_FLAGS

#    类型值是0x06代表普通可发现 | 不支持

flags = bytes([0x02, bluetooth.GAP_ADTYPE_FLAGS, 0x06])

 

# 3、定义完整设备名

# 定义设备名

dev = "ESP32".encode('utf-8')

 

# 格式:

# 1字节长度 + 1字节类型 + 名字字节序列

name = bytearray([len(dev) + 1, bluetooth.GAP_ADTYPE_LOCAL_NAME_COMPLETE])

 

# 连接名字的字节序列

name.extends(dev)

 

# 4、合并广播数据

# 注意总长度不要超过31字节

adv_data = flags + name

 

# 5、定义BLE对象

ble = bluetooth.BLE()

 

# 6、激活蓝牙

ble.active(True)

 

# 7、开始间隔广播

#   周期是10000微秒

#   广播数据设为adv_data

#   connectable设为True,代表可连接

ble.gap_advertise(

    10000,

    adv_data=adv_data,       

    connectable=True

)

 

 

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐