kopia lustrzana https://github.com/dl9rdz/rdz_ttgo_sonde
RS41-SGP hum calc with real pressure
rodzic
0379cedd7b
commit
2186482fb8
|
@ -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
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
Ładowanie…
Reference in New Issue