8 个版本 (破坏性更新)
0.9.0 | 2022年11月18日 |
---|---|
0.7.0 | 2022年10月31日 |
0.5.0 | 2022年5月1日 |
0.3.0 | 2022年3月19日 |
在 硬件支持 中排名第 669
用于 ebyte-e32-ui
65KB
1.5K SLoC
ebyte-e32-rs
适用于 Ebyte E32 LoRa 模块的跨平台驱动程序。
使用 embedded-hal 通过串行端口、输入引脚(AUX)和两个输出引脚(M0、M1)进行接口。
驱动程序的 CLI 和 GUI 前端(Linux)
演示项目(STM32F411)
示例
use ebyte_e32::{
mode::Normal,
parameters::{AirBaudRate, Persistence},
Ebyte,
};
use embedded_hal::{
blocking::delay,
digital::v2::{InputPin, OutputPin},
serial,
};
use embedded_hal::digital::v2::ToggleableOutputPin;
use std::fmt::Debug;
pub fn simple_test_ebyte<S, AUX, M0, M1, D, LED>(
mut ebyte: Ebyte<S, AUX, M0, M1, D, Normal>,
mut led: LED,
mut delay: impl delay::DelayMs<u32>,
) where
S: serial::Read<u8> + serial::Write<u8>,
<S as serial::Read<u8>>::Error: Debug,
<S as serial::Write<u8>>::Error: Debug,
AUX: InputPin,
M0: OutputPin,
M1: OutputPin,
D: delay::DelayMs<u32>,
LED: ToggleableOutputPin,
LED::Error: Debug,
{
let model_data = ebyte.model_data().unwrap();
let mut params = ebyte.parameters().unwrap();
println!("{model_data:#?}");
println!("{params:#?}");
params.air_rate = AirBaudRate::Bps300;
params.channel = 23;
ebyte
.set_parameters(¶ms, Persistence::Temporary)
.unwrap();
let params = ebyte.parameters().unwrap();
println!("{:#?}", params);
loop {
delay.delay_ms(5000u32);
println!("Sending it!");
ebyte.write_buffer(b"it").unwrap();
led.toggle().unwrap();
}
}
支持的 E32 LoRa 模块
我目前已经测试了 E32-433T30D
和 E32-868T20D
。根据数据手册,模块之间的差异很小,但请务必检查:第 11 章“E32 系列”列出了一些差异。例如,E32-170T30D
仅支持高达 9.6k 的波特率。如果发现有问题,请报告或提交 PR。
Crates 功能
value_enum
:为ebyte_e32::parameters::Parameters
内的枚举启用clap::ValueEnum
。这将禁用no_std
,但可以使用此功能创建漂亮的 CLIs 和 GUIs:ebyte-e32-ui
已知限制
- 驱动程序完全阻塞,并依赖于阻塞延迟,有时会阻塞 40ms。
- 在写入串行数据时不会监控 AUX。当填充有 512 字节空间的模块缓冲区时,这将是重要的。
- 传输功率、频率、波特率以及可能的一些其他定义通常不适用于每个 E32 模型。请参阅数据手册中的模块特性表。例如,有些模块不支持所有空中波特率。
模块图
依赖关系图
(注意,此内容不包括可选功能 value_enum
)
依赖关系
~1.5–2MB
~43K SLoC