Crates.io | ble-peripheral-rust |
lib.rs | ble-peripheral-rust |
version | 0.1.0 |
source | src |
created_at | 2024-10-27 10:51:19.377526 |
updated_at | 2024-10-27 10:51:19.377526 |
description | A cross-platform Rust crate for building Bluetooth Low Energy peripherals |
homepage | https://github.com/rohitsangwan01/ble_peripheral_rust |
repository | https://github.com/rohitsangwan01/ble_peripheral_rust |
max_upload_size | |
id | 1424522 |
size | 121,840 |
BlePeripheralRust is a cross-platform Rust crate that allows your device to function as a Bluetooth Low Energy (BLE) peripheral, enables you to define BLE services, characteristics, and handle BLE events asynchronously.
Check out the examples folder for detailed usage, or start by running:
cargo run --example server
To initialize the peripheral, create a channel to handle events, instantiate the peripheral, and wait until the BLE device is powered on:
let (sender_tx, mut receiver_rx) = channel::<PeripheralEvent>(256);
let mut peripheral = Peripheral::new(sender_tx).await.unwrap();
// Ensure the peripheral is powered on
while !peripheral.is_powered().await.unwrap() {}
Define and add a BLE service, including characteristics, descriptors with specified properties and permissions:
peripheral.add_service(
&Service {
uuid: Uuid::from_short(0x1234_u16),
primary: true,
characteristics: vec![
Characteristic {
uuid: Uuid::from_short(0x2A3D_u16),
..Default::default()
}
],
}
).await;
Begin advertising the BLE peripheral to make it discoverable by other devices:
peripheral.start_advertising("RustBLE", &[Uuid::from_short(0x1234_u16)]).await;
Manage BLE events such as characteristic subscription updates, read requests, and write requests in an asynchronous loop:
while let Some(event) = receiver_rx.recv().await {
match event {
PeripheralEvent::CharacteristicSubscriptionUpdate { request, subscribed } => {
// Send notifications to subscribed clients
}
PeripheralEvent::ReadRequest { request, offset, responder } => {
// Respond to Read request
responder.send(ReadRequestResponse {
value: String::from("Hello").into(),
response: RequestResponse::Success,
});
}
PeripheralEvent::WriteRequest { request, offset, value, responder } => {
// Respond to Write request
responder.send(WriteRequestResponse {
response: RequestResponse::Success,
});
},
- => {}
}
}
Send characteristic updates to all clients listening to the characteristic:
peripheral.update_characteristic(Uuid::from_short(0x2A3D_u16), "Ping!".into()).await;
This crate is inspired by bluster. Contributions, bug reports, and feature requests are welcome!