diff --git a/.travis.yml b/.travis.yml index 8a080d5..9e0d917 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,8 +52,12 @@ install: - arduino --install-library "GFX Library for Arduino" script: - arduino --board esp32:esp32:t-beam --verify $PWD/RX_FSK/RX_FSK.ino - - find build - - find /home/travis/.arduino15/packages/esp32/hardware/esp32/ + - ESPPATH=`arduino --get-pref runtime.tools.xtensa-esp32-elf-gcc.path` + - $ESPPATH/bin/xtensa-esp32-elf-c++ -c RX_FSK/src/fonts/fonts.cpp -o /tmp/fonts.o + - $ESPPATH/bin/xtensa-esp32-elf-ld -T fontlink.ld --oformat=binary -o /tmp/fonts.bin /tmp/fonts.o + - ls -la /tmp/fonts.bin + #- find build + #- find /home/travis/.arduino15/packages/esp32/hardware/esp32/ - $PWD/scripts/makeimage.py $ESP32TOOLS $PWD/build/RX_FSK.ino.bin $PWD/RX_FSK/data $PWD/out.bin after_success: - .travis/push.sh diff --git a/RX_FSK/src/RS41.cpp b/RX_FSK/src/RS41.cpp index ce6768d..9a9668a 100644 --- a/RX_FSK/src/RS41.cpp +++ b/RX_FSK/src/RS41.cpp @@ -613,7 +613,7 @@ float GetRATemp( uint32_t measuredCurrent, uint32_t refMin, uint32_t refMax, flo } // taken from https://github.com/einergehtnochrein/ra-firmware -float GetRAHumidity( uint32_t humCurrent, uint32_t humMin, uint32_t humMax, float sensorTemp, float externalTemp ) { +float GetRAHumidity( uint32_t humCurrent, uint32_t humMin, uint32_t humMax, float sensorTemp, float externalTemp, float pressure ) { struct subframeBuffer *calibration = (struct subframeBuffer *)sonde.si()->extra; float current = float( humCurrent - humMin) / float( humMax - humMin ); /* Compute absolute capacitance from the known references */ @@ -624,12 +624,15 @@ float GetRAHumidity( uint32_t humCurrent, uint32_t humMin, uint32_t humMax, floa float Cp = ( C / calibration->value.calibU[0] - 1.0f) * calibration->value.calibU[1]; /* Compensation for low temperature and pressure at altitude */ - float estimatedPressure = 1013.25f * expf(-1.18575919e-4f * sonde.si()->d.alt ); + if(isnan(pressure)) { + // if no pressure is available (non-SGP), estimate based on altitude + pressure = 1013.25f * expf(-1.18575919e-4f * sonde.si()->d.alt ); + } float Tp = (sensorTemp - 20.0f) / 180.0f; float sum = 0; float powc = 1.0f; - float p = estimatedPressure / 1000.0f; + float p = pressure / 1000.0f; for ( int i = 0; i < 3; i++) { float l = 0; float powt = 1.0f; @@ -792,10 +795,14 @@ int RS41::decode41(byte *data, int maxlen) Serial.printf( "Pressure sens: pressureMain = %ld, pressureRef1 = %ld, pressureRef2 = %ld\n", pressureMain, pressureRef1, pressureRef2 ); #endif struct subframeBuffer *calibration = (struct subframeBuffer *)(sonde.si()->extra); - // check for bits 3 through 20 set and 37 through 46 + // temp: 0xF8==bits 3..7 : we need refResistorlow/high, taylorT, polyT bool validExternalTemperature = calibration!=NULL && (calibration->valid & 0xF8) == 0xF8; + + // humidity: bits 3..20 and 37..46. + // (note: we check validPressure below as well, thus we only calculate humidity of bit 33 (variant) is available as well) bool validHumidity = calibration!=NULL && (calibration->valid & 0x7FE0001FFFF8) == 0x7FE0001FFFF8; + // pressure: bits 33 and 37..42 (variant; x25..x2a: matrixP) /// CALIB_P is 0x7E200000000) bool validPressure = calibration!=NULL && (calibration->valid & CALIB_P)==CALIB_P && calibration->value.names.variant[7]=='P'; if ( validPressure ) { @@ -809,11 +816,11 @@ int RS41::decode41(byte *data, int maxlen) Serial.printf("External temperature = %f\n", si->temperature ); } - if ( validHumidity && validExternalTemperature ) { + if ( validHumidity && validExternalTemperature & validPressure ) { si->tempRHSensor = GetRATemp( tempHumiMain, tempHumiRef1, tempHumiRef2, calibration->value.calTU, calibration->value.taylorTU, calibration->value.polyTrh ); Serial.printf("Humidity Sensor temperature = %f\n", si->tempRHSensor ); - si->relativeHumidity = GetRAHumidity( humidityMain, humidityRef1, humidityRef2, si->tempRHSensor, si->temperature ); + si->relativeHumidity = GetRAHumidity( humidityMain, humidityRef1, humidityRef2, si->tempRHSensor, si->temperature, si->pressure ); Serial.printf("Relative humidity = %f\n", si->relativeHumidity ); } } diff --git a/RX_FSK/version.h b/RX_FSK/version.h index 916164c..e1db54f 100644 --- a/RX_FSK/version.h +++ b/RX_FSK/version.h @@ -1,4 +1,4 @@ const char *version_name = "rdzTTGOsonde"; -const char *version_id = "devel20210925"; +const char *version_id = "devel20210926"; const int SPIFFS_MAJOR=2; const int SPIFFS_MINOR=16; diff --git a/scripts/makeimage.py b/scripts/makeimage.py index b51d710..ef79ac8 100755 --- a/scripts/makeimage.py +++ b/scripts/makeimage.py @@ -1,5 +1,6 @@ #!/usr/bin/python import os +import os.path import sys import csv import subprocess @@ -29,6 +30,9 @@ data_dir = sys.argv[3] file_out = sys.argv[4] partition = esp32tools + "/partitions/default.csv" +if os.path.isfile("RX_FSK/partitions.csv"): + partition = "RX_FSK/partitions.csv" + with open(partition, 'rb') as csvfile: partreader = csv.reader(csvfile, delimiter=',') for row in partreader: