• Goal:使用BlueZ和蓝牙4LE加密狗创建一个外设,宣传相当于"Hello World"的蓝牙功能.

  • Where I'm At:我目前已经安装并下载了BlueZ stack,我可以使用hci工具识别和查看蓝牙加密狗.我已经修改了hciconfig leadv,但我只是不太了解它/了解发生了什么.

  • What Help I Think I Need:我需要进入下一步.如果有人能给我指出一个好的资源,带我走过这条路,或者做任何事情,我将不胜感激.如果我需要做额外的腿部(搜索)工作,我可以,但我已经搜索了谷歌,以及我能想到的关于这个问题的各种衍生工具.

*我还将其标记为CoreBooth,希望iOS开发人员能在某个时候对其进行修补.

编辑:作为对 comments 的回应,陈述我的最终目标似乎是明智的.我最终想通过加密狗宣传最简单的消息/信号,并在iOS设备(CoreBluetooth)上获取.我已经能够让iOS端的东西运行良好(与Linux端的东西相比,有大量文档),但对我来说,最困难的部分是将这个适配器设置为外设.BlueZ堆栈对我来说是一个可怕的谜.

编辑:经过更多的挖掘,我最终发现了这个帖子:Raspberry Pi Bluetooth 4.0 Connection.

编辑:好吧,我对学习的追求还在继续.在过go 的几天里,我深入研究了hci*、sdptool和gatttool工具.我已经能够将适配器设置为广告"hciconfig hci0 leadv".此时,我可以成功地"看到"适配器,但实际上无法从中读取任何内容.我甚至没有看到这个友好的名字.我会继续开卡车,但一如既往,欢迎提供任何帮助/建议.

编辑:相关链接,有关iOS的蓝牙LE的详细概述.

最后一次编辑:大家好,这个链接介绍了如何使用树莓Pi+BlueZ创建iBeacon...

推荐答案

插入蓝牙加密狗后,运行以下命令将告诉您设备名称并给出其状态:

$ hciconfig

输出应该如下所示:

hci0:    Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     DOWN
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

这表明被称为hci0的设备处于关闭状态.发出以下命令将其调出:

$ sudo hciconfig hci0 up

现在应该是这样的:

$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     UP RUNNING
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

接下来,执行以下示例命令来配置要发送的广告数据.

$ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

您可以更改十六进制字节(从1e开始),以便为广告发送不同的字节序列.按照字面意思发送"HELLO WORLD"ASCII码的邮件将使用:48 45 4c 4c 4f 57 4f 52 4c 44(EDIT:但您还必须在该邮件前面加上有效的标题,请参见here.)

现在,使用以下命令激活加密狗上的广告,这将开始发送"Helo World"数据包.

$ sudo hciconfig hci0 leadv 0

EDIT:上述命令使播发的服务可连接.如果不想允许连接,请将其更改为$ sudo hciconfig hci0 leadv 3

您还可以使用以下命令禁用广告:

$ sudo hciconfig hci0 noleadv

Linux相关问答推荐

无法下载Centos 7上的存储库的元数据

Arch_prctl的用例是什么

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

如何在脚本中使用sudo修改其他用户的crontab

在 Ubuntu 中,如何设置 Tomcat 9 以使用 Java 17?

如何让 Flutter 用鼠标拖动而不是滚轮滚动? (Linux)

使用 awk 从文件中检索一组特定的字符串

Linux C程序:如何找到函数所属的库

对一行的最后一个字段进行排序

PuTTY:更改默认 SSH 登录目录

如何告诉 CMake 将构建文件放在哪里?

如何从 Linux 中的用户空间访问物理地址?

如何在 Linux 中使用单行命令获取 Java 版本

ctrl-x 在终端中使用时会发送哪个信号?

如何在 Linux 中删除早于特定日期的文件?

区分 Java 线程和 OS 线程?

id_rsa.pub 文件 SSH 错误:格式无效

Linux shell 中的排序和唯一性

如何在 docker 容器中运行 cron 作业(job)

在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab