当前位置: 首页 > 面试题库 >

C语言中的低功耗蓝牙-使用Bluez创建GATT服务器

符佐
2023-03-14
问题内容

我试图在Linux机器上使用GATT来设置具有许多特征的自定义服务。

使用[这个问题及其链接的问题,我能够识别出我需要编写的代码(利用该gatt_service_add()函数)。

我创建了一个单独的文件gatt_service.c,并编写了我认为需要的代码。但是,我无法解决如何将我的代码链接到Bluez库以编译和运行我的解决方案。例如,此站点(并非用于BLE开发)使用-lbluetoothgcc参数链接到libbluetooth
,而我无法确定要链接的内容以使我的代码正常工作。

我没有发布任何示例,因为我不确定要发布什么内容-如果有任何要求,或者我没有提及任何内容,请告诉我。

提前致谢。

编辑-更多信息:

在评论之后,我以plugins / time为基础为我自己的“
Broadcaster服务”编写了自己的文件。完整代码位于:此处(我不知道在答案中放哪一部分代码!)。

我的编译命令是:(gcc gatt_broadcaster_service.c -Wall -o gatt_broadcaster_service -lbluetooth 'pkg-config --cflags --libs glib-2.0' -I/home/alexander/Documents/bluez-5.29/lib包括glib位来解决此处报告的问题)。

我得到的错误是:gatt_broadcaster_service.c:11:27:致命错误:lib /
bluetooth.h:没有这样的文件或目录#include“ lib / bluetooth.h”

我的C文件存储在文档,我的研究告诉我,它无法找到的lib /
bluetooth.h因为它不是在正确的位置看这和使用包括编译器标志当一个文件是不是在一般地点,但我无法做到这一点。

再次感谢!


问题答案:

我得到了运行BlueZ 5.31的示例GATT服务器(截至本文的最新信息):

我的环境: 作为来宾OS(版本14.04 32位操作系统)的
Vagrant
Virtual Box
Ubuntu Trusty Tahr
更新到linux内核3.19
已安装的软件包:
libglib2.0-dev
libdbus-1-dev
libudev-dev
libical-dev
* libreadline-dev

从此处下载BlueZ
5.31:https :
//www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
安装更新的内核(v.3.19):
sudo apt-get update
sudo apt-get install- -建议安装linux-generic-lts-vivid

必须重新启动。我正在使用Vagrant,并且失去了共享文件夹的访问权限。如果您遇到这种情况,请等待流浪者报告错误并以任何方式进入VM(流浪ssh)。在VM中,发出以下命令来解决共享文件夹问题:
sudo /etc/init.d/vboxadd setup

我将再次重新启动(可能没有必要),以检查共享文件夹是否再次处于活动状态。
一旦在VM回来,继续5.31的BlueZ的安装
CD〜
命令和apt-get安装libglib2.0-dev的libdbus-1-dev的libudev-dev的libical-dev的libreadline-
dev的
wget的https://www.kernel.org/ pub / linux / bluetooth /
bluez-5.31.tar.xz
tar xvf bluez-5.31.tar.xz
cd bluez-5.31
./configure –prefix = / usr –mandir = / usr / share / man –sysconfdir = /等
–localstatedir = / var –disable-systemd –enable-experimental –enable-
maintainer-mode
make
sudo make install
sudo cp attrib / gatttool / usr / bin

安装完成。进行如下检查:
hciconfig
您应该得到以下响应(或类似的响应):
hci0:类型:BR / EDR总线:USB
BD地址:00:1A:7D:DA:71:0C ACL MTU:310:10 SCO MTU :64:8
向下
RX字节:15528 acl:126 sco:0事件:683错误:0
TX字节:6459 acl:146 sco:0命令:234错误:0

配置蓝牙适配器,启动广告,启动示例示例GATT服务器(心率服务),​​并启用详细信息(我的适配器为hci0):
cd BlueZ 5.31目录
sudo tools / btmgmt -i hci0 power
sudo tools / btmgmt -i hci0 le on
sudo工具/ btmgmt -i hci0连接上
须藤工具/ btmgmt -i hci0名“ 一些友好名称
须藤工具/上btmgmt -i hci0广告
上须藤工具/ btmgmt -i hci0动力
工具/ btgatt服务器-i hci0 -s低-t公共-r -v

转到另一台设备(我使用的是iPod,Android –三星Galaxy
5S和Nexus平板电脑–以及另一台运行BlueZ的PC)并连接到该服务。这是我在另一台运行BlueZ的PC上执行的操作:
gatttool -b GATT服务器的MAC地址 -我
连接
主要
特征

您可以发出其他命令来读写GATT服务器。

我还通过复制和编辑以下文件创建了一个自定义GATT服务器(您的原始请求): tools / btgatt-server.c
。您可以编辑Makefile.tools文件,以将自定义服务器包括在构建中。您必须运行automake,make和sudo make
install才能使其运行。



 类似资料:
  • jd.readBLECharacteristicValue(Object object) 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。 参数名 类型 默认值 必填 说明 deviceId string 是 蓝牙设备 id serviceId string 是 蓝牙特征值对应服务的 uuid characteristicId string 是 蓝牙

  • 运行后,Android部分返回connection be success(BluetoothGattCallback::onConnectionStateChange的参数为STATE_CONNECTED),但是linux中的程序(btgatt-server)没有得到任何响应,仍然阻止等待接受。(第485行)。 我还使用了另一个示例代码:l2cap-ble.c,结果完全相同。 有人能帮我吗?我的目

  • 我扩展插件/gatt_example. c在Bluez源尝试BLE通知功能没有成功。我正在使用Bluez源中包含的电池服务示例。它具有1个具有READ和NOTIFY属性的特性。我添加dbus方法来调用attrib_db_update()来从蓝牙守护进程外部更新特征值。 现在,我可以连接哪个客户端(带有Android 4.3的Nexus4和iPhone(不含LightBlue的应用程序))并启动通知

  • 问题内容: 我正在与Linux一起使用低功耗蓝牙调制解调器。我为此使用命令行选项。我可以使用以下命令找到设备: 它对我来说很好用,也可以使用以下方式广播设备: 它也工作正常。但是我想向调制解调器设备添加可以被其他设备检测到的服务和特性。我已经尝试过了,但是对我不起作用。有谁知道如何使用ubuntu中的命令行工具向外围设备添加服务和特性? 编辑: 我的调制解调器正在广播,但无法探索其他BLE设备的服

  • 我正在考虑为一个定制应用程序实现一些GATT服务,但我现在正忙于研究。我知道服务UUID不是随机的,有些部分定义得很好,有些部分仍然让我困惑。 E、 g.设备信息服务的广告名称似乎是0000180a xxx,我可以在中找到“180a”https://www.bluetooth.com/specifications/gatt/services/,但子字段“型号字符串”的id为00002a24 xxx

  • 首先,BLE外设模拟器的源代码对于任何研究Web蓝牙的人来说都是一个巨大的资源。 有一份经批准的关贸总协定服务清单。 当我修改Android源代码以使用自定义的GATT服务(只需在Android代码中指定自己的UUID即可轻松完成)时,从网页到运行GATT服务器的Android应用程序的配对失败。 Web蓝牙留档确实声明,“如果设备通告的服务UUID与服务UUID集有非空交集,请添加设备以产生结果