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

问题描述 投票:6回答:4

我正在尝试在我的Linux机器上使用GATT来设置具有大量特征的自定义服务。

使用this question及其链接的那些,我能够识别出我需要编写的代码(利用gatt_service_add()函数)。

我创建了一个名为gatt_service.c的独立文件,并编写了我认为我需要的代码。但是,我无法弄清楚如何将我的代码链接到Bluez库以编译和运行我的解决方案。例如this site(虽然不是用于BLE开发)使用-lbluetooth作为gcc参数链接libbluetooth,我无法找出要链接的内容以使我的代码工作。

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

提前致谢。

编辑 - 更多信息:

在评论之后,我使用插件/时间作为基础为我自己的“Broadcaster服务”编写我自己的文件。完整代码位于:here(我不知道在答案中放入哪些代码!)。

我的编译命令是: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位来修复报告here的问题)。

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

我的C文件存储在Documents中,我的研究告诉我它找不到lib / bluetooth.h,因为它没有找到正确的位置(thisthis谈论在文件不是时使用包含标志的编译器在一般的位置,但我无法做到这一点。

再次感谢!

linux bluetooth-lowenergy bluez gatt
4个回答
12
投票

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

我的环境: 流浪汉 虚拟盒子 Ubuntu Trusty Tahr作为客户操作系统(v.14.04 32位操作系统) 更新到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 --install-recommended linux-generic-lts-vivid

需要重新启动。我正在使用Vagrant并丢失共享文件夹访问权限。如果你遇到这种情况,请等待vagrant报告错误然后进入VM(vagrant ssh)。在VM中,发出此命令以修复共享文件夹问题: sudo /etc/init.d/vboxadd setup

我会重新启动(可能没有必要),以检查共享文件夹是否再次处于活动状态。 返回VM后,继续安装BlueZ 5.31: cd~ sudo apt-get install 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 = / etc --localstatedir = / var --disable-systemd --enable-experimental --enable-maintainer-mode 使 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断电 sudo tools / btmgmt -i hci0 le on sudo tools / btmgmt -i hci0可连接 sudo tools / btmgmt -i hci0 name“some friendly name” sudo tools / btmgmt -i hci0广告 sudo tools / btmgmt -i hci0开机 tools / btgatt-server -i hci0 -s low -t public -r -v

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

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

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


2
投票

1)转到Bluez文件夹

2)sudo ./configure --prefix = / usr --mandir = / usr / share / man --sysconfdir = / etc --localstatedir = / var --disable-systemd --enable-experimental --enable-maintainer-模式

3)sudo make all

4)通告可连接的数据包

activate bluetooth

sudo hciconfig hci0 up

set advertise data: "hello world"

sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44

start advertising as connectable

sudo hciconfig hci0 leadv 0

5)sudo服务蓝牙停止

6)sudo src / bluetoothd -d -n

7)从其他PC输入(更改MAC id gatt服务器mac)

gatttool -b gatt_server_mac --interactive

第6步是为了你想要编译插件/ gatt-example.c

如果你想从profile / time或profile / alert编译server.c(用alert取代时间)或profile文件夹中的另一个文件替换step 6

sudo src / bluetoothd --plugin = time -n


1
投票

你创建一个时间服务器是好的开始.profile / time有很好的自定义示例,清理代码并尝试维护一个最小的代码并使用gatttool作为客户端运行。如果你想要一个自定义客户端和自定义服务器,你可以请参阅tools / btgatt-client.c和tools / btgatt-server.c。

在一台电脑中运行tools / btgatt-server.c,在一台电脑中使用sudo ./btgatt-server

和sudo ./btgatt-client -d server_mac在另一台电脑上


1
投票

在我为C搜索一个独立的GATT服务器时,我几次登陆这个问题。这里的答案需要使用BlueZ堆栈构建GATT服务器。 BlueZ增加了D-Bus支持以允许独立的GATT服务器,甚至还包括一个用于Python的独立示例GATT服务器,但不包括C.

仍然需要服务器,我开始研究一个旨在发布样本的服务器,但即使是最小的实现仍然比我调用样本的代码更多。

最初的实现现已完成,并已在LGPL下发布(编辑:许可证已从GPL-3更改为LGPL):

https://github.com/nettlep/gobbledegook

如果它对某人有帮助,那就很酷。如果它能帮助那些发布了帮助我的代码的人,那就更好了。

© www.soinside.com 2019 - 2024. All rights reserved.