このクレートは、Rustプログラミング言語に対するCayenne Low Power Payload(LPP)APIのポートです。 LORAWANなどのLPWANネットワークを介してデータを送信する簡単な方法を提供します。 Cayenne LPPは、ペイロードサイズの制限に準拠しており、これを11バイトに下げることができ、デバイスが一度に複数のセンサーデータを送信できるようにします。その焦点は組み込みシステムにあるため、「NO_STD」属性を使用して、STDクレートの代わりにコアクレートのみをリンクします。また、他の箱に依存しません。
さらに、異なるフレームで異なるセンサーデータを送信することもできます。これを行うには、データのチャネル値を使用できます。
ペイロードは、The Thing Network(TTN)コンソールの統合されたペイロードフォーマッタと互換性があります。ダウンロードまたはデバイスのアップリンクに有効にすることができます。 TTNのCayenne LPPペイロードフォーマッタの詳細については、こちらをご覧ください。
Cayenne LPPの元のC ++バージョンはここにあります。
次の例では、1つのデジタル入力値と1つの温度値の2つのデータ型をCayenne LPPペイロードに追加する方法を示します。使用可能なメモリアロケーター( "no_std")がないため、APIにはバッファが必要で、それによって埋められます。
ペイロードの正確なサイズのバッファーを作成するには、APIによって提供されるさまざまなデータ型のサイズ定数を使用します。 2つのデジタル入力を追加するには、サイズ変数に2を掛け、バッファの初期化にこのサイズを使用します。バッファーはAPIによって変更されるため、可変である必要があります。バッファのサイズを正確に定義する必要はないことに注意してください。追加されたデータ型のサイズまたはサイズよりも大きくて等しくする必要があります。したがって、さまざまなデータ型でバッファーを再利用することができます。 cayennelpp :: reset()関数を使用して構造をリセットできます。
バッファの初期化の後、CayenNelp APIの新しいインスタンスを作成し、使用可能なAPI関数を使用してペイロードにデータ型を追加するだけです。
すべての値を追加した後、cayennelp :: 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のみをサポートしていますが、 stdにも使用しやすいAPIをサポートすることも可能です。
ただし、発言がある場合、または機能を追加したい場合は、ディスカッションを開始したりPRを送信したりしてください。ただし、ユニットテストや統合テストを追加することを忘れないでください。
クレートはMITライセンスの下でリリースされます。詳細については、ライセンスを参照してください。