2个版本
新版本 0.1.3 | 2024年8月17日 |
---|---|
0.1.2 | 2024年8月15日 |
#201 在 硬件支持
114 每月下载量
100KB
2.5K SLoC
Cayenne低功耗有效载荷(Rust版)
这个crate将Cayenne低功耗有效载荷(LPP)API移植到Rust编程语言。它提供了一种简单的方法,可以在LPWAN网络(如LoRaWAN)上发送数据。Cayenne LPP符合有效载荷大小限制,可以降低到11字节,允许设备一次性发送多个传感器数据。它的重点是嵌入式系统,因此使用"no_std"属性,只链接核心crate而不是stdcrate。它也不依赖于任何其他crate。
此外,还可以在帧中使用不同的传感器数据。为此,可以使用数据通道值。
有效载荷与The Things Network (TTN)控制台集成的有效载荷格式器兼容。它可以用于设备的下载或上行链路。有关TTN的Cayenne LPP有效载荷格式器的更多信息,请参阅此处。
Cayenne LPP的原始C++版本可在此处找到。
示例
以下示例将展示如何将两种数据类型添加到Cayenne LPP有效载荷中,一种是数字输入值,另一种是温度值。由于没有内存分配器可用("no_std"),API需要一个缓冲区,将由它填充。
要创建具有精确有效载荷大小的缓冲区,请使用API提供的不同数据类型的大小常量。要添加两个数字输入,只需将大小变量乘以2,并使用此大小进行缓冲区初始化。由于API将对其进行修改,因此缓冲区需要可变。请注意,不需要精确定义缓冲区大小,只需大于或等于添加到其中的数据类型的大小即可。因此,可以使用具有不同数据类型的缓冲区。可以使用CayenneLPP::reset()函数重置结构。
缓冲区初始化后,只需创建一个新的CayenneLPP API实例,然后使用可用的API函数将数据类型添加到有效载荷中。
添加所有值后,可以通过调用CayenneLPP::payload_slice()函数检索缓冲区的切片。然后,可以使用该切片通过外部API发送数据。
fn main() {
// create the buffer for a digital input and a temperature data type
let mut buffer: [u8; LPP_DIGITAL_INPUT_SIZE + LPP_TEMPERATURE_SIZE] = [0; LPP_DIGITAL_INPUT_SIZE + LPP_TEMPERATURE_SIZE];
// create a new instance of CayenneLPP struct and initialize it with the buffer
let mut lpp = CayenneLPP::new(&mut buffer);
// add a digital input with the value 0x55
lpp.add_digital_input(3, 0x55).unwrap();
// add a temperature value of 12.3°C
lpp.add_temperature(5, 12.3).unwrap();
// retrieve the payload slice to be able to send the payload via an external API
let cayenne_lpp_payload = lpp.payload_slice();
// ... send the data via an external API
// reset the API and start from the beginning of the buffer
lpp.reset();
// add new values...
lpp.add_digital_input(3, 0xAA).unwrap();
lpp.add_temperature(5, 32.1).unwrap();
}
未来开发
当前状态的API使用起来应该相当稳定,但在未来向数据结构添加新值时,可能会扩展以提供更详细的错误响应。
许可证
请参阅 LICENSE.md 中的许可证。
依赖项
~94–445KB