CayenneLPP
1.0.0
Cayenne Low Power Payload (LPP)는 Lorawan과 같은 LPWAN 네트워크를 통해 데이터를 전송하는 편리하고 쉬운 방법을 제공합니다. Cayenne LPP는 페이로드 크기 제한을 준수하여 11 바이트로 낮추고 장치가 한 번에 여러 센서 데이터를 보낼 수 있습니다.
또한 Cayenne LPP를 사용하면 장치가 다른 프레임으로 다른 센서 데이터를 보낼 수 있습니다. 이를 위해서는 각 센서 데이터가 두 바이트로 접두사를해야합니다.
| 1 바이트 | 1 바이트 | n 바이트 | 1 바이트 | 1 바이트 | M 바이트 | ... |
| 데이터 1 ch. | 데이터 1 유형 | 데이터 1 | Data2 ch. | data2 유형 | 데이터 2 | ... |
데이터 유형은 IPSO Alliance Smart Objects 지침을 준수하며 각 데이터 유형을 "객체 ID"로 식별합니다. 그러나 아래와 같이, 객체 ID를 단일 바이트에 맞게 변환됩니다.
LPP_DATA_TYPE = IPSO_OBJECT_ID - 3200
각 데이터 유형은 1 바이트를 사용하여 다음 표에 따라 데이터를 보낼 수 있습니다.
| 유형 | IPSO | LPP | 마녀 | 데이터 크기 | 비트 당 데이터 해결 |
| 디지털 입력 | 3200 | 0 | 0 | 1 | 1 |
| 디지털 출력 | 3201 | 1 | 1 | 1 | 1 |
| 아날로그 입력 | 3202 | 2 | 2 | 2 | 0.01 서명 |
| 아날로그 출력 | 3203 | 3 | 3 | 2 | 0.01 서명 |
| 조명 센서 | 3301 | 101 | 65 | 2 | 1 럭스 서명되지 않은 MSB |
| 존재 센서 | 3302 | 102 | 66 | 1 | 1 |
| 온도 센서 | 3303 | 103 | 67 | 2 | 0.1 ° C 서명 된 MSB |
| 습도 센서 | 3304 | 104 | 68 | 1 | 서명되지 않은 0.5 % |
| 가속도계 | 3313 | 113 | 71 | 6 | 축당 0.001 g MSB에 서명했습니다 |
| 기압계 | 3315 | 115 | 73 | 2 | 0.1 HPA 부호없는 MSB |
| 자이로 미터 | 3334 | 134 | 86 | 6 | 축당 0.01 °/s 로그인 MSB |
| GPS 위치 | 3336 | 136 | 88 | 9 | 위도 : 0.0001 ° 서명 된 MSB |
| 경도 : 0.0001 ° 서명 된 MSB | |||||
| 고도 : 0.01 미터 서명 MSB |
| 페이로드 (16 진) | 03 67 01 10 05 67 00 FF | |
| 데이터 채널 | 유형 | 값 |
| 03 ⇒ 3 | 67 ⇒ 온도 | 0110 = 272 ⇒ 27.2 ° C |
| 05 ⇒ 5 | 67 ⇒ 온도 | 00ff = 255 ⇒ 25.5 ° C |
프레임 n
| 페이로드 (16 진) | 01 67 FF D7 | |
| 데이터 채널 | 유형 | 값 |
| 01 ⇒ 1 | 67 ⇒ 온도 | FFD7 = -41 ⇒ -4.1 ° C |
프레임 n+1
| 페이로드 (16 진) | 06 71 04 D2 FB 2E 00 00 | |
| 데이터 채널 | 유형 | 값 |
| 06 ⇒ 6 | 71 ⇒ 가속도계 | X : 04D2 = +1234 ⇒ +1.234G |
| Y : FB2E = -1234 ⇒ -1.234G | ||
| Z : 0000 = 0 ⇒ 0g | ||
#include 'CayenneLPP.h';
#define MAX_SIZE 200; // depends on spreading factor and frequency used
CayenneLPP Payload(MAX_SIZE);
float celsius = -4.1;
float accel[] = {1.234, -1.234, 0};
float rh = 30;
float hpa = 1014.1;
float latitude = 42.3519;
float longitude = -87.9094;
float altitude:10
int size = 0;
Payload.reset();
size = Payload.addTemperature(0, celsius);
if (size == 0) {
// not enough byte left to add the data
}
else {
// add function returned current payload size
}
Payload.addAccelerometer(1, accel[0], accel[1], accel[2]);
Payload.addRelativeHumidity(3, rh);
Payload.addBarometricPressure(4, hpa);
Payload.addGPS(5, latitude, longitude, altitude);
// Call LoRaWAN library to send the frame
LORA_SEND(Payload.getBuffer(), Payload.getSize());