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值。
“订阅”按钮“
答案 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";
然后正确格式化来自串行设备的数据。希望这会有所帮助!