合宙蓝牙功能开发 -- ibeacon

发布于:2024-10-16 ⋅ 阅读:(143) ⋅ 点赞:(0)

前言

  1. 个人邮箱:zhangyixu02@gmail.com
  2. 这里将会介绍合宙的蓝牙广播功能,并且实现 ibeacon 功能。
  3. 学习本文之前,建议先看合宙 Air724UG 开发板快速上手

ibeacon 报文结构

BLE 广播报文结构

  1. 首先我们来看看 BLE 广播报文结构体如下,需要注意的是,一个 BLE 广播包必须存在 0x01 类型的广播数据,该广播主要是用于指示当前设备能进行的一些行为。因此 AD Structure 1 必须是 0x01 类型广播。

在这里插入图片描述

ibeacon 报文结构

  1. 接下来的 AD Structure 2 就是 ibeacon 的数据包格式。从下图我们即可看出,我们正在要关心和修改的地方只有如下四个。对于一部分人而言,Company ID 甚至也不需要管。
  • Company ID : 设备公司名
  • UUID : 用于唯一标识应用场景
  • Major : 用户自定义的主要值,用于分组或区域标识
  • Minor : 用户自定义的次要值,用于更精细的分组或区域标识

在这里插入图片描述

实验

代码

  1. 创建 main.lua 文件,里面写入如下内容。
PROJECT = "ibeacon" -- 工程名字
VERSION = "0.0.1"       -- 项目版本

sys = require"sys"

---------------- 这里写应用程序代码 ----------------

sys.timerLoopStart(print,1000,"hello world") -- 每隔 1s 打印一次
require "beacon"  -- ibeacon

--------------------------------------------------

sys.run()
  1. 创建 beacon.lua 文件,里面写入如下内容。
--- 模块功能:蓝牙功能测试
-- @author openLuat
-- @module bluetooth.beacon
-- @license MIT
-- @copyright openLuat
-- @release 2020.09.27
-- @注意 需要使用core(Luat_VXXXX_RDA8910_BT_FLOAT)版本
module(..., package.seeall)

local function init()
    log.info("bt", "init")
    rtos.on(rtos.MSG_BLUETOOTH, function(msg)
        if msg.event == btcore.MSG_OPEN_CNF then
            sys.publish("BT_OPEN", msg.result) --蓝牙打开成功
        end
    end)
end

local function poweron()
    log.info("bt", "poweron")
    btcore.open(0) --打开蓝牙从模式
    _, result = sys.waitUntil("BT_OPEN", 5000) --等待蓝牙打开成功
end

local function advertising()

    log.info("bt", "advertising")
    --btcore.setadvparam(0x80,0xa0,0,0,0x07,0,0,"11:22:33:44:55:66") --广播参数设置 (最小广播间隔,最大广播间隔,广播类型,广播本地地址类型,广播channel map,广播过滤策略,定向地址类型,定向地址)
    btcore.setbeacondata("AB8190D5D11E4941ACC442F30510B408",10107,50179) --beacon设置  (uuid,major,minor),默认公司为 Microsof
    -- btcore.setadvdata(string.fromHex("0201061AFF06000215AB8190D5D11E4941ACC442F30510B408277BC403C5")) --通过设置广播包接口设置 beacon, Microsof 公司
    -- btcore.setadvdata(string.fromHex("0201061AFF4C000215AB8190D5D11E4941ACC442F30510B408277BC403C5")) -- 通过设置广播包接口设置 beacon,公司修改为 apple
    btcore.advertising(1)-- 打开广播
end

local ble_test = {init, poweron,advertising}

sys.taskInit(function()
    for _, f in ipairs(ble_test) do
        sys.wait(5000)
        f()
    end
end)

程序烧录

进入下载模式

  1. 数据线连接开发板的 USB 口。在这里插入图片描述

  2. 按住下载模式按键,不要松手,插入电脑,然后松手

在这里插入图片描述

  1. 此时电脑打开设备管理器,能够发现增加了一个端口。

在这里插入图片描述

程序下载

  1. 打开 LuaTools ,选择 4G模块USB打印,然后点击项目管理测试。

在这里插入图片描述

  1. 我们查阅 Air724UG LuatOS固件版本 说明 知道,只有 Luat_RDA8910_BT_FLOATLuat_RDA8910_RBTTSQRLLSDFT 者两个底层 core 兼容蓝牙。

在这里插入图片描述

  1. 这里我们选择底层core Luat_RDA8910_BT_FLOAT

在这里插入图片描述

  1. 按照如下步骤将两个 lua 文件包含进来。

在这里插入图片描述

  1. 按照下图将对应选项勾选,然后点击下载底层和脚本

在这里插入图片描述

现象

  1. 下载完成之后,设备管理器中端口将会出现 4 个设备。

在这里插入图片描述

  1. 之后我们每秒可以看到一次 hello world
    在这里插入图片描述

  2. 当看到 [bt] advertising 时候,我们在手机端打开 nRF Connect。进行如下设置

nRF Connect下载及使用教程

在这里插入图片描述

  1. 之后我们即可扫描到一个 Beacon 设备,展开后信息如下。

在这里插入图片描述

用法说明

初始化注册蓝牙消息回调函数

  1. 如下方法为注册一个蓝牙消息的回调处理函数。
local function init()
    log.info("bt", "init")
    rtos.on(rtos.MSG_BLUETOOTH, function(msg)
        if msg.event == btcore.MSG_OPEN_CNF then
            sys.publish("BT_OPEN", msg.result) --蓝牙打开成功
        end
    end)
end

打开蓝牙

  1. 当蓝牙初始化完成后,需要调用如下函数进行打开。
local function poweron()
    log.info("bt", "poweron") -- 打印 [I]-[bt] poweron
    btcore.open(0) --打开蓝牙从模式
    _, result = sys.waitUntil("BT_OPEN", 5000) --等待蓝牙打开成功,时间为 5s
end

设置广播参数

  1. 这里是用于设置广播的内容。根据上面的报文结构我们可知真正需要关心的内容只有 Company IDUUIDMajorMinor这四个参数,而Company ID对于绝大多数开发者而言,也是可以忽略的。
  2. 当我们不关心Company ID时候,我们直接调用 btcore.setbeacondata() 函数即可。这个方法是比较推荐的
  3. 如果开发者对 BLE 的广播报文结构很清晰,并且希望获取更大的灵活性,那么就可以使用 btcore.setadvdata() 函数来进行设置。
local function advertising()

    log.info("bt", "advertising")
    --btcore.setadvparam(0x80,0xa0,0,0,0x07,0,0,"11:22:33:44:55:66") --广播参数设置 (最小广播间隔,最大广播间隔,广播类型,广播本地地址类型,广播channel map,广播过滤策略,定向地址类型,定向地址)
    btcore.setbeacondata("AB8190D5D11E4941ACC442F30510B408",10107,50179) --beacon设置  (uuid,major,minor),默认公司为 Microsof
    -- btcore.setadvdata(string.fromHex("0201061AFF06000215AB8190D5D11E4941ACC442F30510B408277BC403C5")) --通过设置广播包接口设置 beacon, Microsof 公司
    -- btcore.setadvdata(string.fromHex("0201061AFF4C000215AB8190D5D11E4941ACC442F30510B408277BC403C5")) -- 通过设置广播包接口设置 beacon,公司修改为 apple
    btcore.advertising(1)-- 打开广播
end

API 说明

  1. 我们可以阅读 合宙官方 API 介绍文档:BLE 蓝牙功能 文档得知相关 API 的使用方法。

参考

  1. 合宙官方 API 介绍文档:BLE 蓝牙功能
  2. ibeacon 例程
  3. Air724UG LuatOS固件版本 说明
  4. 合宙 ibeacon 介绍
  5. ESP32 Bluedroid 篇(1)—— ibeacon 广播

网站公告

今日签到

点亮在社区的每一天
去签到