MicroPython开发低功耗蓝牙服务
一、蓝牙设备的两种角色
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
)
更多推荐


所有评论(0)