该板条箱是CAYENNE低功率有效载荷(LPP)API的端口,用于Rust编程语言。它提供了一种通过LPWAN网络(例如Lorawan)发送数据的简便方法。 Cayenne LPP符合有效载荷尺寸限制,可以将其降低至11个字节,并允许设备一次发送多个传感器数据。它的重点在于嵌入式系统,因此它使用“ no_std”属性仅链接核心板岩而不是std-crate。它也不取决于任何其他板条箱。
此外,还可以以不同帧发送不同的传感器数据。为此,可以使用数据的通道值。
有效负载与事物网络(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应该非常稳定。目前,它仅支持no_std ,但也可以支持更易于使用API进行std 。
但是,如果您有任何备注或想添加一些功能,请随时开始讨论或发送PR,但不要忘记添加单元测试和 /或集成测试,如果您希望它将其合并到仓库中。
板条箱根据麻省理工学院许可发布。有关更多信息,请参见许可证。