Rust bluest的使用方法

最近在学习Rust,看到有个bluest库但不太清楚具体怎么使用。请问有没有详细的使用教程或者示例代码?主要想了解它的基本功能和常见应用场景,谢谢!

2 回复

Rust 的 bluest 库是一个跨平台的蓝牙低功耗(BLE)库,使用方法如下:

  1. 添加依赖:在 Cargo.toml 中添加:

    [dependencies]
    bluest = "0.1"
    
  2. 基本流程

    • 初始化适配器:let adapter = bluest::Adapter::default().await?;
    • 扫描设备:adapter.start_scan().await?;
    • 连接设备:let device = adapter.connect(&peripheral).await?;
    • 发现服务:let services = device.discover_services().await?;
    • 读写特征值:使用服务的特征进行数据交互。
  3. 注意事项

    • 需要平台权限(如 Android 的 BLUETOOTH 权限)。
    • 异步操作需配合 tokioasync-std 运行时。

示例代码可参考官方文档,根据实际需求调整设备过滤和数据处理逻辑。


Rust 的 bluest 库是一个跨平台的蓝牙低功耗(BLE)库,用于在桌面和移动设备上实现蓝牙通信。以下是基本使用方法:

1. 添加依赖

Cargo.toml 中添加:

[dependencies]
bluest = "0.2"
tokio = { version = "1", features = ["full"] }

2. 基本使用示例

use bluest::{Adapter, Device};
use tokio::runtime;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 获取默认蓝牙适配器
    let adapter = Adapter::default().await.ok_or("蓝牙适配器不可用")?;
    
    // 启用适配器
    adapter.enable().await?;

    // 开始扫描设备
    println!("正在扫描蓝牙设备...");
    let mut scan = adapter.scan(&[]).await?;
    
    while let Some(discovered_device) = scan.next().await {
        println!(
            "发现设备: {} (RSSI: {})",
            discovered_device.device.name().as_deref().unwrap_or("未知"),
            discovered_device.rssi.unwrap_or(0)
        );
    }

    Ok(())
}

3. 连接设备示例

// 连接特定设备
async fn connect_device(adapter: &Adapter, device_addr: &str) -> Result<(), Box<dyn std::error::Error>> {
    let device = adapter.open_device(device_addr).await?;
    device.connect().await?;
    
    // 发现服务
    let services = device.discover_services().await?;
    
    for service in services {
        println!("服务 UUID: {}", service.uuid());
        
        // 获取特征值
        for characteristic in service.characteristics().await? {
            println!("特征值 UUID: {}", characteristic.uuid());
        }
    }
    
    device.disconnect().await?;
    Ok(())
}

4. 主要功能

  • 设备扫描:使用 adapter.scan()
  • 设备连接device.connect()
  • 服务发现device.discover_services()
  • 读写特征值characteristic.read() / characteristic.write()
  • 通知监听characteristic.notify()

5. 注意事项

  • 需要平台权限(Android/iOS 需要蓝牙权限)
  • 在真机上测试,模拟器可能不支持蓝牙
  • 异步操作需要使用 tokio 运行时

建议查看官方文档获取最新 API 和完整示例:https://docs.rs/bluest

回到顶部