10个版本 (1个稳定版本)
1.0.0 | 2024年2月19日 |
---|---|
0.4.1 | 2024年1月9日 |
0.3.2 | 2023年11月15日 |
0.2.1 | 2023年5月2日 |
0.1.1 | 2023年5月1日 |
#21 in #像素
每月下载 75 次
38KB
883 行
Rust中的分布式显示协议(DDP)
此软件包允许您通过3waylabs的分布式显示协议(DDP)将像素数据写入LED条。
您可以使用它将像素数据流式传输到WLED或其他任何DDP兼容的接收器。
示例
use anyhow::Result;
use ddp_rs::connection;
use ddp_rs::protocol;
fn main() -> Result<()> {
let mut conn = connection::DDPConnection::try_new
(
"192.168.1.40:4048", // The IP address of the device followed by :4048
protocol::PixelConfig::default(), // Default is RGB, 8 bits ber channel
protocol::ID::Default,
std::net::UdpSocket::bind("0.0.0.0:6969")
.unwrap() // can be any unused port on 0.0.0.0, but protocol recommends 4048
)?;
// loop sets some colors for the first 6 pixels to see if it works
for i in 0u8..100u8{
let high = 10u8.overflowing_mul(i).0;
// loop through some colors
let temp: usize = conn.write(&[
high/*red value*/, 0/*green value*/, 0/*blue value*/,
high/*red value*/, 0/*green value*/, 0/*blue value*/,
0/*red value*/, high/*green value*/, 0/*blue value*/,
0/*red value*/, high/*green value*/, 0/*blue value*/,
0/*red value*/, 0/*green value*/, high/*blue value*/,
0/*red value*/, 0/*green value*/, high/*blue value*/
])?;
std::thread::sleep(std::time::Duration::from_millis(10));
// this crate is non blocking, so with out the sleep, it will send them all instantly
println!("sent {temp} packets");
}
Ok(())
}
或者通过运行 cargo run --example dev
来尝试它
为什么?
我希望我能告诉你。我在这套定制LED协议和DDP之间来回摇摆,虽然“规范”还有待完善,但DDP似乎是“最合理的”一个。另一个可能的协议是TPM2.net,我开始实现了它,但在我意识到它有多糟糕后我就停止了。Artnet和E1.31很棒,但那时您会有帧率问题(大约40-44 FPS),这是为了与DMX保持向后兼容。
DDP在这里处于“合理”但并非完美的位置,这就是为什么我决定实现它。它不强制规定帧率,它对您是使用UDP还是TCP发送它是不可知的(尽管我怀疑大多数供应商只接受UDP),并且它是开放的,因为它依赖于JSON进行消息传递。除此之外,作者在10字节头中塞进了如此多的数据,这几乎令人印象深刻。唯一的缺点是,如果客户端想要变得智能,则需要实现JSON解析,但在这个阶段,对于任何连接的设备来说这都是基本要求。
对于任何未来“我要发明自己的LED协议”的人来说,请从广播视频领域的人们那里学习,而不是从你的烂ham无线电串行协议那里学习。我喜欢“自由形式的像素结构”,但可能有一个更结构化的“会话”是有价值的,在那里您可以标准化像素大小等通信方式。
它是垃圾吗?
绝对是。我仅与WLED进行了测试,如果您发现其他支持DDP(例如Minleon NDB Pro)的昂贵控制器,请尝试它并告诉我。
贡献
只需提交包含一些guchimucchi代码的PR,我会进行审查。
贡献者
- 珊瑚,这个库的主要小丑
- paulwrath1223 带来一个 热土豆 PR。绝对传奇的 PR。
依赖项
~1.7–7.5MB
~55K SLoC