Plugin.BlueZ 5.64.0

建议的替代方案

Linux.Bluetooth

其他详情

Plugin.BlueZ 包不再维护,已迁移至 Linux.Bluetooth。仍然由苏斯实验室和泽诺创新提供!

dotnet add package Plugin.BlueZ --version 5.64.0                
NuGet\Install-Package Plugin.BlueZ -Version 5.64.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Plugin.BlueZ" Version="5.64.0" />                
对于支持 PackageReference 的项目,将此 XML 节复制到项目文件中,以引用包。
paket add Plugin.BlueZ --version 5.64.0                
#r "nuget: Plugin.BlueZ, 5.64.0"                
#r 指令可用于 F# Interactive 和多语言笔记本。将其复制到交互式工具或脚本的源代码中,以引用包。
// Install Plugin.BlueZ as a Cake Addin
#addin nuget:?package=Plugin.BlueZ&version=5.64.0

// Install Plugin.BlueZ as a Cake Tool
#tool nuget:?package=Plugin.BlueZ&version=5.64.0                

Linux 蓝牙与 Plugin.BlueZ

使用 BlueZ 的 D-Bus API 的 Linux .NET Bluetooth LE 库。

Plugin.BlueZ NuGet Badge

该库使用 Tmds.DBus 访问 Linux 的 D-Bus,这是用户空间中蓝牙的首选接口。

要求

  • Linux
  • BlueZ 的最新版本。此包与 BlueZ 5.50 进行了测试。您可以使用 bluetoothd -v 检查正在使用哪个版本。

支持的发行版

Plugin.BlueZ 旨在支持同时支持 .NET 和 BlueZ 的 Linux 发行版。官方上,此 NuGet 包仅在 Ubuntu 20.04 上进行了测试。

支持的 BlueZ 发行版列表

  • Ubuntu Linux
  • Raspbian (树莓派)
  • Debian GNU/Linux
  • Fedora Core / Red Hat Linux
  • OpenSuSE / SuSE Linux
  • Mandrake Linux
  • Gentoo Linux
  • Chrome OS

安装

dotnet add package Plugin.BlueZ

使用

C# 事件可用于多个属性。事件对于正确处理断开和重连非常有用。

获取蓝牙适配器

using Plugin.BlueZ;
...
IAdapter1 adapter = (await BlueZManager.GetAdaptersAsync()).FirstOrDefault();

或获取特定适配器

IAdapter1 adapter = await BlueZManager.GetAdapterAsync(adapterName: "hci0");

扫描蓝牙设备

adapter.DeviceFound += adapter_DeviceFoundAsync;

await adapter.StartDiscoveryAsync();
...
await adapter.StopDiscoveryAsync();

获取设备

adapter.DeviceFound(上方)会立即对现有设备进行调用,并在扫描过程中出现新设备时调用;可以使用 eventArgs.IsStateChange 来区分现有设备和新设备。或者您可以选择使用 GetDevicesAsync

IReadOnlyList<Device> devices = await adapter.GetDevicesAsync();

连接到设备

device.Connected += device_ConnectedAsync;
device.Disconnected += device_DisconnectedAsync;
device.ServicesResolved += device_ServicesResolvedAsync;

await device.ConnectAsync();

或者,您可以等待“已连接”和“服务已解析”都等于true

TimeSpan timeout = TimeSpan.FromSeconds(15);

await device.ConnectAsync();
await device.WaitForPropertyValueAsync("Connected", value: true, timeout);
await device.WaitForPropertyValueAsync("ServicesResolved", value: true, timeout);

获取GATT服务和特性

先决条件:您必须连接到设备,并且服务必须已解析。您可能需要与设备配对才能使用某些服务。

使用GATT设备信息服务UUID的示例。

string serviceUUID = "0000180a-0000-1000-8000-00805f9b34fb";
string characteristicUUID = "00002a24-0000-1000-8000-00805f9b34fb";

IGattService1 service = await device.GetServiceAsync(serviceUUID);
IGattCharacteristic1 characteristic = await service.GetCharacteristicAsync(characteristicUUID);

读取GATT特性值

byte[] value = await characteristic.ReadValueAsync(timeout);

string modelName = Encoding.UTF8.GetString(value);

订阅GATT特性通知

characteristic.Value += characteristic_Value;
...

private static async Task characteristic_Value(GattCharacteristic characteristic, GattCharacteristicValueEventArgs e)
{
  try
  {
    Console.WriteLine($"Characteristic value (hex): {BitConverter.ToString(e.Value)}");

    Console.WriteLine($"Characteristic value (UTF-8): \"{Encoding.UTF8.GetString(e.Value)}\"");
  }
  catch (Exception ex)
  {
    Console.Error.WriteLine(ex);
  }
}

提示

可能需要与设备配对,以便GATT服务可见或读取GATT特性正常工作。为了配对,一个选项是运行bluetoothctl(或sudo bluetoothctl),然后在bluetoothctl中运行default agentagent on。在bluetoothctl中查看配对请求。

参阅Ubuntu配对简介

BluetoothCtl辅助工具

从命令行,使用bluetoothctl或蓝牙管理器扫描并检索设备UUID和服务,以协助调试。

$ bluetoothctl

; Scan for devices
scan on

; Stop Scanning
scan off

; List known devices
devices

生成

使用Tmds.DBus.Tool生成D-Bus对象接口。

贡献

参阅贡献指南

产品 兼容的和额外的计算目标框架版本。
.NET net5.0已计算。 net5.0-windows已计算。 net6.0已计算。 net6.0-android已计算。 net6.0-ios已计算。 net6.0-maccatalyst已计算。 net6.0-macos已计算。 net6.0-tvos已计算。 net6.0-windows已计算。 net7.0已计算。 net7.0-android已计算。 net7.0-ios已计算。 net7.0-maccatalyst已计算。 net7.0-macos已计算。 net7.0-tvos已计算。 net7.0-windows已计算。 net8.0已计算。 net8.0-android已计算。 net8.0-browser已计算。 net8.0-ios已计算。 net8.0-maccatalyst已计算。 net8.0-macos已计算。 net8.0-tvos已计算。 net8.0-windows已计算。
.NET Core netcoreapp2.0已计算。 netcoreapp2.1已计算。 netcoreapp2.2已计算。 netcoreapp3.0已计算。 netcoreapp3.1已计算。
.NET Standard netstandard2.0兼容。 netstandard2.1已计算。
.NET Framework net461已计算。 net462已计算。 net463已计算。 net47已计算。 net471已计算。 net472已计算。 net48已计算。 net481已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
关于目标框架和 .NET 标准的更多信息,请访问 目标框架.NET 标准文档.

NuGet 包

此包不被任何 NuGet 包使用。

GitHub 仓库

此包不被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
5.64.0 2,061 7/26/2022 5.64.0 由于不再维护,已被弃用。
5.53.1 495 4/27/2022
1.5.0 1,963 3/15/2022
1.4.1 425 3/10/2022