CayenneLPP
1.0.0
Cayenne Low Power Payload(LPP)は、LorawanなどのLPWANネットワークを介してデータを送信するための便利で簡単な方法を提供します。 Cayenne LPPは、ペイロードサイズの制限に準拠しており、これを11バイトに下げることができ、デバイスが一度に複数のセンサーデータを送信できるようにします。
さらに、Cayenne LPPにより、デバイスは異なるフレームで異なるセンサーデータを送信できます。それを行うには、各センサーデータに2バイトの前に付く必要があります。
| 1バイト | 1バイト | nバイト | 1バイト | 1バイト | mバイト | ... |
| data1 ch。 | data1タイプ | データ1 | data2 ch。 | data2タイプ | データ2 | ... |
データ型は、各データ型を「オブジェクトID」で識別するIPSO Alliance Smart Objectsガイドラインに準拠しています。ただし、以下に示すように、オブジェクト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 Lux Unsigned 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 unsigned MSB |
| ジャイロメーター | 3334 | 134 | 86 | 6 | 0.01°/s軸ごとに署名されたMSB |
| 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());