ble-ledly
Customizable and extensible cross-platform high-level BLE light controller
ble-ledly is a Customizable and extensible cross-platform high-level Bluetooth Low Energy light controller. Built on top of btleplug, it is the designed to control _ble led lights and RGB led strips. Provides out-of-the-box hardware-specific controls and animation as well as non-transferable (requires continuous client connection).
Usage
An example of how to use the library to control a generic led strip.
use ble_ledly::communication_protocol::generic_rgb_light::{
AnimationSpeedSetting, PulsatingColor,
};
use ble_ledly::controller::Controller;
use ble_ledly::device::led_device::LedDevice;
use ble_ledly::device::traits::{Device, Light, RGB};
use ble_ledly::animation::{AnimationRepeat, AnimationSpeed};
use ble_ledly::animation;
use std::time::Duration;
use tokio::time;
#[tokio::main]
async fn main() {
let mut controller = Controller::<LedDevice>::new("QHM-").await.unwrap();
let led_devices = controller.device_discovery().await.unwrap();
for device in led_devices.iter() {
println!("Found device: {}", device.name());
}
let lights: Vec<LedDevice> = led_devices
.into_iter()
.filter(|device| device.name().contains("1249"))
.collect();
println!("Filtered Lights: {:?}", lights);
controller.connect(Some(lights), None).await.unwrap();
let connected_lights = controller.list();
for light in connected_lights.iter_mut() {
println!("Connected to : {}", light.name());
light.set_color(255, 255, 255).await;
time::sleep(Duration::from_millis(800)).await;
light.set_color(255, 0, 0).await;
time::sleep(Duration::from_millis(800)).await;
light.set_color(0, 255, 0).await;
time::sleep(Duration::from_millis(800)).await;
light.set_color(0, 0, 255).await;
time::sleep(Duration::from_millis(800)).await;
animation::breathing(light, 255, 0, 0, &AnimationRepeat::FiniteCount(1), &AnimationSpeed::Fastest).await;
animation::breathing(light, 0, 255, 0, &AnimationRepeat::FiniteCount(1), &AnimationSpeed::Fastest).await;
animation::breathing(light, 0, 0, 255, &AnimationRepeat::FiniteCount(1), &AnimationSpeed::Fastest).await;
light.pulsating(&PulsatingColor::Red, &AnimationSpeedSetting::Speed9).await;
time::sleep(Duration::from_millis(2000)).await;
light.pulsating(&PulsatingColor::Green, &AnimationSpeedSetting::Speed9).await;
time::sleep(Duration::from_millis(2000)).await;
light.pulsating(&PulsatingColor::Blue, &AnimationSpeedSetting::Speed9).await;
time::sleep(Duration::from_millis(2000)).await;
light.turn_off().await;
light.disconnect().await.unwrap();
}
}
Contributing
Open a PR or issue
License
MIT