Linux.Bluetooth 5.66.0

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

// Install Linux.Bluetooth as a Cake Tool
#tool nuget:?package=Linux.Bluetooth&version=5.66.0                

.NET 的 Linux Bluetooth 库

公告

Plugin.BlueZ 库的下一代!

.NET 的 Linux.Bluetooth 库让开发者能够以极低的代价快速搭建并与 Linux 的 BLE 无线电接口。无需记住繁琐的 D-Bus API 调用,我们将处理这些调用。

Linux.Bluetooth NuGet Badge

Debugging Image

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

查看 SuessLabs 关于使用 Plugin.BlueZ 的文章

要求

  • Linux
  • .NET 6, 7 或 8

抱歉,不支持的较旧版本 Mono (.NET Framework)。

此项目已针对 BlueZ v5.50 以及更高版本进行验证。您可以使用 bluetoothd -v 检查您正在使用的版本。

支持的发行版

Linux.Bluetooth 致力于支持同时支持 .NET 和 BlueZ 的 Linux 发行版。官方上,此 NuGet 包已针对 Ubuntu 20.04 LTS 进行了测试。

BlueZ 支持的发行版列表

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

安装

dotnet add package Linux.Bluetooth

使用方法

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

获取一个蓝牙适配器

using Linux.Bluetooth;
...
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();

或者,您可以等待“已连接”和“服务解决”变为真值

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

贡献

贡献

即将推出

  • 弃用Linux.Bluetooth.Extensions。现在它将只是Linux.Bluetooth命名空间。

参考

赞助商:Suess Labs,系Xeno Innovations, Inc的子公司。

产品 兼容和额外的计算目标框架版本。
.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 Standard的更多信息。

NuGet 包 (2)

显示依赖于 Linux.Bluetooth 的前 2 个 NuGet 包

下载
InTheHand.Net.Bluetooth

32feet.NET 是一个开源项目,旨在通过 .NET 代码轻松访问个人区域网络技术,如蓝牙。

InTheHand.BluetoothLE

32feet.NET 是一个开源项目,旨在通过 .NET 代码轻松访问个人区域网络技术,如蓝牙。

GitHub 存储库 (1)

显示依赖于 Linux.Bluetooth 的最热门的 1 个 GitHub 存储库

存储库 星星数
inthehand/32feet
.NET 的个人区域网络。开源且提供专业支持
版本 下载 最后更新
5.66.0 36,600 1/11/2024
5.64.0 12,052 7/26/2022

升级 DBus 支持。