#low-power #lorawan #lpwan #networking #no-std #cayenne #lpp

no-std cayenne_lpp

Rust crate实现了Cayenne低功耗有效载荷(LPP)格式

1 个不稳定版本

0.1.0 2023年12月26日

#8 in #low-power

MIT 许可证

31KB
443

Cayenne低功耗有效载荷(Rust版)

build crates.io docs.rs license

此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

无运行时依赖