ble - 低功耗蓝牙#

示例

-- 本库用于操作BLE对象, 需要搭配bluetooth.init()使用
-- 详细用法请查阅demo

-- 模式解释
-- 从机模式(peripheral), 设备会被扫描到, 并且可以被连接
-- 主机模式(central), 设备会扫描其他设备, 并且可以连接其他设备
-- 广播者模式(ibeacon), 设备会周期性的广播beacon信息, 但不会被扫描到, 也不会连接其他设备
-- 观察者模式(scan), 设备会扫描其他设备, 但不会连接其他设备

-- 从机模式(peripheral)的基本流程(概要描述)
-- 1. 初始化蓝牙框架
-- 2. 创建BLE对象
-- local ble_device = bluetooth_device:ble(ble_event_cb)
-- 3. 创建GATT描述
-- local att_db = {xxx}
-- 4. 创建广播信息
-- ble_device:adv_create(adv_data)
-- 5. 开始广播
-- ble_device:adv_start()
-- 6. 等待连接
-- 7. 在回调函数中处理连接事件, 如接收数据, 发送数据等

-- 主机模式(central)的基本流程(概要描述)
-- TODO

-- 广播者模式(ibeacon)的基本流程(概要描述)
-- TODO

-- 观察者模式(scan)的基本流程(概要描述)
-- 1. 初始化蓝牙框架
-- 2. 创建BLE对象
-- local ble_device = bluetooth_device:ble(ble_event_cb)
-- 3. 开始扫描
-- ble_device:scan_start()
-- 4. 在回调函数中处理扫描事件, 如接收设备信息等
-- 5. 按需停止扫描
-- ble_device:scan_stop()

常量#

常量

类型

解释

ble.CHNLS_ALL

所有通道(37

38 39)

ble.gatt_create(opts)#

创建一个BLE GATT服务

参数

传入值类型

解释

table

GATT服务的描述信息

返回值

返回值类型

解释

boolean

是否创建成功

例子

local att_db = { -- Service
    string.fromHex("FA00"), -- Service UUID, 服务的UUID, 可以是16位、32位或128位
    -- Characteristic
    { -- Characteristic 1
        string.fromHex("EA01"), -- Characteristic UUID Value, 特征的UUID值, 可以是16位、32位或128位
        ble.NOTIFY | ble.READ | ble.WRITE -- Properties, 对应蓝牙特征的属性, 参考权限常量
        string.fromHex("1234"), -- 默认value
    }
}
ble_device:gatt_create(att_db)

ble.adv_create(opts)#

创建一个BLE广播

参数

传入值类型

解释

table

广播的描述信息

返回值

返回值类型

解释

boolean

是否创建成功

例子

-- 创建广播信息
ble_device:adv_create({
    addr_mode = ble.PUBLIC, -- 广播地址模式, 可选值: ble.PUBLIC, ble.RANDOM, ble.RPA, ble.NRPA
    channel_map = ble.CHNLS_ALL, -- 广播的通道, 可选值: ble.CHNLS_37, ble.CHNLS_38, ble.CHNLS_39, ble.CHNLS_ALL
    intv_min = 120, -- 广播间隔最小值, 单位为0.625ms, 最小值为20, 最大值为10240
    intv_max = 120, -- 广播间隔最大值, 单位为0.625ms, 最小值为20, 最大值为10240
    adv_data = {
        {ble.FLAGS, string.char(0x06)},
        {ble.COMPLETE_LOCAL_NAME, "LuatOS123"}, -- 广播的设备名
        {ble.SERVICE_DATA, string.fromHex("FE01")}, -- 广播的服务数据
        {ble.MANUFACTURER_SPECIFIC_DATA, string.fromHex("05F0")}
    }
})

ble.adv_start()#

开始广播

参数

返回值

返回值类型

解释

boolean

是否成功

例子

-- 开始广播
ble_device:adv_start()

-- 提醒, 对于从机模式, 如果被断开了连接, 则需要重新开始广播, 才能被重新搜索到

ble.adv_stop()#

主动停止广播

参数

返回值

返回值类型

解释

boolean

是否成功

例子

-- 停止广播
ble_device:adv_stop()

ble.write_notify(opts, value)#

写入带通知的特征值

参数

传入值类型

解释

table

特征值的描述信息

string

value 要写入的值

返回值

返回值类型

解释

boolean

是否成功

例子

-- 写入带通知的特征值
ble_device:write_notify({
    uuid_service = "FA00", -- 服务的UUID, 可以是16位、32位或128位
    uuid_characteristic = "EA01", -- 特征的UUID值, 可以是16位、32位或128位
}, "Hello BLE") -- 要写入的值

ble.write_indicate(opts, value)#

写入带指示的特征值

参数

传入值类型

解释

table

特征值的描述信息

string

value 要写入的值

返回值

返回值类型

解释

boolean

是否成功

例子

-- 写入带指示的特征值
ble_device:write_indicate({
    uuid_service = "FA00", -- 服务的UUID, 可以是16位、32位或128位
    uuid_characteristic = "EA01", -- 特征的UUID值, 可以是16位、32位或128位
}, "Hello BLE") -- 要写入的值

ble.write_value(opts, value)#

写入特征值

参数

传入值类型

解释

table

特征值的描述信息

string

value 要写入的值

返回值

返回值类型

解释

boolean

是否成功

例子

-- 写入特征值,填充预设值,被动读取
ble_device:write_value({
    uuid_service = "FA00", -- 服务的UUID, 可以是16位、32位或128位
    uuid_characteristic = "EA01", -- 特征的UUID值, 可以是16位、32位或128位
}, "Hello BLE") -- 要写入的值

ble.read_value(opts)#

读取特征值

参数

传入值类型

解释

table

特征值的描述信息

返回值

返回值类型

解释

boolean

是否成功

例子

-- 读取特征值,通过回调中的 EVENT_READ_VALUE 事件返回读取的value值
ble_device:read_value({
    uuid_service = "FA00", -- 服务的UUID, 可以是16位、32位或128位
    uuid_characteristic = "EA01", -- 特征的UUID值, 可以是16位、32位或128位
})

ble.notify_enable(opts, value)#

开关监听

参数

传入值类型

解释

table

特征值的描述信息

boolean

enable 开/关 可选,默认开

返回值

返回值类型

解释

boolean

是否成功

例子

-- 写入特征值,填充预设值,被动读取
ble_device:notify_enable({
    uuid_service = "FA00", -- 服务的UUID, 可以是16位、32位或128位
    uuid_characteristic = "EA01", -- 特征的UUID值, 可以是16位、32位或128位
}, true) -- 开/关

ble.scan_create(addr_mode, scan_interval, scan_window)#

创建一个BLE扫描

参数

传入值类型

解释

number

addr_mode 广播地址模式, 可选值: ble.PUBLIC, ble.RANDOM, ble.RPA, ble.NRPA

number

scan_interval 扫描间隔, 单位为0.625ms, 最小值为20, 最大值为10240

number

scan_window 扫描窗口, 单位为0.625ms, 最小值为20, 最大值为10240

返回值

返回值类型

解释

boolean

是否创建成功

例子

-- 创建BLE扫描
ble_device:scan_create(ble.PUBLIC, 100, 100)

ble.scan_start()#

开始BLE扫描

参数

返回值

返回值类型

解释

boolean

是否成功

例子

-- 开始BLE扫描
ble_device:scan_start()
-- 提醒, 扫描会一直进行, 直到调用ble.scan_stop()停止扫描
-- 扫描结果会立即执行回调, 同一个设备不会去重, 扫描到数据就会执行回调

ble.scan_stop()#

停止BLE扫描

参数

返回值

返回值类型

解释

boolean

是否成功

例子

-- 停止BLE扫描
ble_device:scan_stop()
-- 提醒, 扫描会一直进行, 直到调用ble.scan_stop()停止扫描

ble.connect()#

BLE连接

参数

传入值类型

解释

string

mac 地址

int

地址类型 ble.PUBLIC ble.RANDOM

返回值

返回值类型

解释

boolean

是否成功

例子

-- BLE连接
ble_device:connect(string.fromHex("C8478C4E027D"),0)

ble.disconnect()#

BLE断开连接

参数

返回值

返回值类型

解释

boolean

是否成功

例子

-- BLE断开连接
ble_device:disconnect()