BLE value_change

时间:2018-05-25 05:27:25

标签: c# uwp bluetooth-lowenergy

private async void Characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
        {
            // BT_Code: An Indicate or Notify reported that the value has changed.
            // Display the new value with a timestamp.
            var newValue = FormatValueByPresentation(args.CharacteristicValue, presentationFormat);
            var message = $"Value at {DateTime.Now:hh:mm:ss}: {newValue}";
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                () => CharacteristicLatestValue.Text = message);
        }

这是价值变动的设定。 ^

 private async void CharacteristicReadButton_Click()
        {
             // BT_Code: Read the actual value from the device by using Uncached.
            GattReadResult result = await selectedCharacteristic.ReadValueAsync(BluetoothCacheMode.Uncached);
            if (result.Status == GattCommunicationStatus.Success)
            {
                string formattedResult = FormatValueByPresentation(result.Value, presentationFormat);

                rootPage.NotifyUser($"Read result: {formattedResult}", NotifyType.StatusMessage);
            }
            else
            {
                rootPage.NotifyUser($"Read failed: {result.Status}", NotifyType.ErrorMessage);
            }     


        }

这是一个阅读价值的设置。所以当我点击“阅读”按钮时。它捕获那个时刻的数据。但是我想要在值改变时刷新这些数据,所以我订阅了值更改。 现在的问题是,点击订阅后,所有内容都是“未知格式”。所以我需要弄清楚如何更改格式以读取我的rfduino值。

按下“读取”按钮: enter image description here

订阅“按下按钮enter image description here

“订阅”按钮“

2 个答案:

答案 0 :(得分:0)

如果您的数据采用未知格式,则很难从中获得一些有用的信息 以Hex String格式读取原始数据您必须更改Scenario2_Client.xaml.cs中的最后一行, FormatValueByPresentation(IBuffer buffer,GattPresentationFormat格式)

 return "Unknown format";

为:

return "Unknown format: " + BitConverter.ToString(data); 

或:

var result = data.Aggregate(string.Empty, (s, i) => s + i.ToString());//add using System.Linq
         return "Unknown format: " + result;  

答案 1 :(得分:0)

我也遇到过这个问题;看起来数据“格式”为空。这可能是由于BLE设备的配置错误。我不知道-我不是BLE专家。它只是用于创建到串行端口的无线链接的廉价设备。串行端口上接收的任何8位ASCII字符均按原样发送到订阅的客户端。

我在FormatValueByPresentation()函数的末尾添加了以下内容:

    try
    {
        return Encoding.UTF8.GetString(data);
    }
    catch (ArgumentException)
    {
        return "(error: Invalid UTF-8 string)";
    }

...而不是:

 return "Unknown format";

然后正确格式化来自串行设备的数据。希望这会有所帮助!