Cette caisse est un port de l'API Cayenne Low Power Payload (LPP) dans le langage de programmation Rust. Il fournit un moyen facile d'envoyer des données sur les réseaux LPWAN tels que Lorawan. Cayenne LPP est conforme aux restrictions de taille de charge utile, qui peuvent être abaissées à 11 octets et permet à l'appareil d'envoyer plusieurs données de capteur en même temps. Son objectif réside sur les systèmes intégrés, il utilise donc l'attribut "NO_STD" pour lier uniquement le Core-Crate au lieu du STD-Crate. Cela ne dépend pas non plus des autres caisses.
De plus, il est également possible d'envoyer différentes données de capteurs dans différentes trames. Pour ce faire, la valeur du canal des données peut être utilisée.
La charge utile est compatible avec le formateur de charge utile intégrée de la console Network (TTN). Il peut être activé pour le téléchargement ou la liaison montante d'un appareil. Plus d'informations sur le formateur de charge utile LPP de Cayenne du TTN peuvent être trouvées ici.
La version C ++ originale de Cayenne LPP peut être trouvée ici.
L'exemple suivant montrera comment ajouter deux types de données, une valeur d'entrée numérique et une valeur de température, à la charge utile LPP de Cayenne. Puisqu'il n'y a pas d'allocateur de mémoire disponible ("NO_STD"), l'API a besoin d'un tampon, qui en sera rempli.
Pour créer un tampon avec la taille exacte de la charge utile, utilisez les constantes de taille des différents types de données, qui sont fournies par l'API. Pour ajouter deux entrées numériques, multipliez simplement la variable de taille par 2 et utilisez cette taille pour l'initialisation du tampon. Le tampon doit être mutable car il sera modifié par l'API. Notez qu'il n'est pas nécessaire de définir exactement la taille du tampon, il doit simplement être supérieur ou égal à la taille des types de données qui y sont ajoutés. Par conséquent, il est possible de réutiliser le tampon avec différents types de données. La fonction Cayennelpp :: reset () peut être utilisée pour réinitialiser la structure.
Après l'initialisation du tampon, créez simplement une nouvelle instance de l'API Cayennelpp et ajoutez les types de données à la charge utile avec les fonctions API disponibles.
Après avoir ajouté toutes les valeurs, une tranche au tampon peut être récupérée en appelant la fonction Cayennelpp :: Payload_slice (). La tranche peut ensuite être utilisée pour envoyer les données via une API externe.
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 ( ) ;
} L'API dans son état actuel devrait être assez stable à utiliser. Actuellement, il ne prend en charge que no_std , mais il serait également possible de prendre en charge une API plus facile à utiliser pour std .
Cependant, si vous avez des remarques ou si vous souhaitez ajouter des fonctionnalités, n'hésitez pas à démarrer une discussion ou à envoyer un RP, mais n'oubliez pas d'ajouter des tests unitaires et / ou des tests d'intégration, si vous voulez qu'il soit fusionné dans le repo.
La caisse est libérée sous la licence du MIT. Voir la licence pour plus d'informations.