Peti ini adalah port dari Cayenne Low Power Payload (LPP) API ke bahasa pemrograman karat. Ini memberikan cara mudah untuk mengirim data melalui jaringan LPWAN seperti Lorawan. Cayenne LPP sesuai dengan batasan ukuran payload, yang dapat diturunkan hingga 11 byte dan memungkinkan perangkat untuk mengirim beberapa data sensor sekaligus. Fokusnya terletak pada sistem tertanam, sehingga menggunakan atribut "NO_STD" untuk hanya menghubungkan core-crate alih-alih STD-crate. Ini juga tidak tergantung pada peti lain.
Selain itu, juga dimungkinkan untuk mengirim data sensor yang berbeda dalam frame yang berbeda. Untuk melakukan ini, nilai saluran data dapat digunakan.
Payload kompatibel dengan konsol muatan terintegrasi dari konsol Things Network (TTN). Ini dapat diaktifkan untuk unduhan atau uplink perangkat. Informasi lebih lanjut tentang format muatan LPP Cayenne dari TTN dapat ditemukan di sini.
Versi C ++ asli Cayenne LPP dapat ditemukan di sini.
Contoh berikut akan menunjukkan cara menambahkan dua tipe data, satu nilai input digital dan satu nilai suhu, ke muatan LPP Cayenne. Karena tidak ada alokasi memori yang tersedia ("NO_STD"), API membutuhkan buffer, yang akan diisi olehnya.
Untuk membuat buffer dengan ukuran yang tepat dari muatan, gunakan konstanta ukuran jenis data yang berbeda, yang disediakan oleh API. Untuk menambahkan dua input digital, cukup gandakan variabel ukuran dengan 2 dan gunakan ukuran ini untuk inisialisasi buffer. Buffer harus dapat berubah karena akan dimodifikasi oleh API. Perhatikan bahwa tidak perlu untuk menentukan ukuran buffer secara tepat, itu hanya perlu lebih besar atau sama dengan ukuran tipe data yang ditambahkan ke dalamnya. Oleh karena itu, dimungkinkan untuk menggunakan kembali buffer dengan tipe data yang berbeda. Fungsi Cayennelpp :: Reset () dapat digunakan untuk mengatur ulang struktur.
Setelah inisialisasi buffer, cukup buat instance baru API Cayennelpp dan tambahkan tipe data ke muatan dengan fungsi API yang tersedia.
Setelah menambahkan semua nilai, irisan ke buffer dapat diambil dengan memanggil fungsi cayennelpp :: payload_slice (). Iris kemudian dapat digunakan untuk mengirim data melalui API eksternal.
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 dalam keadaan saat ini harus cukup stabil untuk digunakan. Saat ini hanya mendukung no_std , tetapi akan dimungkinkan untuk mendukung API yang lebih mudah untuk menggunakan std juga.
Namun, jika Anda memiliki komentar atau ingin menambahkan beberapa fungsi, jangan ragu untuk memulai diskusi atau mengirim PR, tetapi jangan lupa untuk menambahkan tes unit dan / atau tes integrasi, jika Anda ingin itu digabungkan ke dalam repo.
Peti dirilis di bawah lisensi MIT. Lihat lisensi untuk informasi lebih lanjut.