이 상자는 Rust 프로그래밍 언어에 대한 Cayenne 저전력 페이로드 (LPP) API의 항구입니다. Lorawan과 같은 LPWAN 네트워크를 통해 데이터를 보내는 쉬운 방법을 제공합니다. Cayenne LPP는 페이로드 크기 제한을 준수하여 11 바이트로 낮추고 장치가 한 번에 여러 센서 데이터를 보낼 수 있습니다. 그것의 초점은 임베디드 시스템에 중점을 두므로 "no_std"속성을 사용하여 STD-Crate 대신 코어 크레이트 만 연결합니다. 또한 다른 상자에 의존하지 않습니다.
또한 다른 센서 데이터를 다른 프레임으로 보낼 수도 있습니다. 이를 위해 데이터의 채널 값을 사용할 수 있습니다.
페이로드는 TTN (Things Network) 콘솔의 통합 페이로드 포맷터와 호환됩니다. 장치의 다운로드 또는 업 링크를 위해 활성화 할 수 있습니다. TTN의 Cayenne LPP Payload Formatter에 대한 자세한 내용은 여기를 참조하십시오.
Cayenne LPP의 원래 C ++ 버전은 여기에서 찾을 수 있습니다.
다음 예제는 Cayenne LPP 페이로드에 두 가지 데이터 유형의 디지털 입력 값과 하나의 온도 값을 추가하는 방법을 보여줍니다. 사용 가능한 메모리 할당 자 ( "no_std")가 없으므로 API에는 버퍼가 필요합니다.
페이로드의 정확한 크기로 버퍼를 만들려면 API에서 제공하는 다른 데이터 유형의 크기 상수를 사용하십시오. 두 개의 디지털 입력을 추가하려면 크기 변수에 2를 곱하고이 크기를 버퍼 초기화에 사용하십시오. 버퍼는 API에 의해 수정되므로 버퍼는 변동성이 있어야합니다. 버퍼 크기를 정확하게 정의 할 필요는 없으며 추가 된 데이터 유형의 크기보다 크거나 동일해야합니다. 따라서 다른 데이터 유형으로 버퍼를 재사용 할 수 있습니다. cayennelpp :: reset () 함수를 사용하여 구조를 재설정 할 수 있습니다.
버퍼 초기화 후 CayennelPP API의 새 인스턴스를 작성하고 사용 가능한 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 만 지원하지만 std 용 API를 쉽게 사용하는 것이 가능합니다.
그러나 언급이 있거나 기능을 추가하려면 토론을 시작하거나 PR을 보내주십시오. 그러나 REPO에 병합되는 경우 단위 테스트 및 / 또는 통합 테스트를 추가하는 것을 잊지 마십시오.
상자는 MIT 라이센스에 따라 릴리스됩니다. 자세한 내용은 라이센스를 참조하십시오.