From c4cd51a7916558c70880cc723b6d5faf406f526b Mon Sep 17 00:00:00 2001 From: Stefan Brand Date: Mon, 20 Jan 2020 14:33:10 +0100 Subject: [PATCH] Payload Format Changes --- Firmware/src/main.cpp | 44 +++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/Firmware/src/main.cpp b/Firmware/src/main.cpp index 2517e0c..1dc679e 100644 --- a/Firmware/src/main.cpp +++ b/Firmware/src/main.cpp @@ -159,30 +159,42 @@ void setup() void loop() { - // Without Sensor (Beacon Mode) just send the Battery Voltage - // Use less acurate Battery Voltage Reading (100mv Steps) to be - // Compatible with IOT-Usergroup Basenodes + // Create Data Structure for Sensor Data #ifdef HAS_NO_SENSOR - uint8_t data[1]; + struct lora_data { + uint8_t bat; + } __attribute__ ((packed)) data; + #elif defined HAS_SHT21 + struct lora_data { + uint8_t bat; + int32_t temperature; + int32_t humidity; + } __attribute__ ((packed)) data; + #elif defined HAS_BME280 + struct lora_data { + uint8_t bat; + int32_t temperature; + int32_t humidity; + int32_t pressure; + } __attribute__ ((packed)) data; #endif // Get Sensor Data #ifdef HAS_BME280 - int32_t data[4] = {0, 0, 0, 0}; - sensor.getData(&data[0], &data[1], &data[2]); + + sensor.getData(&data.temperature, &data.pressure, &data.humidity); #endif #ifdef HAS_SHT21 - int32_t data[4] = {0, 0, 0, 0}; - data[0] = (int32_t)(sensor.getTemperature()*100); - data[2] = (int32_t)(sensor.getHumidity()*100); + data.temperature = (int32_t)(sensor.getTemperature()*100); + data.humidity = (int32_t)(sensor.getHumidity()*100); #endif - #ifdef HAS_NO_SENSOR - data[0] = (uint8_t)(readVcc()/20); - #else - data[3] = readVcc(); - #endif + // Add Battery Voltage, 20mv steps, encoded into 1 Byte + uint32_t batv = readVcc(); + data.bat = (uint8_t)(batv/20); + if (batv % 20 > 9) + data.bat += 1; // LED On before Sending #ifdef LED_PIN @@ -191,12 +203,12 @@ void loop() #ifdef RF_LORA // Send LoRa Packet, Increment Frame Counter - lora.Send_Data((unsigned char *)data, sizeof(data), Frame_Counter_Tx, SF7BW125); + lora.Send_Data((unsigned char *)&data, sizeof(data), Frame_Counter_Tx, SF7BW125); Frame_Counter_Tx++; #endif #ifdef RF_RFM69 - radio.send(RFM69_GATEWAY, data, sizeof(data)); + radio.send(RFM69_GATEWAY, &data, sizeof(data)); radio.sleep(); #endif