ThinkMeta.Devices.Bluetooth.Core.Maui
0.2.0
dotnet add package ThinkMeta.Devices.Bluetooth.Core.Maui --version 0.2.0
NuGet\Install-Package ThinkMeta.Devices.Bluetooth.Core.Maui -Version 0.2.0
<PackageReference Include="ThinkMeta.Devices.Bluetooth.Core.Maui" Version="0.2.0" />
<PackageVersion Include="ThinkMeta.Devices.Bluetooth.Core.Maui" Version="0.2.0" />
<PackageReference Include="ThinkMeta.Devices.Bluetooth.Core.Maui" />
paket add ThinkMeta.Devices.Bluetooth.Core.Maui --version 0.2.0
#r "nuget: ThinkMeta.Devices.Bluetooth.Core.Maui, 0.2.0"
#:package ThinkMeta.Devices.Bluetooth.Core.Maui@0.2.0
#addin nuget:?package=ThinkMeta.Devices.Bluetooth.Core.Maui&version=0.2.0
#tool nuget:?package=ThinkMeta.Devices.Bluetooth.Core.Maui&version=0.2.0
ThinkMeta.Devices.Bluetooth
ThinkMeta.Devices.Bluetooth.Core
ThinkMeta.Devices.Bluetooth.Fitness
ThinkMeta.Devices.Bluetooth.HeartRate
ThinkMeta.Devices.Bluetooth.Core.Windows
ThinkMeta.Devices.Bluetooth.Fitness.Windows
ThinkMeta.Devices.Bluetooth.HeartRate.Windows
ThinkMeta.Devices.Bluetooth.Core.Maui
ThinkMeta.Devices.Bluetooth.Fitness.Maui
ThinkMeta.Devices.Bluetooth.HeartRate.Maui
ThinkMeta.Devices.Bluetooth is a .NET library for discovering, connecting to, and interacting with Bluetooth fitness and heart rate devices. It provides high-level APIs for scanning, connecting, and controlling devices such as treadmills (FTMS) and heart rate monitors.
Features
- Scan for Bluetooth FTMS fitness machines (treadmill, indoor bike, cross trainer, rower, step climber, stair climber)
- Scan for Bluetooth heart rate monitors
- Connect to discovered devices
- Receive real-time data (speed, distance, cadence, power, heart rate, etc.)
- Control supported fitness machines (set speed, inclination, resistance, etc.)
- Shared base classes and parsers for cross-platform reuse
Packages
| Package | Description |
|---|---|
ThinkMeta.Devices.Bluetooth.Core |
Shared base classes (AdvertisementInfoBase, DeviceScannerBase) |
ThinkMeta.Devices.Bluetooth.Fitness |
Shared FTMS data models and parsers (TreadmillData, IndoorBikeData, etc.) |
ThinkMeta.Devices.Bluetooth.HeartRate |
Shared heart rate parsing (HeartRateMeasurementParser) |
ThinkMeta.Devices.Bluetooth.Core.Windows |
Windows BLE scanning and advertisement tracking |
ThinkMeta.Devices.Bluetooth.Fitness.Windows |
Windows FTMS device connection and control |
ThinkMeta.Devices.Bluetooth.HeartRate.Windows |
Windows heart rate monitor connection |
ThinkMeta.Devices.Bluetooth.Core.Maui |
.NET MAUI BLE scanning via Plugin.BLE |
ThinkMeta.Devices.Bluetooth.Fitness.Maui |
.NET MAUI FTMS device connection and control |
ThinkMeta.Devices.Bluetooth.HeartRate.Maui |
.NET MAUI heart rate monitor connection |
Getting Started
Install the platform-specific packages for your target. The shared packages are pulled in automatically as transitive dependencies.
Windows
dotnet add package ThinkMeta.Devices.Bluetooth.Fitness.Windows
dotnet add package ThinkMeta.Devices.Bluetooth.HeartRate.Windows
.NET MAUI
dotnet add package ThinkMeta.Devices.Bluetooth.Fitness.Maui
dotnet add package ThinkMeta.Devices.Bluetooth.HeartRate.Maui
Examples
Scan and Control a Treadmill — Windows
using ThinkMeta.Devices.Bluetooth.Fitness.Windows;
var scanner = new FitnessDeviceScanner();
scanner.DeviceDiscovered += device => {
if (device is FitnessMachineAdvertisementInfo ftms)
Console.WriteLine($"Found: {ftms.Name} ({ftms.MachineTypes})");
};
scanner.StartScanning();
// ... wait for user to pick a device ...
scanner.StopScanning();
// Connect and control
using var treadmill = await FitnessDevice.ConnectAsync(selectedDevice.BluetoothAddress);
treadmill.TreadmillDataChanged += (sender, data) => {
Console.WriteLine($"Speed: {data.InstantaneousSpeed / 100.0} km/h, Distance: {data.TotalDistance} m");
};
await treadmill.RequestControlAsync();
await treadmill.SetTargetSpeedAsync(1000); // 10.00 km/h
Scan and Control a Treadmill — .NET MAUI
using ThinkMeta.Devices.Bluetooth.Fitness.Maui;
var scanner = new FitnessDeviceScanner();
scanner.DeviceDiscovered += device => {
if (device is FitnessMachineAdvertisementInfo ftms)
Console.WriteLine($"Found: {ftms.Name} ({ftms.MachineTypes})");
};
await scanner.StartScanningAsync();
// ... wait for user to pick a device ...
await scanner.StopScanningAsync();
// Connect and control
using var treadmill = await FitnessDevice.ConnectAsync(selectedDevice);
treadmill.TreadmillDataChanged += (sender, data) => {
Console.WriteLine($"Speed: {data.InstantaneousSpeed / 100.0} km/h, Distance: {data.TotalDistance} m");
};
await treadmill.RequestControlAsync();
await treadmill.SetTargetSpeedAsync(1000); // 10.00 km/h
Scan and Connect to a Heart Rate Monitor — Windows
using ThinkMeta.Devices.Bluetooth.HeartRate.Windows;
var scanner = new HeartRateMonitorDeviceScanner();
scanner.DeviceDiscovered += device => Console.WriteLine($"Found: {device.Name}");
scanner.StartScanning();
// ... wait for user to pick a device ...
scanner.StopScanning();
using var monitor = await HeartRateMonitorDevice.ConnectAsync(selectedDevice.BluetoothAddress);
monitor.HeartRateMeasurementReceived += hr => Console.WriteLine($"Heart Rate: {hr} bpm");
Scan and Connect to a Heart Rate Monitor — .NET MAUI
using ThinkMeta.Devices.Bluetooth.HeartRate.Maui;
var scanner = new HeartRateMonitorDeviceScanner();
scanner.DeviceDiscovered += device => Console.WriteLine($"Found: {device.Name}");
await scanner.StartScanningAsync();
// ... wait for user to pick a device ...
await scanner.StopScanningAsync();
using var monitor = await HeartRateMonitorDevice.ConnectAsync(selectedDevice);
monitor.HeartRateMeasurementReceived += hr => Console.WriteLine($"Heart Rate: {hr} bpm");
Parse FTMS Data Directly (Shared)
The shared data classes include static Parse() methods for decoding raw GATT characteristic bytes without a device connection:
using ThinkMeta.Devices.Bluetooth.Fitness;
byte[] rawBytes = /* characteristic value */;
var treadmill = TreadmillData.Parse(rawBytes);
if (treadmill is not null)
Console.WriteLine($"Speed: {treadmill.InstantaneousSpeed / 100.0} km/h");
var bike = IndoorBikeData.Parse(rawBytes);
var rower = RowerData.Parse(rawBytes);
var crossTrainer = CrossTrainerData.Parse(rawBytes);
Parse Heart Rate Data Directly (Shared)
using ThinkMeta.Devices.Bluetooth.HeartRate;
byte[] rawBytes = /* characteristic value */;
var heartRate = HeartRateMeasurementParser.Parse(rawBytes);
if (heartRate is not null)
Console.WriteLine($"Heart Rate: {heartRate} bpm");
Requirements
- .NET 10 or later
- Bluetooth adapter supported by your platform
- .NET MAUI packages require Android, iOS, macOS Catalyst, or Windows
License
See LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-android36.0 is compatible. net10.0-ios26.0 is compatible. net10.0-maccatalyst26.0 is compatible. net10.0-windows10.0.19041 is compatible. |
-
net10.0-android36.0
- Plugin.BLE (>= 3.2.0)
- ThinkMeta.Devices.Bluetooth.Core (>= 0.2.0)
-
net10.0-ios26.0
- Plugin.BLE (>= 3.2.0)
- ThinkMeta.Devices.Bluetooth.Core (>= 0.2.0)
-
net10.0-maccatalyst26.0
- Plugin.BLE (>= 3.2.0)
- ThinkMeta.Devices.Bluetooth.Core (>= 0.2.0)
-
net10.0-windows10.0.19041
- Plugin.BLE (>= 3.2.0)
- ThinkMeta.Devices.Bluetooth.Core (>= 0.2.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on ThinkMeta.Devices.Bluetooth.Core.Maui:
| Package | Downloads |
|---|---|
|
ThinkMeta.Devices.Bluetooth.Fitness.Maui
Classes for scanning and using Bluetooth fitness devices (MAUI). |
|
|
ThinkMeta.Devices.Bluetooth.HeartRate.Maui
Classes for scanning and using Bluetooth heart rate monitors (MAUI). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.2.0 | 112 | 3/24/2026 |
DeviceScanner now inherits from shared DeviceScannerBase; AdvertisementInfo now inherits from shared AdvertisementInfoBase.