【问题标题】:Broadcasting message in Bluetooth low energy mode蓝牙低功耗模式下的广播消息
【发布时间】:2015-01-07 07:12:44
【问题描述】:

法官大人:

我想知道如何在 BLE(蓝牙低功耗模式)下广播消息。

这种行为就像 Macintosh 中的 iBeacon。

据我所知,windows(7 或 8)不支持此功能。

但是 linux 可以。

任何人都可以指导/提示我在 linux 中实现这一目标的方法吗?

通过命令行或代码都可以,两者都很好。

也就是说,x86-linux 广播一条消息,比如:“我是笔记本电脑”

我可以使用其他设备(电话/计算机..等)来接收此消息。

感谢您的帮助。

【问题讨论】:

  • 这很有用,谢谢。但是如何在 C 代码中实现相同的目标呢? hciconfig 和 hcitool 的源代码非常繁琐。你能指导我应该使用什么 API 吗?

标签: linux bluetooth bluetooth-lowenergy ibeacon


【解决方案1】:

您可以使用 BlueZ 堆栈在 Linux 中宣传 BLE 设备。有关如何执行此操作的基础知识,请参阅此问题:

Use BlueZ Stack As A Peripheral (Advertiser)

根据您要宣传的内容,您需要弄清楚广告中字节的格式。以下是如何使用 BlueZ 传输开源 AltBeacon 广告格式的示例:https://github.com/RadiusNetworks/altbeacon-reference/blob/master/altbeacon_transmit

【讨论】:

    【解决方案2】:

    第 0 步:

    (如果你有mac,请下载mactsAsBeacon进行验证)

    在您的 android/iOS 手机中下载 iBeacon 扫描仪。

    第 1 步:

    这是我的 shell 脚本:

    #!/bin/bash
    set -x
    
    export BLUETOOTH_DEVICE=hci0
    #sudo hcitool -i hcix cmd <OGF> <OCF> <No. Significant Data Octets> <iBeacon Prefix>    <UUID> <Major> <Minor> <Tx Power> <Placeholder Octets>
    
    #OGF = Operation Group Field = Bluetooth Command Group = 0x08
    #OCF = Operation Command Field = HCI_LE_Set_Advertising_Data = 0x0008
    #No. Significant Data Octets (Max of 31) = 1E (Decimal 30)
    #iBeacon Prefix (Always Fixed) = 02 01 1A 1A FF 4C 00 02 15
    
    export OGF="0x08"
    export OCF="0x0008"
    export IBEACONPROFIX="02 01 1A 1A FF 4C 00 02 15"
    #export UUID="92 77 83 0A B2 EB 49 0F A1 DD 7F E3 8C 49 2E DE"
    export UUID="B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D"
    export MAJOR="01 02"
    export MINOR="03 04"
    export POWER="C5 00"
    
    sudo hciconfig $BLUETOOTH_DEVICE up
    sudo hciconfig $BLUETOOTH_DEVICE noleadv
    sudo hciconfig $BLUETOOTH_DEVICE noscan
    sudo hciconfig $BLUETOOTH_DEVICE leadv 3
    sudo hcitool -i $BLUETOOTH_DEVICE cmd 0x08 0x0008 $IBEACONPROFIX $UUID $MAJOR $MINOR $POWER
    
    #sudo hciconfig $BLUETOOTH_DEVICE leadv 3
    

    第 2 步:

    运行这个脚本,你会发现你手机上的iBeacon扫描仪已经找到了linux ibeacon发射器。

    如果您想关闭广播:

    sudo hciconfig hci0 noleadv
    

    【讨论】:

      【解决方案3】:

      导出 IBEACONPROFIX="02 01 1A 1A FF 4C 00 02 15"

      是正确的,但可以进一步分为蓝牙 HCI 数据和苹果专有数据:

      根据蓝牙核心规范补充的 3 字节标志

      02 : 长度 (1)

      01 : 输入“标志”

      1A : 标志值

      随后是供应商专有数据

      1A :专有有效载荷的长度 (1),此处 0x1A == 26:5 字节 iBeacon 标头 + 21 个 iBeacon 有效载荷数据

      FF : 专有数据指标 (1)

      4C 00:公司 ID (2),Apple

      02 : iBeacon 类型

      15 : iBeacon 数据长度 (1) 0x15 == 21: 16 字节 UUID,2 字节主要,2 字节 次要,1 字节 TX 功率

      https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/

      https://www.bluetooth.com/specifications/bluetooth-core-specification/

      【讨论】:

        猜你喜欢
        • 2013-11-13
        • 2019-02-21
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多