Esta caja es un puerto de la API de carga útil de baja potencia de Cayenne (LPP) al lenguaje de programación de óxido. Proporciona una manera fácil de enviar datos a través de redes LPWAN como Lorawan. Cayenne LPP cumple con las restricciones del tamaño de la carga útil, que se pueden bajar a 11 bytes y permite que el dispositivo envíe múltiples datos del sensor a la vez. Su enfoque se encuentra en los sistemas integrados, por lo que utiliza el atributo "NO_STD" para vincular solo el Core-Crate en lugar del Crate STD. Tampoco depende de ninguna otra cajas.
Además, también es posible enviar diferentes datos del sensor en diferentes cuadros. Para hacer esto, se puede usar el valor del canal de los datos.
La carga útil es compatible con el formato de carga útil integrado de la consola de la red Things Things. Se puede habilitar para la descarga o el enlace ascendente de un dispositivo. Puede encontrar más información sobre el formato de carga útil de Cayenne LPP del TTN.
La versión original de C ++ de Cayenne LPP se puede encontrar aquí.
El siguiente ejemplo mostrará cómo agregar dos tipos de datos, un valor de entrada digital y un valor de temperatura, a la carga útil de Cayenne LPP. Dado que no hay un asignador de memoria disponible ("NO_STD"), la API necesita un búfer, que será llenado por él.
Para crear un búfer con el tamaño exacto de la carga útil, use las constantes de tamaño de los diferentes tipos de datos, que proporcionan la API. Para agregar dos entradas digitales, simplemente multiplique la variable de tamaño por 2 y use este tamaño para la inicialización del búfer. El búfer debe ser mutable ya que la API lo modificará. Tenga en cuenta que no es necesario definir exactamente el tamaño del búfer, solo debe ser mayor o igual al tamaño de los tipos de datos que se le agregan. Por lo tanto, es posible reutilizar el búfer con diferentes tipos de datos. La función Cayennelpp :: reset () se puede usar para restablecer la estructura.
Después de la inicialización del búfer, simplemente cree una nueva instancia de la API Cayennelpp y agregue los tipos de datos a la carga útil con las funciones de API disponibles.
Después de agregar todos los valores, se puede recuperar una porción al búfer llamando a la función cayennelpp :: payload_slice (). La porción se puede usar para enviar los datos a través de una API externa.
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 ( ) ;
} La API en su estado actual debería ser bastante estable de usar. Actualmente solo es compatible con no_std , pero sería posible admitir una API más fácil de usar para std también.
Sin embargo, si tiene algún comentario o desea agregar alguna funcionalidad, no dude en comenzar una discusión o enviar un PR, pero no olvide agregar pruebas unitarias y / o pruebas de integración, si desea que se fusione en el repositorio.
La caja se libera bajo la licencia MIT. Vea la licencia para más información.