Diese Kiste ist ein Port der LPP -API (Cayenne Low Power Payload) für die Rost -Programmiersprache. Es bietet eine einfache Möglichkeit, Daten über LPWAN -Netzwerke wie Lorawan zu senden. Cayenne LPP entspricht den Beschränkungen der Nutzlastgrößen, die auf 11 Bytes gesenkt werden können und es dem Gerät ermöglicht, mehrere Sensordaten gleichzeitig zu senden. Sein Fokus liegt auf eingebetteten Systemen und verwendet daher das Attribut "no_std", um das Core-Crates anstelle des STD-CRESE nur zu verknüpfen. Es hängt auch nicht von anderen Kisten ab.
Darüber hinaus ist es auch möglich, verschiedene Sensordaten in verschiedenen Rahmen zu senden. Dazu kann der Kanalwert der Daten verwendet werden.
Die Nutzlast ist mit der integrierten Nutzlastformatatter der TTN -Konsole (The Things Network) kompatibel. Es kann für den Download oder den Aufbau eines Geräts aktiviert werden. Weitere Informationen zum Cayenne LPP -Nutzlastformatierer des TTN finden Sie hier.
Die ursprüngliche C ++ - Version von Cayenne LPP finden Sie hier.
Das folgende Beispiel zeigt, wie Sie zwei Datentypen, einen digitalen Eingangswert und einen Temperaturwert zur Nutzlast von Cayenne LPP hinzufügen, hinzufügen. Da kein Speicher Allocator verfügbar ist ("no_std"), benötigt die API einen Puffer, der damit gefüllt wird.
Verwenden Sie die Größenkonstanten der verschiedenen Datentypen, die von der API bereitgestellt werden, um einen Puffer mit der genauen Größe der Nutzlast zu erstellen. Um zwei digitale Eingänge hinzuzufügen, multiplizieren Sie einfach die Größenvariable mit 2 und verwenden Sie diese Größe für die Pufferinitialisierung. Der Puffer muss veränderlich sein, da er von der API modifiziert wird. Beachten Sie, dass es nicht erforderlich ist, die Puffergröße genau zu definieren, sondern nur größer oder gleich der Größe der dazu hinzugefügten Datentypen. Daher ist es möglich, den Puffer mit unterschiedlichen Datentypen wiederzuverwenden. Die Funktion Cayennelpp :: reset () kann verwendet werden, um die Struktur zurückzusetzen.
Erstellen Sie nach der Puffer -Initialisierung einfach eine neue Instanz der Cayennelpp -API und fügen Sie die Datentypen zur Nutzlast mit den verfügbaren API -Funktionen hinzu.
Nach dem Hinzufügen aller Werte kann ein Slice zum Puffer abgerufen werden, indem die Funktion cayennelpp :: payload_slice () aufgerufen wird. Die Scheibe kann dann verwendet werden, um die Daten über eine externe API zu senden.
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 ( ) ;
} Die API in ihrem aktuellen Zustand sollte ziemlich stabil zu verwenden sein. Derzeit unterstützt es nur no_std , aber es wäre möglich, eine einfachere Verwendung von API für std zu unterstützen.
Wenn Sie jedoch Bemerkungen haben oder einige Funktionen hinzufügen möchten, können Sie eine Diskussion beginnen oder eine PR senden. Vergessen Sie jedoch nicht, Unit -Tests und / oder Integrationstests hinzuzufügen, wenn Sie möchten, dass sie in das Repo verschmolzen wird.
Die Kiste wird unter der MIT -Lizenz veröffentlicht. Weitere Informationen finden Sie unter Lizenz.