1 个不稳定版本
0.1.0 | 2023年12月26日 |
---|
#8 in #low-power
31KB
443 行
Cayenne低功耗有效载荷(Rust版)
此crate将Cayenne低功耗有效载荷(LPP)API移植到Rust编程语言。它提供了一种简单的方法,可以通过LPWAN网络(如LoRaWAN)发送数据。Cayenne LPP遵守有效载荷大小限制,可以降低到11个字节,允许设备一次发送多个传感器数据。它专注于嵌入式系统,因此使用“no_std”属性,仅链接核心crate而不是std-crate。它也不依赖于任何其他crate。
此外,还可以在不同的帧中发送不同类型的传感器数据。为此,可以使用数据的通道值。
有效载荷与The Things Network (TTN)控制台集成的有效载荷格式器兼容。它可以用于设备的下传或上传。有关TTN的Cayenne LPP有效载荷格式器的更多信息,请参阅此处。
可以在此处找到Cayenne LPP的原始C++版本。
示例
以下示例将展示如何将两种数据类型添加到Cayenne LPP有效载荷中,一种数字输入值和一种温度值。由于没有内存分配器可用("no_std"),API需要一个缓冲区,它将填充它。
要创建一个与有效载荷大小完全一致的缓冲区,请使用API提供的不同数据类型的size常量。要添加两个数字输入,只需将大小变量乘以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使用起来应该相当稳定,但未来在向数据结构添加新值时,可能会扩展以提供更详细的错误响应。
不过,如果您有任何意见或想添加一些功能,请随时发起讨论或发送PR,但请不要忘记添加单元测试和/或集成测试,如果您希望它被合并到仓库中。
许可证
该软件包是在MIT许可证下发布的。有关更多信息,请参阅LICENSE。