主机
约 2309 字大约 8 分钟
2026-03-19
Central 类
Central 类提供了 BLE 主机模式的完整功能,包括:
- 扫描参数设置和扫描控制
- 设备连接和断开
- 服务搜索
- 特征读写和订阅
bt 模块已预创建了一个 Central 实例,通过 bt.central 或 bt.cent 访问,无需手动创建。
import {cent} as bt from 'bt'
cent.init()事件
Central 类继承自 EventEmitter,支持以下事件:
| 事件 | 参数 | 说明 |
|---|---|---|
connect | (connid, addr) | 连接到设备时触发 |
disconnect | (connid, addr) | 与设备断开连接时触发 |
close | (connid, addr, reason) | 连接关闭时触发,reason 为断开原因码 |
示例:
import * as bt from 'bt'
// 初始化 Central(使用预创建的实例)
bt.central.init()
// 开始扫描
bt.setScanParam({ scan_type: 0, scan_interval: 0x50, scan_window: 0x40 })
bt.startScan()
// 发现设备后连接
bt.on('scan-res', async (device) => {
if (device.addr === 'AA:BB:CC:DD:EE:FF') {
bt.stopScan()
// 连接设备
const peer = await bt.central.connect(device.addr, 5000)
console.log('已连接到:', peer.addr)
// 搜索服务
await peer.search()
// 读取特征值
const data = await peer['2a37'].read()
console.log('心率:', new Uint8Array(data)[0])
// 订阅通知
await peer['2a37'].subscribe()
peer['2a37'].on('notify', (data) => {
console.log('收到通知:', data)
})
}
})方法 init
原型: init ()
初始化 Central 模式
初始化 BLE Central (主机) 模式,注册事件回调。
示例:
import * as bt from 'bt'
bt.central.init()返回值:
类型undefined
方法 connect
原型: connect (addr:string, timeout:number=0)
连接到 BLE 设备
连接到指定 MAC 地址的 BLE 设备,返回 Promise 包装的 Peer 对象。
示例:
import * as bt from 'bt'
bt.central.init()
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF', 5000)
console.log('已连接到:', peer.addr)参数:
addr
类型string
参数说明目标设备的 MAC 地址
timeout
类型number
默认值0
参数说明连接超时时间(毫秒),0 表示不超时
异常:
- 连接超时
- 连接失败
返回值:
Peer 类
Peer 类,表示已连接的 BLE 设备
Peer 类继承自 EventEmitter,表示 Central 连接到的远程 BLE 设备。 通过 Peer 对象可以搜索服务、读写 PeripheralCharacteristic、设置 MTU 等。
事件
Peer 类继承自 EventEmitter,支持以下事件:
| 事件 | 参数 | 说明 |
|---|---|---|
search | (service) | 发现服务时触发,service 包含 uuid 和 chars |
search-cmpl | (status) | 服务搜索完成时触发,status 为 0 表示成功 |
cfg-mtu | (status, mtu) | MTU 配置完成时触发,mtu 为协商后的 MTU 大小 |
示例:
import * as bt from 'bt'
bt.central.init()
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF', 5000)
// 搜索服务
await peer.search()
// 读取特征值
const data = await peer['2a37'].read()
// 设置 MTU
const mtu = await peer.setMTU(185)
// 断开连接
peer.disconnect()方法 search
原型: search ()
Peer 类的方法:search
在已连接的 BLE 设备上搜索所有 GATT 服务和特征。
示例:
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF')
await peer.search()返回值:
类型Promise<undefined>
说明搜索完成时 resolve
方法 setMTU
原型: setMTU (mtu:number)
Peer 类的方法:setMTU
请求更新与设备的 MTU 大小。
示例:
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF')
const mtu = await peer.setMTU(185)参数:
mtu
类型number
参数说明请求的 MTU 大小
返回值:
类型Promise<number>
说明返回实际 MTU 大小的 Promise
方法 disconnect
原型: disconnect ()
Peer 类的方法:disconnect
断开与 BLE 设备的连接。
示例:
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF')
peer.disconnect()返回值:
类型undefined
方法 search
原型: search ()
Peer 类的方法:search
在已连接的 BLE 设备上搜索所有 GATT 服务和特征。
示例:
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF')
await peer.search()返回值:
类型Promise<undefined>
说明搜索完成时 resolve
方法 setMTU
原型: setMTU (mtu:number)
Peer 类的方法:setMTU
请求更新与设备的 MTU 大小。
示例:
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF')
const mtu = await peer.setMTU(185)参数:
mtu
类型number
参数说明请求的 MTU 大小
返回值:
类型Promise<number>
说明返回实际 MTU 大小的 Promise
方法 disconnect
原型: disconnect ()
Peer 类的方法:disconnect
断开与 BLE 设备的连接。
示例:
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF')
peer.disconnect()返回值:
类型undefined
PeripheralCharacteristic 类
PeripheralCharacteristic 类(Central 侧),表示远程设备的 GATT 特征
PeripheralCharacteristic 类继承自 EventEmitter,表示 Central 连接到的远程设备中的 GATT 特征。 支持读取、写入和订阅通知等操作。
事件
PeripheralCharacteristic 类继承自 EventEmitter,支持以下事件:
| 事件 | 参数 | 说明 |
|---|---|---|
read-char | (status, data) | 读取特征值完成时触发,data 为 ArrayBuffer |
write-char | (status, offset) | 写入特征值完成时触发 |
subscribe | (status) | 订阅/取消订阅完成时触发,status 为 0 表示成功 |
示例:
import * as bt from 'bt'
bt.central.init()
const peer = await bt.central.connect('AA:BB:CC:DD:EE:FF', 5000)
await peer.search()
// 访问特征(通过 UUID)
const char = peer['2a37']
// 读取特征值
const data = await char.read()
// 写入特征值
await char.write(new Uint8Array([0x01, 0x02]))
// 订阅通知
await char.subscribe()
char.on('notify', (data) => {
console.log('收到通知:', data)
})方法 write
原型: write (data:ArrayBuffer, rsp:boolean=false)
Characteristic 类的方法:write(Central 侧)
向远程设备的特征写入数据。
示例:
const char = peer['2a37']
await char.write(new Uint8Array([0x01, 0x02]))参数:
data
类型ArrayBuffer
参数说明要写入的数据
rsp
类型boolean
默认值false
参数说明是否需要响应
返回值:
类型Promise<undefined>
说明写入完成时 resolve
方法 read
原型: read ()
Characteristic 类的方法:read(Central 侧)
从远程设备的特征读取数据。
示例:
const char = peer['2a37']
const data = await char.read()返回值:
类型Promise<ArrayBuffer>
说明读取到的数据
方法 subscribe
原型: subscribe ()
Characteristic 类的方法:subscribe(Central 侧)
订阅远程设备特征的通知或指示。
示例:
const char = peer['2a37']
await char.subscribe()
char.on('notify', (data) => {
console.log('收到通知:', data)
})返回值:
类型Promise<undefined>
说明订阅完成时 resolve
方法 write
原型: write (data:ArrayBuffer, rsp:boolean=false)
PeripheralCharacteristic 类的方法:write(Central 侧)
向远程设备的特征写入数据。
示例:
const char = peer['2a37']
await char.write(new Uint8Array([0x01, 0x02]))参数:
data
类型ArrayBuffer
参数说明要写入的数据
rsp
类型boolean
默认值false
参数说明是否需要响应
返回值:
类型Promise<undefined>
说明写入完成时 resolve
方法 read
原型: read ()
PeripheralCharacteristic 类的方法:read(Central 侧)
从远程设备的特征读取数据。
示例:
const char = peer['2a37']
const data = await char.read()返回值:
类型Promise<ArrayBuffer>
说明读取到的数据
方法 subscribe
原型: subscribe ()
PeripheralCharacteristic 类的方法:subscribe(Central 侧)
订阅远程设备特征的通知或指示。
示例:
const char = peer['2a37']
await char.subscribe()
char.on('notify', (data) => {
console.log('收到通知:', data)
})返回值:
类型Promise<undefined>
说明订阅完成时 resolve
