首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择性地连接到特定外围设备上的蓝牙服务

选择性地连接到特定外围设备上的蓝牙服务
EN

Stack Overflow用户
提问于 2020-11-14 06:28:16
回答 2查看 319关注 0票数 1

我的(室内自行车)智能教练机和曲柄电能表(单独)广告中的一些服务

室内教练:

代码语言:javascript
运行
复制
Primary - Service        - Cycling Power Service (1818)
        - Characteristic - Cycling Power

Primary - Service        - Fitness Control (FTMS)
        - Characteristic - Cycling Power
                         - Trainer Target Power (from user)

曲柄功率计:

代码语言:javascript
运行
复制
 Primary - Service        - Cycling Power Service (1818)
         - Characteristic - Cycling Power

随着自行车动力服务(1818),它广告传输的电力数据,但没有办法控制教练员的阻力。

使用FTMS,它宣传发送的功率,并有一种方法向其发送目标功率(教练机阻力控制)。

当CoreBluetooth连接到我的室内教练设备时,它(我的当前代码)将自动列出这两个服务并连接到它。(这不是我想要的)

当然,当我连接到室内教练时,我可以取消自行车动力(1818)服务,但这是不想要的,因为这将消除任何连接到只提供自行车动力服务的其他外围设备的能力。

代码语言:javascript
运行
复制
var services = [serviceHeartRateCBUUID,
                serviceCyclingSpeedAndCadenceUUID,
                serviceCyclingPowerUUID, 
                serviceFTMSUUID]

centralManager.scanForPeripherals(withServices: services)

扫描后,我连接到外围设备&发现它使用它提供的服务(传递我感兴趣的服务列表,其中再次包括FTMS和Cycling服务),这样,我最终获得到室内培训器的w/ 2连接(而不是我想要的1)。

代码语言:javascript
运行
复制
 peripheral.discoverServices(services)

的问题:,我正在寻找的解决方案是能够只连接,在室内培训器上连接FTMS服务,同时也能够连接到曲柄电表。

我想的解决办法基本上是让用户在FTMS和自行车电能表之间选择一个开关,因此如果用户同时有一个室内培训器和一个曲柄电能表。

搜索堆栈溢出和护目镜并没有给我带来任何有用的信息,它们都只是展示了如何连接到服务(如上面的示例一样,在" services“变量中列出)。

更新1:

代码语言:javascript
运行
复制
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    guard let services = peripheral.services else { return }
    
    for service in services {
      print("  >> Discover Services Found : \(service.uuid) service")
      peripheral.discoverCharacteristics(nil, for: service)
    }
  }

在didDiscoverServices func中,通过服务循环找到以下2

代码语言:javascript
运行
复制
>> Discover Services Found : 1818 service
>> Discover Services Found : FTMS service

之后,它调用peripheral.discoverCharacteristics(nil, for: service)

我如何使用来自didDiscoverServices的信息(一旦它检测到FTMS和1818)而实际上忽略了1818年?

EN

Stack Overflow用户

发布于 2020-11-14 06:42:33

假设电能表和室内教练机是两个独立的蓝牙设备,那么就不会有任何问题了。

BLE的工作方式是,中心连接到外围设备,然后您可以在该外围设备上发现服务,并使用/不使用任何您想使用的服务。

所以,你可以继续扫描你想要的所有外围设备(不管他们做什么广告),然后连接,发现服务/特性--然后利用你想要的任何组合/排列。

如果您有兴趣节省一点能量,或者在连接到外围设备时清理代码,您可以有选择地使用discoverServices (https://developer.apple.com/documentation/corebluetooth/cbperipheral/1518706-discoverservices) --基本上可以这样处理服务过滤。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64831500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档