Plugin.BlueZ 5.64.0
Plugin.BlueZ 包不再维护,已迁移至 Linux.Bluetooth。仍然由苏斯实验室和泽诺创新提供!
dotnet add package Plugin.BlueZ --version 5.64.0
NuGet\Install-Package Plugin.BlueZ -Version 5.64.0
<PackageReference Include="Plugin.BlueZ" Version="5.64.0" />
paket add Plugin.BlueZ --version 5.64.0
#r "nuget: Plugin.BlueZ, 5.64.0"
// 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 库。
该库使用 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 agent
和agent 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 已计算。 |
-
.NETStandard 2.0
- Tmds.DBus (>= 0.11.0)
NuGet 包
此包不被任何 NuGet 包使用。
GitHub 仓库
此包不被任何流行的 GitHub 仓库使用。