【发布时间】:2015-02-05 01:31:05
【问题描述】:
我正在尝试使用 Adafruit Bluefruit LE(蓝牙 4 模块)与 arduino 通信,一切都已设置并配对等等,但我的 GattCharacteristic 上的 ValueChanged 事件遇到问题,它在之后停止触发大约在 30 到 40 次之间。
下面是这个的设置代码:
public class Bluetooth
{
async public void Initialize()
{
var devices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(new Guid("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")), null);
GattDeviceService firstService = await GattDeviceService.FromIdAsync(devices[0].Id);
GattCharacteristic rxCharacteristic = firstService.GetCharacteristics(new Guid("6E400003-B5A3-F393-E0A9-E50E24DCCA9E")).First();
await rxCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
rxCharacteristic.ValueChanged += rxCharacteristicValueChanged;
}
private void rxCharacteristicValueChanged(GattCharacteristic characteristic, GattValueChangedEventArgs e)
{
Console.WriteLine(e.CharacteristicValue.ToArray()[6]);
}
}
我需要清除某种缓冲区或类似的东西吗?它看起来不像它的缓冲区相关,因为如果我将发送的数据减半,我不会得到两次调用,但我可能是错的。 Arduino 报告它仍在发送数据(通过串行链接,我可以看到蓝牙库仍在尝试发送数据,无论如何。我不确定如何验证数据是否实际被发送)
我们将不胜感激任何帮助,甚至是关于检查事项的建议。
【问题讨论】:
-
你的程序还有什么?请显示可靠地证明问题的a minimal, complete code example。对于它的价值,我做了类似的事情,并且没有注意到通知中有任何中断,即使在很长一段时间之后也是如此。在我的代码中,我确实在更改配置之前而不是之后订阅了
ValueChanged事件,但我不明白为什么这很重要。我能想到的是,在您的程序中,您执行了一些其他代码,这些代码会以某种方式干扰/禁用通知。 -
@PeterDuniho 代码中不应该有任何其他干扰。这是一个相当标准的 openTK 设置。我将努力获得一个最小的示例,但我这里有大量不相关的代码,因此可能需要一些时间。
-
@PeterDuniho 好吧,这很奇怪,注释掉了相当多的代码,现在它可以工作了。这里不应该有任何干扰。我猜那是消除的过程。
-
是的……这是一个最小的、完整的代码示例的主要价值。它迫使你经历消除的过程。如果做得正确,它通常会导致有问题的人自己解决问题。在那些没有的情况下,那么您至少会得到一个很好的代码示例来提出您的问题,并且您的问题可以比“为什么这不起作用”更具体,即您可以准确地指向导致问题的代码部分并寻求该部分的帮助。
-
@leppie 你是一位绅士和学者,这就是问题所在。让它成为一个答案,我会接受它。
标签: c# bluetooth-lowenergy gatt