beacon

# 简介 Beacon是建立在低功耗蓝牙协议基础上的一种广播协议,同时它也是拥有这个协议的一款低功耗蓝牙设备(从机)。作为一款Beacon设备,它通常是放在室内的某个固定位置,借此向周围进行连续性广播,但是它不能和任何低功耗蓝牙主机进行连接。所有广播数据在特定规则下进行排列。 # API说明 以下API是模块BLE beacon(从机)用到的接口,其余接口及具体接口参数说明和用法请到API说明章节和demo内查看并学习 | API接口 | 描述 | | ------------------------- | -------------------------------------- | | btcore.open() | 打开蓝牙 | | btcore.close() | 关闭蓝牙 | | btcore.state() | 查询蓝牙状态(开启或者关闭) | | btcore.setadvparam() | 设置广播参数 | | btcore.advertising() | 蓝牙广播开关 | | btcore.getaddr() | 获取本机蓝牙MAC地址 | BLE从设备模式用到的蓝牙消息 | API接口 | 描述 | | ------------------------- | -------------------------------------- | | MSG_OPEN_CNF | 蓝牙打开成功 | | MSG_CLOSE_CNF | 蓝牙关闭成功 | > 详细的API介绍见[btcore API章节](https://doc.openluat.com/wiki/21?wiki_page_id=2244) # 实现流程 - 注册蓝牙消息回调函数 通过rtos.on() 注册蓝牙消息回调函数 - 打开蓝牙 使用btcore.open(0)打开蓝牙从设备模式 - 设置广播参数 使用btcore.setadvparam()来设置广播参数,如果没有设置,则使用默认的广播参数 - 设置beacon广播数据 使用btcore.setbeacondata()设置beacon广播数据:uuid, major, minor UUID :这是将你所有的beacon与其他人的beacon设备区别开的id!例如,目前在商店里某个区域分布着多个beacon形成一条“链带”,用于为顾客提供特定的服务,那么归属于同一条“链带”的beacon将分配到相同的proximity UUID。为这条“链带”设计的专用应用程序将会在后台使用这个UUID扫描到这条“链带”中的beacon设备。 major 编号:用于将相关的beacon标识为一组。例如,一个商店中的所有beacon将会分配到相同的major编号。通过这种方式,应用程序就能够知道顾客位于哪一家商店。 minor 编号:用于标识特定的beacon设备。例如一个商店中的每一个beacon设备都拥有唯一的minor编号,这样你才能够知道顾客位于商店中的哪个位置。 - 开启蓝牙广播 使用btcore.advertising()来打开广播 # 示例 相关实例程序在脚本库的demo\bluetooth文件夹下,包含主机、从机、becaon和经典蓝牙。可以根据实际需要选择demo进行研究。 **初始化注册蓝牙消息回调函数** 以\script_LuaTask_V2.3.9\demo\bluetooth\slave.lua作为基础进行修改。首先使用rtos.on()注册蓝牙消息的回调处理函数。 ```lua local function init() log.info("bt", "init") rtos.on(rtos.MSG_BLUETOOTH, function(msg) if msg.event == btcore.MSG_OPEN_CNF then sys.publish("BLE_OPEN", msg.result) --蓝牙打开成功 end end) end ``` **打开蓝牙** ```lua local function poweron() log.info("bt", "poweron") btcore.open(0) --打开蓝牙从模式 --蓝牙打开后,在上面的消息回调内会有蓝牙打开成功的消息上报 --在这里阻塞住,当收到蓝牙打开成功消息时退出阻塞 sys.waitUntil("BLE_OPEN") end ``` ***注意:接口返回成功不一定是打开成功,需要等待蓝牙打开成功的消息*** **设置蓝广播参数,beacon数据包、打开广播** ```lua local function advertising() log.info("bt", advertising") --btcore.setadvparam(0x80,0xa0,0,0,0x07,0,0,"11:22:33:44:55:66") --btcore.setbeacondata(uuid, major, minor) btcore.setbeacondata("AB8190D5D11E4941ACC442F30510B408", 10107, 50179) btcore.advertising(1) --打开广播 end ``` **将以上几个函数结合执行一下,模块蓝牙即可向周围广播beacon数据** ```lua sys.taskinit( function() init() poweron() advertising() end ) ``` # 注意事项 使用手机、电脑与模块低功耗蓝牙进行测试时,需要使用专门的低功耗蓝牙调试软件 手机低功耗蓝牙调试软件这里推荐使用nRF Connect [nRF Connect下载及使用教程](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/sivVjmZk)