CayenneLPP
1.0.0
Cayenne低功率有效載荷(LPP)提供了一種方便,簡便的方法,可以通過LPWAN網絡(例如Lorawan)發送數據。 Cayenne LPP符合有效載荷尺寸限制,可以將其降低至11個字節,並允許設備一次發送多個傳感器數據。
此外,Cayenne LPP允許該設備以不同幀發送不同的傳感器數據。為了做到這一點,每個傳感器數據都必須在兩個字節上前綴:
| 1字節 | 1字節 | n字節 | 1字節 | 1字節 | m字節 | ... |
| Data1 ch。 | Data1類型 | 數據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 | 每個軸簽名的MSB 0.001 g |
| 晴雨表 | 3315 | 115 | 73 | 2 | 0.1 HPA未簽名的MSB |
| 陀螺儀 | 3334 | 134 | 86 | 6 | 每軸簽名的MSB 0.01°/s |
| GPS位置 | 3336 | 136 | 88 | 9 | 緯度:0.0001°簽名的MSB |
| 經度:0.0001°簽名的MSB | |||||
| 高度:0.01米簽名的MSB |
| 有效載荷(十六進制) | 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
| 有效載荷(十六進制) | 01 67 FF D7 | |
| 數據通道 | 類型 | 價值 |
| 01⇒1 | 67⇒溫度 | ffd7 = -41課-4.1°C |
框架n+1
| 有效載荷(十六進制) | 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());