13. 蓝牙
蓝牙低功耗(BLE)是蓝牙技术的一个特定版本,它专为低功耗通信而设计。与传统蓝牙技术相比,BLE专注于短期通信,交换小量数据,并且在设备之间建立连接的时间非常短。这些特性使得BLE非常适合于IoT(物联网)设备,如健康监测设备、智能家居控制等应用场景。由于其低功耗特性,BLE设备可由电池供电并运行数月甚至数年。BLE也支持广播通信模式,这为位置服务和设备发现提供了便利。
以下为示例:
c
from bluetooth import BLE
import bluetooth
bt = BLE() #创建蓝牙对象
bt.active(1)#打开蓝牙
SERVER_1_UUID = bluetooth.UUID(0x9011)
CHAR_A_UUID = bluetooth.UUID(0x9012)
CHAR_B_UUID = bluetooth.UUID(0x9013)
#设置特性的读写权限
CHAR_A = ( CHAR_A_UUID, bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY,)
CHAR_B = ( CHAR_B_UUID, bluetooth.FLAG_READ | bluetooth.FLAG_WRITE,)
#把特性A和特性B放入服务1
SERVER_1 = (SERVER_1_UUID, (CHAR_A, CHAR_B),)
#把服务1放入 服务集合 中
SERVICES = (SERVER_1,)
#注册服务到gatts
((char_a, char_b),) = bt.gatts_register_services(SERVICES)
# BLE 广播包构建
def create_adv_data(name):
# 构建广播包
# 格式为:长度, 类型, 数据...
# 其中,类型 0x01 表示"Flags", 0x09 表示"Complete Local Name"
# Flags 数据通常设置为 0x06 (通用可发现模式和BR/EDR不支持)
# 更多类型可以在 Bluetooth SIG 的广告数据类型文档中找到
adv_data = bytearray([0x02, 0x01, 0x06, # Flags
len(name) + 1, 0x09]) + name.encode('utf-8')
return adv_data
#设置广播名称
adv_data = create_adv_data('ESP32S3R8N8_BLE')
#开启广播
bt.gap_advertise(100, adv_data)
#蓝牙中断复位函数
def ble_irq(event, data):
if event == 1:#蓝牙已经连接
print('bluetooth connection')
pass
elif event == 2:#蓝牙断开连接
print('Bluetooth disconnection')
bt.gap_advertise(100, adv_data)
elif event == 3:#写入事件
print('Write event')
#将data元素拆分为两个数据
conn_handle, chan_handle = data
#读取chan_handle的数据
buffer = bt.gatts_read(chan_handle)
#输出接收到的数据
print(buffer)
if buffer == b'A': #如果数据为单个字符A
print('fasong B\r\n')
#向手机通道(conn_handle)发送数据chan_handle 单个字符B
bt.gatts_notify(1, char_a, b'B')
bt.irq(ble_irq)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
因为ESP32-S3只支持BLE蓝牙,不支持经典蓝牙,所以无法直接使用手机蓝牙搜索到。本案例使用APP【e调试】进行测试。在下载完该例程后,打开e调试将会搜索到名为“ESP32S3R8N8_BLE”的蓝牙。点击名称即可进行连接。
连接后打开 Unknown Characteristic开启发送数据。
手机发送单个字符A给开发板,开发板收到后回复字符B。