Этот ящик является портом API Cayenne Low Power Power Payalt (LPP) на язык программирования Rust. Он обеспечивает простой способ отправки данных по сетям LPWAN, таким как Lorawan. Cayenne LPP соответствует ограничениям размера полезной нагрузки, которые могут быть снижены до 11 байт и позволяют устройству отправлять несколько данных датчиков одновременно. Его сосредоточение лежит на встроенных системах, поэтому он использует атрибут «no_std», чтобы связать ядра, а не STD-кран. Это также не зависит от каких -либо других ящиков.
Кроме того, также возможно отправлять различные данные датчиков в разных кадрах. Для этого можно использовать значение канала данных.
Полезная нагрузка совместима с интегрированной формой полезной нагрузки консоли сети вещей (TTN). Это может быть включено для загрузки или восходящей линии устройства. Более подробную информацию о форматере полезной нагрузки Cayenne LPP можно найти здесь.
Оригинальную версию C ++ Cayenne LPP можно найти здесь.
В следующем примере будет показано, как добавить два типа данных, одно цифровое входное значение и одно значение температуры, к полезной нагрузке Cayenne LPP. Поскольку не доступно распределителя памяти («NO_STD»), API нужен буфер, который будет заполнен им.
Чтобы создать буфер с точным размером полезной нагрузки, используйте константы размера различных типов данных, которые предоставляются API. Чтобы добавить два цифровых входа, просто умножьте переменную размера на 2 и используйте этот размер для инициализации буфера. Буфер должен быть изменчивым, поскольку он будет изменен API. Обратите внимание, что нет необходимости точно определять размер буфера, он просто должен быть больше или равен размеру добавленных типов данных. Следовательно, можно повторно использовать буфер с различными типами данных. Функция cayennelpp :: reset () может использоваться для сброса структуры.
После инициализации буфера просто создайте новый экземпляр API Cayennelpp и добавьте типы данных в полезную нагрузку с доступными функциями API.
После добавления всех значений можно получить срез в буфер, вызывая функцию Cayennelpp :: 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 , но также можно было бы поддержать более проще в использовании API для std .
Однако, если у вас есть какие -либо замечания или вы хотите добавить некоторые функциональные возможности, не стесняйтесь начать обсуждение или отправить PR, но не забудьте добавлять модульные тесты и / или интеграционные тесты, если вы хотите, чтобы он был объединен в репо.
Ящик выпускается по лицензии MIT. Смотрите лицензию для получения дополнительной информации.