4个版本 (2个破坏性更新)
0.3.0 | 2024年5月19日 |
---|---|
0.2.2 | 2024年3月31日 |
0.2.1 |
|
0.2.0 | 2023年5月28日 |
0.1.0 | 2023年5月20日 |
#268 in 硬件支持
每月334次下载
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个不同协议的预设,以常量的形式。然而,我只有机会测试其中的两个(预定义常量
P1
和XEN
已被测试,P2
未测试)。 -
如果您在为目标设备找到正确的协议方面遇到困难,您可能希望使用RTL SDR闪存驱动器来解码其对应信号(例如遥控器、磁门传感器等)。这也有助于找到正确的脉冲长度。请注意,许多可用的发射器模块似乎有点滞后,因此您可能需要稍微减少脉冲长度以进行补偿。
-
libsparkypi
不依赖 wiringpi,这似乎已被弃用。 -
早期版本的
libsparkypi
依赖于rppal包,这是非常好的。然而,我想使项目更具平台独立性,因此现在该项目依赖于gpio-cdev。
依赖项
~1.5MB
~36K SLoC