Esta caixa é uma porta da API Payen Power da Cayenne Baixa Potência (LPP) para a linguagem de programação da ferrugem. Ele fornece uma maneira fácil de enviar dados sobre redes LPWAN, como Lorawan. A Cayenne LPP é compatível com restrições de tamanho de carga útil, que podem ser reduzidas para 11 bytes e permitem que o dispositivo envie vários dados do sensor ao mesmo tempo. Seu foco está nos sistemas incorporados, por isso, ele usa o atributo "No_STD" para vincular apenas o Core-Crate em vez do STD-Crate. Também não depende de outras caixas.
Além disso, também é possível enviar diferentes dados do sensor em diferentes quadros. Para fazer isso, o valor do canal dos dados pode ser usado.
A carga útil é compatível com o formatador de carga útil integrado do console da rede Things (TTN). Pode ser ativado para o download ou o uplink de um dispositivo. Mais informações sobre o formato de carga útil da Cayenne LPP do TTN podem ser encontradas aqui.
A versão C ++ original do Cayenne LPP pode ser encontrada aqui.
O exemplo a seguir mostrará como adicionar dois tipos de dados, um valor de entrada digital e um valor de temperatura, à carga útil da Cayenne LPP. Como não há alocador de memória disponível ("no_std"), a API precisa de um buffer, que será preenchido por ele.
Para criar um buffer com o tamanho exato da carga útil, use as constantes de tamanho dos diferentes tipos de dados, fornecidos pela API. Para adicionar duas entradas digitais, basta multiplicar a variável de tamanho por 2 e usar esse tamanho para a inicialização do buffer. O buffer precisa ser mutável, pois será modificado pela API. Observe que não é necessário definir exatamente o tamanho do buffer, ele só precisa ser maior ou igual ao tamanho dos tipos de dados que são adicionados a ele. Portanto, é possível reutilizar o buffer com diferentes tipos de dados. A função Cayennelpp :: reset () pode ser usada para redefinir a estrutura.
Após a inicialização do buffer, basta criar uma nova instância da API CayenNELPP e adicionar os tipos de dados à carga útil com as funções da API disponíveis.
Depois de adicionar todos os valores, uma fatia ao buffer pode ser recuperada chamando a função Cayennelpp :: payload_slice (). A fatia pode ser usada para enviar os dados por meio de uma API externa.
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 ( ) ;
} A API em seu estado atual deve ser bastante estável para usar. Atualmente, ele suporta apenas no_std , mas seria possível suportar uma API mais fácil de usar para std também.
No entanto, se você tiver algum comentário ou deseja adicionar alguma funcionalidade, sinta -se à vontade para iniciar uma discussão ou enviar um PR, mas não se esqueça de adicionar testes de unidade e / ou testes de integração, se você deseja que ele seja mesclado no repositório.
A caixa é liberada sob a licença do MIT. Consulte a licença para obter mais informações.