4个版本 (2个破坏性更新)
使用旧的Rust 2015
0.3.0 | 2019年1月2日 |
---|---|
0.2.1 | 2018年5月28日 |
0.2.0 | 2018年4月9日 |
0.0.1 | 2018年1月2日 |
#1588 in 硬件支持
每月44次下载
在 ruuvitag-upload 中使用
100KB
2.5K SLoC
Rumble
Rumble 是一个用于 Rust 的蓝牙低能耗(BLE)中心模块库。目前仅支持 Linux(使用 BlueZ 蓝牙库),尽管未来可能支持其他操作系统。Rumble 使用其套接字接口而非 DBus 与 BlueZ 交互。这提供了比 DBus 接口更多的控制和可靠性,并且不需要在实验模式下运行 BlueZ 以支持 BLE。
截至版本 0.2,API 正在变得更加稳定,库本身也更有用。您仍然可能遇到错误、限制和异常行为。欢迎提交拉取请求(和 wireshark 跟踪)!
使用方法
如何使用此库控制一些 BLE 智能灯的示例
extern crate rumble;
extern crate rand;
use std::thread;
use std::time::Duration;
use rand::{Rng, thread_rng};
use rumble::bluez::manager::Manager;
use rumble::api::{UUID, Central, Peripheral};
pub fn main() {
let manager = Manager::new().unwrap();
// get the first bluetooth adapter
let adapters = manager.adapters().unwrap();
let mut adapter = adapters.into_iter().nth(0).unwrap();
// reset the adapter -- clears out any errant state
adapter = manager.down(&adapter).unwrap();
adapter = manager.up(&adapter).unwrap();
// connect to the adapter
let central = adapter.connect().unwrap();
// start scanning for devices
central.start_scan().unwrap();
// instead of waiting, you can use central.on_event to be notified of
// new devices
thread::sleep(Duration::from_secs(2));
// find the device we're interested in
let light = central.peripherals().into_iter()
.find(|p| p.properties().local_name.iter()
.any(|name| name.contains("LEDBlue"))).unwrap();
// connect to the device
light.connect().unwrap();
// discover characteristics
light.discover_characteristics().unwrap();
// find the characteristic we want
let chars = light.characteristics();
let cmd_char = chars.iter().find(|c| c.uuid == UUID::B16(0xFFE9)).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.command(&cmd_char, &color_cmd).unwrap();
thread::sleep(Duration::from_millis(200));
}
}
依赖项
~8.5MB
~173K SLoC