Bluetooth Zephyr OS:通用可编程API

Bluetooth Zephyr OS:通用可编程API,bluetooth,bluetooth-lowenergy,gatt,zephyr-rtos,Bluetooth,Bluetooth Lowenergy,Gatt,Zephyr Rtos,我正在尝试编写一个小型Zephyr操作系统运行时系统,它使用BLE在我的两块nrf52840dk板之间进行通信。在过去的几天里,我阅读了BLE,并熟悉了GATT服务器/客户端 我希望API看起来像这样: /*向conn发送消息*/ 无效发送(结构bt连接*连接,无效*数据,u16长度); /*从conn接收消息时调用的回调*/ void recv(结构bt连接*连接,void*数据,u16长度); 我所做的是通过将我的系统限制为两个设备来实现类似的功能,一个是GATT服务器,另一个是GATT客

我正在尝试编写一个小型Zephyr操作系统运行时系统,它使用BLE在我的两块nrf52840dk板之间进行通信。在过去的几天里,我阅读了BLE,并熟悉了GATT服务器/客户端

我希望API看起来像这样:

/*向conn发送消息*/
无效发送(结构bt连接*连接,无效*数据,u16长度);
/*从conn接收消息时调用的回调*/
void recv(结构bt连接*连接,void*数据,u16长度);
我所做的是通过将我的系统限制为两个设备来实现类似的功能,一个是GATT服务器,另一个是GATT客户端

服务器公开客户端扫描并订阅的一个属性。服务器可以通过通知客户机属性的更改来“发送”消息给客户机,客户机也可以通过向属性发出写请求来发送消息

客户端可以通过写入属性向服务器发送消息,而服务器可以接收消息,通知其已订阅属性的更新

我认为像这样的原语必须存在于GATT层之下(在HCI层?),但在大多数地方,Zephyr文档是相当稀少的。接下来,我有两个问题

  • 我对BLE的理解是否正确,即BLE设备之间的大多数通信都是通过GATT服务器/客户端关系或BLE网状网络进行的
  • 任何指向我在编写上面描述的更通用的API时可以在何处阅读的信息的指针(或者如果它已经存在,则指向该API的指针)都会很有帮助

编辑:我已经接受了你的答案。他的回答以及下面的评论充分回答了我的问题。

我对BLE的理解正确吗,BLE设备之间的大多数通信都是通过GATT服务器/客户端关系或BLE网状网络进行的?

您是正确的,大多数应用程序都将使用GATT服务器/客户机关系。这是因为当2010年推出蓝牙低能量时(后来在2011年通过CoreBluetooth与iPhone 4s一起推出),这是唯一的通信方式。此后,BLE的后续版本引入了更新的通信方法:-

  • LE L2CAP(在2013年BT v4.1中引入),其中较低级别的通信信道用于快速和直接的数据传输
  • LE Mesh(2017年推出),其中大部分通信基于BLE广告,因此v4.0上的任何设备理论上都可以支持它
这两种方法都存在相对复杂和供应商采用缓慢的问题。因此,我建议继续使用GATT示例/应用程序,直到您更熟悉BLE,然后继续使用其他通信方法

任何指向我在编写上述更通用的API时可以在何处阅读的信息的指针(或者如果已经存在,则指向该API的指针)都会很有帮助。

您可能已经看到了这一点,但西风的设计非常有用。然后,您可以使用一块板和另一块板进行双向通信。完成后,您可以开始定制应用程序以满足您的需求。可以找到所有蓝牙示例的列表

以下是有关西风BLE开发的更多资源:-


我希望这能有所帮助。

我对BLE的理解正确吗?BLE设备之间的大多数通信都是通过GATT服务器/客户端关系或BLE网状网络进行的?

您是正确的,大多数应用程序都将使用GATT服务器/客户机关系。这是因为当2010年推出蓝牙低能量时(后来在2011年通过CoreBluetooth与iPhone 4s一起推出),这是唯一的通信方式。此后,BLE的后续版本引入了更新的通信方法:-

  • LE L2CAP(在2013年BT v4.1中引入),其中较低级别的通信信道用于快速和直接的数据传输
  • LE Mesh(2017年推出),其中大部分通信基于BLE广告,因此v4.0上的任何设备理论上都可以支持它
这两种方法都存在相对复杂和供应商采用缓慢的问题。因此,我建议继续使用GATT示例/应用程序,直到您更熟悉BLE,然后继续使用其他通信方法

任何指向我在编写上述更通用的API时可以在何处阅读的信息的指针(或者如果已经存在,则指向该API的指针)都会很有帮助。

您可能已经看到了这一点,但西风的设计非常有用。然后,您可以使用一块板和另一块板进行双向通信。完成后,您可以开始定制应用程序以满足您的需求。可以找到所有蓝牙示例的列表

以下是有关西风BLE开发的更多资源:-


我希望这能有所帮助。

谢谢您的回复!这就是我所做的,修改了(中央|外围)hr示例。我的主要问题是外围设备如何向单个客户端发送消息?通知订阅方属性的更改将广播该通知。很乐意提供帮助,但不确定我是否理解您的问题。它是连接到外围设备并启用特定特征(例如心率测量特征)通知的中央设备。然后,每当有新的HR读数或在特定的时间间隔内(这取决于应用程序),外围设备都会发送新的HR测量值