Crate btleplug[−][src]
Expand description
btleplug is a Bluetooth Low Energy (BLE) central module library for Rust. It currently supports Windows 10, macOS (and possibly iOS) and Linux (BlueZ). Android support is planned for the future.
Usage
An example of how to use the library to control some BLE smart lights:
use btleplug::api::{bleuuid::uuid_from_u16, Central, Manager as _, Peripheral as _, WriteType}; use btleplug::platform::{Adapter, Manager, Peripheral}; use rand::{Rng, thread_rng}; use std::error::Error; use std::thread; use std::time::Duration; use tokio::time; use uuid::Uuid; const LIGHT_CHARACTERISTIC_UUID: Uuid = uuid_from_u16(0xFFE9); #[tokio::main] async fn main() -> Result<(), Box<dyn Error>> { let manager = Manager::new().await.unwrap(); // get the first bluetooth adapter let adapters = manager.adapters().await?; let central = adapters.into_iter().nth(0).unwrap(); // start scanning for devices central.start_scan().await?; // instead of waiting, you can use central.event_receiver() to fetch a channel and // be notified of new devices time::sleep(Duration::from_secs(2)).await; // find the device we're interested in let light = find_light(¢ral).await.unwrap(); // connect to the device light.connect().await?; // discover characteristics light.discover_characteristics().await?; // find the characteristic we want let chars = light.characteristics(); let cmd_char = chars.iter().find(|c| c.uuid == LIGHT_CHARACTERISTIC_UUID).unwrap(); // dance party let mut rng = thread_rng(); for _ in 0..20 { let color_cmd = vec![0x56, rng.gen(), rng.gen(), rng.gen(), 0x00, 0xF0, 0xAA]; light.write(&cmd_char, &color_cmd, WriteType::WithoutResponse).await?; time::sleep(Duration::from_millis(200)).await; } Ok(()) } async fn find_light(central: &Adapter) -> Option<Peripheral> { for p in central.peripherals().await.unwrap() { if p.properties() .await .unwrap() .unwrap() .local_name .iter() .any(|name| name.contains("LEDBlue")) { return Some(p); } } None }
Modules
The api
module contains the traits and types which make up btleplug’s API. These traits have a
different implementation for each supported platform, but only one implementation can be found
on any given platform. These implementations are in the platform
module.
The platform
module contains the platform-specific implementations of the various api
traits. Refer for the api
module for how to use them.
Enums
The main error type returned by most methods in btleplug.