diff --git a/include/timesync.h b/include/timesync.h index f6d8fe80..d428cad1 100644 --- a/include/timesync.h +++ b/include/timesync.h @@ -7,11 +7,11 @@ #include "timekeeper.h" #define TIME_SYNC_SAMPLES 2 // number of time requests for averaging -#define TIME_SYNC_CYCLE 20 // seconds between two time requests -#define TIME_SYNC_TIMEOUT 120 // timeout seconds waiting for timeserver answer -#define TIME_SYNC_TRIGGER 100 // time deviation in millisec triggering a sync -#define TIME_SYNC_FRAME_LENGTH 0x06 // timeserver answer frame length -#define TIME_SYNC_FIXUP 0 // calibration millisec to fixup processing time +#define TIME_SYNC_CYCLE 20 // delay between two time samples [seconds] +#define TIME_SYNC_TIMEOUT 120 // timeout waiting for timeserver answer [seconds] +#define TIME_SYNC_TRIGGER 100 // deviation triggering a time sync [milliseconds] +#define TIME_SYNC_FRAME_LENGTH 0x06 // timeserver answer frame length [bytes] +#define TIME_SYNC_FIXUP 0 // calibration to fixup processing time [milliseconds] void send_timesync_req(void); int recv_timesync_ans(uint8_t buf[], uint8_t buf_len); diff --git a/platformio.ini b/platformio.ini index e0d424ed..ee505ff2 100644 --- a/platformio.ini +++ b/platformio.ini @@ -6,10 +6,10 @@ ; ---> SELECT TARGET PLATFORM HERE! <--- [platformio] -env_default = generic +;env_default = generic ;env_default = ebox ;env_default = eboxtube -;env_default = heltec +env_default = heltec ;env_default = heltecv2 ;env_default = ttgov1 ;env_default = ttgov2 @@ -30,10 +30,10 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng [common] ; for release_version use max. 10 chars total, use any decimal format like "a.b.c" -release_version = 1.7.39 +release_version = 1.7.393 ; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running! ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose -debug_level = 3 +debug_level = 4 ; UPLOAD MODE: select esptool to flash via USB/UART, select custom to upload to cloud for OTA upload_protocol = esptool ;upload_protocol = custom @@ -44,7 +44,8 @@ platform_espressif32 = espressif32@1.7.0 board_build.partitions = min_spiffs.csv monitor_speed = 115200 lib_deps_lora = - MCCI LoRaWAN LMIC library@>=2.3.2 + ;MCCI LoRaWAN LMIC library@>=2.3.2 + https://github.com/mcci-catena/arduino-lmic.git#e30e56e lib_deps_display = U8g2@>=2.25.7 lib_deps_rgbled = diff --git a/src/hal/heltec.h b/src/hal/heltec.h index 7351d36a..3a7965d2 100644 --- a/src/hal/heltec.h +++ b/src/hal/heltec.h @@ -12,6 +12,9 @@ //#define HAS_BME680 GPIO_NUM_21, GPIO_NUM_22 // SDA, SCL //#define BME680_ADDR BME680_I2C_ADDR_PRIMARY // connect SDIO of BME680 to GND +// Settings for IF482 interface +#define HAS_IF482 9600, SERIAL_7E1, GPIO_NUM_12, GPIO_NUM_13 // IF482 serial port parameters + #define HAS_LORA 1 // comment out if device shall not send data via LoRa #define CFG_sx1276_radio 1 diff --git a/src/hal/heltecv2.h b/src/hal/heltecv2.h index f85608a6..45059dd9 100644 --- a/src/hal/heltecv2.h +++ b/src/hal/heltecv2.h @@ -11,6 +11,8 @@ //#define HAS_BME680 GPIO_NUM_4, GPIO_NUM_15 // SDA, SCL //#define BME680_ADDR BME680_I2C_ADDR_PRIMARY // connect SDIO of BME680 to GND +#define HAS_IF482 9600, SERIAL_7E1, GPIO_NUM_12, GPIO_NUM_13 // IF482 serial port parameters + #define HAS_LORA 1 // comment out if device shall not send data via LoRa #define CFG_sx1276_radio 1 diff --git a/src/hal/ttgobeam.h b/src/hal/ttgobeam.h index 91b68ebe..3fed692a 100644 --- a/src/hal/ttgobeam.h +++ b/src/hal/ttgobeam.h @@ -17,19 +17,23 @@ #define CFG_sx1276_radio 1 // HPD13A LoRa SoC #define BOARD_HAS_PSRAM // use extra 4MB external RAM #define HAS_BUTTON GPIO_NUM_39 // on board button (next to reset) -#define HAS_BATTERY_PROBE ADC1_GPIO35_CHANNEL // battery probe GPIO pin -> ADC1_CHANNEL_7 +//#define HAS_BATTERY_PROBE ADC1_GPIO35_CHANNEL // battery probe GPIO pin -> ADC1_CHANNEL_7 #define BATT_FACTOR 2 // voltage divider 100k/100k on board // GPS settings -#define HAS_GPS 1 // use on board GPS -#define GPS_SERIAL 9600, SERIAL_8N1, GPIO_NUM_12, GPIO_NUM_15 // UBlox NEO 6M -#define GPS_INT GPIO_NUM_34 // 30ns accurary timepulse, to be external wired on pcb: NEO 6M Pin#3 -> GPIO34 +//#define HAS_GPS 1 // use on board GPS +//#define GPS_SERIAL 9600, SERIAL_8N1, GPIO_NUM_12, GPIO_NUM_15 // UBlox NEO 6M +//#define GPS_INT GPIO_NUM_34 // 30ns accurary timepulse, to be external wired on pcb: NEO 6M Pin#3 -> GPIO34 // enable only if device has these sensors, otherwise comment these lines // BME680 sensor on I2C bus -//#define HAS_BME 1 // Enable BME sensors in general -//#define HAS_BME680 SDA, SCL -//#define BME680_ADDR BME680_I2C_ADDR_PRIMARY // !! connect SDIO of BME680 to GND !! +#define HAS_BME 1 // Enable BME sensors in general +#define HAS_BME680 SDA, SCL +#define BME680_ADDR BME680_I2C_ADDR_PRIMARY // !! connect SDIO of BME680 to GND !! + +// Settings for DCF77 interface +#define HAS_DCF77 GPIO_NUM_14 +#define DCF77_ACTIVE_LOW 1 // display (if connected) #define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C diff --git a/src/hal/ttgofox.h b/src/hal/ttgofox.h index e29d71fb..495c0cd4 100644 --- a/src/hal/ttgofox.h +++ b/src/hal/ttgofox.h @@ -10,8 +10,8 @@ #define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C #define HAS_LED NOT_A_PIN // green on board LED is useless, is GPIO25, which switches power for Lora+Display -#define HAS_LOWPOWER_SWITCH GPIO_NUM_25 // switches power for LoRa chip + display (0 = off / 1 = on) -#define HAS_BATTERY_PROBE ADC1_GPIO35_CHANNEL +//#define HAS_LOWPOWER_SWITCH GPIO_NUM_25 // switches power for LoRa chip + display (0 = off / 1 = on) +//#define HAS_BATTERY_PROBE ADC1_GPIO35_CHANNEL #define BATT_FACTOR 2 // voltage divider 100k/100k on board #define HAS_BUTTON GPIO_NUM_36 // on board button (next to reset) @@ -25,7 +25,7 @@ #define RTC_INT GPIO_NUM_34 // timepulse with accuracy +/- 2*e-6 [microseconds] = 0,1728sec / day // Settings for IF482 interface -//#define HAS_IF482 9600, SERIAL_7E1, GPIO_NUM_12, GPIO_NUM_14 // IF482 serial port parameters +#define HAS_IF482 9600, SERIAL_7E1, GPIO_NUM_12, GPIO_NUM_14 // IF482 serial port parameters // Settings for DCF77 interface //#define HAS_DCF77 GPIO_NUM_14 diff --git a/src/paxcounter.conf b/src/paxcounter.conf index 46d392ae..0b8e7756 100644 --- a/src/paxcounter.conf +++ b/src/paxcounter.conf @@ -67,6 +67,7 @@ // settings for syncing time of node with external time source #define TIME_SYNC_INTERVAL 60 // sync time attempt each .. minutes from time source (GPS/LORA/RTC) [default = 60], 0 means off +#define TIME_SYNC_COMPILEDATE 0 // set to 1 to use compile date to initialize RTC after power outage [default = 0] #define TIME_SYNC_LORAWAN 0 // set to 1 to use LORA network as time source, 0 means off [default = 0] #define TIME_SYNC_TIMESERVER 1 // set to 1 to use LORA timeserver as time source, 0 means off [default = 0] diff --git a/src/rtctime.cpp b/src/rtctime.cpp index 348b6597..3a82d84e 100644 --- a/src/rtctime.cpp +++ b/src/rtctime.cpp @@ -24,17 +24,17 @@ uint8_t rtc_init(void) { Rtc.SetIsRunning(true); } - // If you want to initialize a fresh RTC to compiled time, use this code - /* - RtcDateTime tt = Rtc.GetDateTime(); - time_t t = tt.Epoch32Time(); // sec2000 -> epoch +#ifdef TIME_SYNC_COMPILEDATE + // initialize a blank RTC without battery backup with compiled time + RtcDateTime tt = Rtc.GetDateTime(); + time_t t = tt.Epoch32Time(); // sec2000 -> epoch - if (!Rtc.IsDateTimeValid() || !timeIsValid(t)) { - ESP_LOGW(TAG, "RTC has no recent time, setting to compilation date"); - Rtc.SetDateTime( - RtcDateTime(compiledUTC() - SECS_YR_2000)); // epoch -> sec2000 - } - */ + if (!Rtc.IsDateTimeValid() || !timeIsValid(t)) { + ESP_LOGW(TAG, "RTC has no recent time, setting to compiled time"); + Rtc.SetDateTime( + RtcDateTime(compiledUTC() - SECS_YR_2000)); // epoch -> sec2000 + } +#endif I2C_MUTEX_UNLOCK(); // release i2c bus access ESP_LOGI(TAG, "RTC initialized"); @@ -50,7 +50,7 @@ uint8_t set_rtctime(time_t t) { // t is UTC in seconds epoch time if (I2C_MUTEX_LOCK()) { Rtc.SetDateTime(RtcDateTime(t - SECS_YR_2000)); // epoch -> sec2000 #ifdef RTC_INT // sync rtc 1Hz pulse on top of second - Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone); // off + Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone); // off Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeClock); // start #endif I2C_MUTEX_UNLOCK();