#radio #linux-gpio #raspberry-pi #sockets #sbc #lpd433 #automatisation

libsparkypi

通过Linux gpiodev控制无线电开关插座等设备

4个版本 (2个破坏性更新)

0.3.0 2024年5月19日
0.2.2 2024年3月31日
0.2.1 2024年3月31日
0.2.0 2023年5月28日
0.1.0 2023年5月20日

#268 in 硬件支持

Download history 154/week @ 2024-05-19 1/week @ 2024-05-26

每月334次下载

GPL-3.0-only

18KB
183

libsparkypi

通过Linux GPIO用户空间ABI和适当的无线电发射模块(例如FS1000A)控制无线电开关插座和类似的无线电遥控设备。

用法

添加到Cargo.toml

[dependencies]
libsparkypi = "0.3.0"

示例

use libsparkypi::{Transmission, P1};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    
    let sequence = "s001100100101100101010110";

    let radio_signal = Transmission::builder()
        .sequence(sequence)
        .pulse_length(175)
        .repeats(5)
        .protocol(P1)
        .build();

    // send via specified gpio device and pin
    // change to '/dev/gpiochip4' on a Raspberry Pi 5
    // refer to user manual on other SBC's
    radio_signal.send_to("/dev/gpiochip0", 26)?;

    // output as bytes that can be sent over UART and
    // subsequently be parsed by an appropriately
    // programmed microcontroller which in turn can
    // send the actual radio signal using a transmitter
    // module
    let bytes = radio_signal.csv_as_bytes();
    
    println!("the following data may be parsed by a \
    microcontroller\nwith a connected radio module:\n");
    println!("{}", std::str::from_utf8(&bytes)?);

    Ok(())
}

上面的示例将使用预定义协议1(P1)在gpio芯片/dev/gpiochip0的26号引脚上,以175微秒的脉冲长度,5次发送二进制序列001100100101100101010110,带有前导同步位和同步间隔。

然后以csv格式在终端显示无线电信号的属性。您还可以通过UART将底层字节序列发送到适当编程的微控制器(例如使用serialport crate),该微控制器随后可以通过连接的发射模块发送实际的无线电信号。

注意

  • Raspberry Pi 5上,40针扩展头位于/dev/gpiochip4。在Raspberry Pi 4B上,它位于/dev/gpiochip0。请参阅您特定设备的用户手册。

  • 有几种不同的433 MHz数据传输协议(LPD433)。

  • 通过构建器模式很容易实现自定义协议。(见文档

  • 目前,实现了3个不同协议的预设,以常量的形式。然而,我只有机会测试其中的两个(预定义常量P1XEN已被测试,P2未测试)。

  • 如果您在为目标设备找到正确的协议方面遇到困难,您可能希望使用RTL SDR闪存驱动器来解码其对应信号(例如遥控器、磁门传感器等)。这也有助于找到正确的脉冲长度。请注意,许多可用的发射器模块似乎有点滞后,因此您可能需要稍微减少脉冲长度以进行补偿。

  • libsparkypi 不依赖 wiringpi,这似乎已被弃用。

  • 早期版本的libsparkypi依赖于rppal包,这是非常好的。然而,我想使项目更具平台独立性,因此现在该项目依赖于gpio-cdev

依赖项

~1.5MB
~36K SLoC