#分布式 #显示 #协议 #像素 #ddp

ddp-rs

Rust中的分布式显示协议(DDP)

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 #像素

Download history 10/week @ 2024-03-08 2/week @ 2024-03-15 17/week @ 2024-03-29 4/week @ 2024-04-05

每月下载 75

MIT 协议

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,我会进行审查。

KADSBUGGEL

贡献者

依赖项

~1.7–7.5MB
~55K SLoC