From 78f5834f0f73983d312637013bc0d8d6e986fd06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nidecki?= Date: Sat, 26 Jun 2021 15:30:00 +0200 Subject: [PATCH 01/12] If GPS is disabled do not enable power when booting up --- src/TTGO_T-Beam_LoRa_APRS.ino | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index 208abef..0fed844 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -644,7 +644,11 @@ void setup(){ } axp.setLowTemp(0xFF); //SP6VWX Set low charging temperature axp.setPowerOutPut(AXP192_LDO2, AXP202_ON); // LoRa - axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); // switch on GPS + if (gps_state){ + axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); // switch on GPS + } else { + axp.setPowerOutPut(AXP192_LDO3, AXP202_OFF); // switch off GPS + } axp.setPowerOutPut(AXP192_DCDC2, AXP202_ON); axp.setPowerOutPut(AXP192_EXTEN, AXP202_ON); axp.setDCDC1Voltage(3300); From 967a55ad2fa3ce69f8d96b032462237c6af479de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Nidecki?= Date: Sat, 26 Jun 2021 15:41:37 +0200 Subject: [PATCH 02/12] Display info when GPS is disabled --- src/TTGO_T-Beam_LoRa_APRS.ino | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index 0fed844..833ae39 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -410,7 +410,13 @@ String getSatAndBatInfo() { } void displayInvalidGPS() { - writedisplaytext(" " + Tcall, "(TX) at valid GPS", "LAT: not valid", "LON: not valid", "SPD: --- CRS: ---", getSatAndBatInfo()); + char *nextTxInfo; + if (!gps_state){ + nextTxInfo = (char*)"(TX) GPS DISABLED"; + } else { + nextTxInfo = (char*)"(TX) at valid GPS"; + } + writedisplaytext(" " + Tcall, nextTxInfo, "LAT: not valid", "LON: not valid", "SPD: --- CRS: ---", getSatAndBatInfo()); } #if defined(KISS_PROTOCOL) From d0a4a50895ccd159b7d99815eec51ac91092fee6 Mon Sep 17 00:00:00 2001 From: gorzynsk Date: Fri, 9 Jul 2021 17:54:54 +0200 Subject: [PATCH 03/12] Indroduce build config for my tracker --- platformio.ini | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/platformio.ini b/platformio.ini index e9f8362..00faf09 100644 --- a/platformio.ini +++ b/platformio.ini @@ -52,6 +52,19 @@ build_flags = -D 'MAX_TIME_TO_NEXT_TX=360000L' -D 'FIX_BEACON_INTERVAL=1800000L' +[env:WB-ttgo-t-beam-v1.0] +platform = espressif32 @ 3.0.0 +board = ttgo-t-beam +build_flags = + ${env.build_flags} + -D T_BEAM_V1_0 + -D ENABLE_WIFI + -D ENABLE_BLUETOOTH + -D 'CALLSIGN="SQ2WB-4"' + -D 'DIGI_PATH="WIDE1-1"' + -D 'MAX_TIME_TO_NEXT_TX=120000L' + -D 'ENABLE_LED_SIGNALING' + [env:ttgo-t-beam-v1.0] platform = espressif32 @ 3.0.0 board = ttgo-t-beam From b5c200bab37703fbb9c0a2f4b321930ac0748aac Mon Sep 17 00:00:00 2001 From: "Rysiek Labus (SQ9MDD)" Date: Sun, 11 Jul 2021 11:50:28 +0200 Subject: [PATCH 04/12] Update platformio.ini --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index e9f8362..bb9f8dd 100644 --- a/platformio.ini +++ b/platformio.ini @@ -49,7 +49,7 @@ build_flags = -D 'ENABLE_OLED' -D 'ENABLE_LED_SIGNALING' -D 'NETWORK_TNC_PORT=8001' - -D 'MAX_TIME_TO_NEXT_TX=360000L' + -D 'MAX_TIME_TO_NEXT_TX=120000L' -D 'FIX_BEACON_INTERVAL=1800000L' [env:ttgo-t-beam-v1.0] From f17c773e7eba3a2ee1cad13ac76a0c9d0f6556eb Mon Sep 17 00:00:00 2001 From: gorzynsk Date: Sun, 11 Jul 2021 11:54:11 +0200 Subject: [PATCH 05/12] Adds Smart Beaconing settings --- .gitignore | 1 + data_embed/index.html | 29 +++++++++++++++++++++++- include/preference_storage.h | 10 +++++++++ platformio.ini | 12 ---------- src/TTGO_T-Beam_LoRa_APRS.ino | 42 ++++++++++++++++++++++++++++++++--- src/taskWebServer.cpp | 19 +++++++++++++++- 6 files changed, 96 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 52a4746..3219250 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ cmake-build-* /include/version.h /data_embed/*.out /src/TTGO_T-Beam_LoRa_APRS.ino.cpp +workspace.code-workspace diff --git a/data_embed/index.html b/data_embed/index.html index dc1c2a5..9bfba1c 100644 --- a/data_embed/index.html +++ b/data_embed/index.html @@ -45,6 +45,9 @@
+
+
Station Settings
+
@@ -79,13 +82,16 @@
+
+
Fixed Beaconing Settings
+
- +
@@ -97,6 +103,27 @@
+
+
Smart Beaconing Settings
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
diff --git a/include/preference_storage.h b/include/preference_storage.h index 442e43b..6499c4c 100644 --- a/include/preference_storage.h +++ b/include/preference_storage.h @@ -29,6 +29,16 @@ static const char *const PREF_APRS_FIXED_BEACON_PRESET = "aprs_fixed_beac"; static const char *const PREF_APRS_FIXED_BEACON_PRESET_INIT = "aprs_fix_b_init"; static const char *const PREF_APRS_FIXED_BEACON_INTERVAL_PRESET = "aprs_fb_interv"; static const char *const PREF_APRS_FIXED_BEACON_INTERVAL_PRESET_INIT = "aprs_fb_in_init"; +// SMART BEACONING +static const char *const PREF_APRS_SB_MIN_INTERVAL_PRESET = "sb_min_interv"; +static const char *const PREF_APRS_SB_MIN_INTERVAL_PRESET_INIT = "sb_min_interv_i"; +static const char *const PREF_APRS_SB_MAX_INTERVAL_PRESET = "sb_max_interv"; +static const char *const PREF_APRS_SB_MAX_INTERVAL_PRESET_INIT = "sb_max_interv_i"; +static const char *const PREF_APRS_SB_MIN_SPEED_PRESET = "sb_min_speed"; +static const char *const PREF_APRS_SB_MIN_SPEED_PRESET_INIT = "sb_min_speed_i"; +static const char *const PREF_APRS_SB_MAX_SPEED_PRESET = "sb_max_speed"; +static const char *const PREF_APRS_SB_MAX_SPEED_PRESET_INIT = "sb_max_speed_i"; +// static const char *const PREF_APRS_GPS_EN = "gps_enabled"; static const char *const PREF_APRS_GPS_EN_INIT = "gps_state_init"; static const char *const PREF_APRS_SHOW_CMT = "show_cmt"; diff --git a/platformio.ini b/platformio.ini index 00faf09..462fd9b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -52,18 +52,6 @@ build_flags = -D 'MAX_TIME_TO_NEXT_TX=360000L' -D 'FIX_BEACON_INTERVAL=1800000L' -[env:WB-ttgo-t-beam-v1.0] -platform = espressif32 @ 3.0.0 -board = ttgo-t-beam -build_flags = - ${env.build_flags} - -D T_BEAM_V1_0 - -D ENABLE_WIFI - -D ENABLE_BLUETOOTH - -D 'CALLSIGN="SQ2WB-4"' - -D 'DIGI_PATH="WIDE1-1"' - -D 'MAX_TIME_TO_NEXT_TX=120000L' - -D 'ENABLE_LED_SIGNALING' [env:ttgo-t-beam-v1.0] platform = espressif32 @ 3.0.0 diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index 833ae39..45940b5 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -153,12 +153,19 @@ float BattVolts; float InpVolts; // variables for smart beaconing -float average_speed[5] = {0,0,0,0,0}, average_speed_final=0, max_speed=30, min_speed=0; +ulong SB_min_interval = 60000L; +ulong SB_max_interval = 360000L; +ulong SB_min_speed = 0; +ulong SB_max_speed = 30; + +float average_speed[5] = {0,0,0,0,0}, average_speed_final=0, max_speed=SB_max_speed, min_speed=SB_min_speed; float old_course = 0, new_course = 0; int point_avg_speed = 0, point_avg_course = 0; -ulong min_time_to_nextTX=60000L; // minimum time period between TX = 60000ms = 60secs = 1min -ulong max_time_to_nextTX= MAX_TIME_TO_NEXT_TX; + +ulong min_time_to_nextTX=SB_min_interval; // minimum time period between TX = 60000ms = 60secs = 1min +ulong max_time_to_nextTX= SB_max_interval; ulong nextTX=60000L; // preset time period between TX = 60000ms = 60secs = 1min + ulong time_to_refresh = 0; ulong next_fixed_beacon = 0; ulong fix_beacon_interval = FIX_BEACON_INTERVAL; @@ -585,6 +592,35 @@ void setup(){ } fix_beacon_interval = preferences.getInt(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET) * 1000; +// + SMART BEACONING + + if (!preferences.getBool(PREF_APRS_SB_MIN_INTERVAL_PRESET_INIT)){ + preferences.putBool(PREF_APRS_SB_MIN_INTERVAL_PRESET_INIT, true); + preferences.putInt(PREF_APRS_SB_MIN_INTERVAL_PRESET, SB_min_interval/1000); + } + SB_min_interval = preferences.getInt(PREF_APRS_SB_MIN_INTERVAL_PRESET) * 1000; + + if (!preferences.getBool(PREF_APRS_SB_MAX_INTERVAL_PRESET_INIT)){ + preferences.putBool(PREF_APRS_SB_MAX_INTERVAL_PRESET_INIT, true); + preferences.putInt(PREF_APRS_SB_MAX_INTERVAL_PRESET, SB_max_interval/1000); + } + SB_max_interval = preferences.getInt(PREF_APRS_SB_MAX_INTERVAL_PRESET) * 1000; + + + if (!preferences.getBool(PREF_APRS_SB_MIN_SPEED_PRESET_INIT)){ + preferences.putBool(PREF_APRS_SB_MIN_SPEED_PRESET_INIT, true); + preferences.putInt(PREF_APRS_SB_MIN_SPEED_PRESET, SB_min_speed); + } + SB_min_speed = preferences.getInt(PREF_APRS_SB_MIN_SPEED_PRESET); + + if (!preferences.getBool(PREF_APRS_SB_MAX_SPEED_PRESET_INIT)){ + preferences.putBool(PREF_APRS_SB_MAX_SPEED_PRESET_INIT, true); + preferences.putInt(PREF_APRS_SB_MAX_SPEED_PRESET, SB_max_speed); + } + SB_max_speed = preferences.getInt(PREF_APRS_SB_MAX_SPEED_PRESET); + +// + if (!preferences.getBool(PREF_DEV_SHOW_RX_TIME_INIT)){ preferences.putBool(PREF_DEV_SHOW_RX_TIME_INIT, true); preferences.putInt(PREF_DEV_SHOW_RX_TIME, showRXTime/1000); diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index 83ab67c..dc312bc 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -138,6 +138,10 @@ void handle_Cfg() { jsonData += jsonLineFromPreferenceString(PREF_APRS_LATITUDE_PRESET); jsonData += jsonLineFromPreferenceString(PREF_APRS_LONGITUDE_PRESET); jsonData += jsonLineFromPreferenceInt(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET); + jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MIN_INTERVAL_PRESET); + jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MAX_INTERVAL_PRESET); + jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MIN_SPEED_PRESET); + jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MAX_SPEED_PRESET); jsonData += jsonLineFromPreferenceBool(PREF_APRS_SHOW_BATTERY); jsonData += jsonLineFromPreferenceBool(PREF_APRS_FIXED_BEACON_PRESET); jsonData += jsonLineFromPreferenceBool(PREF_APRS_SHOW_ALTITUDE); @@ -191,10 +195,23 @@ void handle_SaveAPRSCfg() { } if (server.hasArg(PREF_APRS_LATITUDE_PRESET)){ preferences.putString(PREF_APRS_LATITUDE_PRESET, server.arg(PREF_APRS_LATITUDE_PRESET)); - } + } if (server.hasArg(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET)){ preferences.putInt(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET, server.arg(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET).toInt()); } + if (server.hasArg(PREF_APRS_SB_MIN_INTERVAL_PRESET)){ + preferences.putInt(PREF_APRS_SB_MIN_INTERVAL_PRESET, server.arg(PREF_APRS_SB_MIN_INTERVAL_PRESET).toInt()); + } + if (server.hasArg(PREF_APRS_SB_MAX_INTERVAL_PRESET)){ + preferences.putInt(PREF_APRS_SB_MAX_INTERVAL_PRESET, server.arg(PREF_APRS_SB_MAX_INTERVAL_PRESET).toInt()); + } + if (server.hasArg(PREF_APRS_SB_MIN_SPEED_PRESET)){ + preferences.putInt(PREF_APRS_SB_MIN_SPEED_PRESET, server.arg(PREF_APRS_SB_MIN_SPEED_PRESET).toInt()); + } + if (server.hasArg(PREF_APRS_SB_MAX_SPEED_PRESET)){ + preferences.putInt(PREF_APRS_SB_MAX_SPEED_PRESET, server.arg(PREF_APRS_SB_MAX_SPEED_PRESET).toInt()); + } + if (server.hasArg(PREF_APRS_LONGITUDE_PRESET)){ preferences.putString(PREF_APRS_LONGITUDE_PRESET, server.arg(PREF_APRS_LONGITUDE_PRESET)); } From 0ae349cec40bb6f5eaa69fb1b09b95036950bdf3 Mon Sep 17 00:00:00 2001 From: gorzynsk Date: Sun, 11 Jul 2021 12:46:39 +0200 Subject: [PATCH 06/12] Smart Beaconing settings review fix --- src/TTGO_T-Beam_LoRa_APRS.ino | 42 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index 45940b5..e6cef63 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -153,17 +153,15 @@ float BattVolts; float InpVolts; // variables for smart beaconing -ulong SB_min_interval = 60000L; -ulong SB_max_interval = 360000L; -ulong SB_min_speed = 0; -ulong SB_max_speed = 30; +ulong sb_min_interval = 60000L; +ulong sb_max_interval = 360000L; +float sb_min_speed = 0; +float sb_max_speed = 30; -float average_speed[5] = {0,0,0,0,0}, average_speed_final=0, max_speed=SB_max_speed, min_speed=SB_min_speed; +float average_speed[5] = {0,0,0,0,0}, average_speed_final=0; float old_course = 0, new_course = 0; int point_avg_speed = 0, point_avg_course = 0; -ulong min_time_to_nextTX=SB_min_interval; // minimum time period between TX = 60000ms = 60secs = 1min -ulong max_time_to_nextTX= SB_max_interval; ulong nextTX=60000L; // preset time period between TX = 60000ms = 60secs = 1min ulong time_to_refresh = 0; @@ -596,28 +594,28 @@ void setup(){ if (!preferences.getBool(PREF_APRS_SB_MIN_INTERVAL_PRESET_INIT)){ preferences.putBool(PREF_APRS_SB_MIN_INTERVAL_PRESET_INIT, true); - preferences.putInt(PREF_APRS_SB_MIN_INTERVAL_PRESET, SB_min_interval/1000); + preferences.putInt(PREF_APRS_SB_MIN_INTERVAL_PRESET, sb_min_interval/1000); } - SB_min_interval = preferences.getInt(PREF_APRS_SB_MIN_INTERVAL_PRESET) * 1000; + sb_min_interval = preferences.getInt(PREF_APRS_SB_MIN_INTERVAL_PRESET) * 1000; if (!preferences.getBool(PREF_APRS_SB_MAX_INTERVAL_PRESET_INIT)){ preferences.putBool(PREF_APRS_SB_MAX_INTERVAL_PRESET_INIT, true); - preferences.putInt(PREF_APRS_SB_MAX_INTERVAL_PRESET, SB_max_interval/1000); + preferences.putInt(PREF_APRS_SB_MAX_INTERVAL_PRESET, sb_max_interval/1000); } - SB_max_interval = preferences.getInt(PREF_APRS_SB_MAX_INTERVAL_PRESET) * 1000; + sb_max_interval = preferences.getInt(PREF_APRS_SB_MAX_INTERVAL_PRESET) * 1000; if (!preferences.getBool(PREF_APRS_SB_MIN_SPEED_PRESET_INIT)){ preferences.putBool(PREF_APRS_SB_MIN_SPEED_PRESET_INIT, true); - preferences.putInt(PREF_APRS_SB_MIN_SPEED_PRESET, SB_min_speed); + preferences.putInt(PREF_APRS_SB_MIN_SPEED_PRESET, sb_min_speed); } - SB_min_speed = preferences.getInt(PREF_APRS_SB_MIN_SPEED_PRESET); + sb_min_speed = preferences.getInt(PREF_APRS_SB_MIN_SPEED_PRESET); if (!preferences.getBool(PREF_APRS_SB_MAX_SPEED_PRESET_INIT)){ preferences.putBool(PREF_APRS_SB_MAX_SPEED_PRESET_INIT, true); - preferences.putInt(PREF_APRS_SB_MAX_SPEED_PRESET, SB_max_speed); + preferences.putInt(PREF_APRS_SB_MAX_SPEED_PRESET, sb_max_speed); } - SB_max_speed = preferences.getInt(PREF_APRS_SB_MAX_SPEED_PRESET); + sb_max_speed = preferences.getInt(PREF_APRS_SB_MAX_SPEED_PRESET); // @@ -740,8 +738,8 @@ void setup(){ for(;;); // Don't proceed, loop forever } - if (max_time_to_nextTX < nextTX){ - max_time_to_nextTX=nextTX; + if (sb_max_interval < nextTX){ + sb_max_interval=nextTX; } writedisplaytext("LoRa-APRS","","Init:","RF95 OK!","",""); writedisplaytext(" "+Tcall,"","Init:","Waiting for GPS","",""); @@ -929,9 +927,9 @@ void loop() { point_avg_speed=0; } average_speed_final = (average_speed[0]+average_speed[1]+average_speed[2]+average_speed[3]+average_speed[4])/5; - nextTX = (max_time_to_nextTX-min_time_to_nextTX)/(max_speed-min_speed)*(max_speed-average_speed_final)+min_time_to_nextTX; - if (nextTX < min_time_to_nextTX) {nextTX=min_time_to_nextTX;} - if (nextTX > max_time_to_nextTX) {nextTX=max_time_to_nextTX;} + nextTX = (sb_max_interval-sb_min_interval)/(sb_max_speed-sb_min_speed)*(sb_max_speed-average_speed_final)+sb_min_interval; + if (nextTX < sb_min_interval) {nextTX=sb_min_interval;} + if (nextTX > sb_max_interval) {nextTX=sb_max_interval;} average_course[point_avg_course] = gps.course.deg(); // calculate smart beaconing course ++point_avg_course; if (point_avg_course>(ANGLE_AVGS-1)) { @@ -949,7 +947,7 @@ void loop() { if ((old_course < ANGLE) && (new_course > (360-ANGLE))) { if (abs(new_course-old_course-360)>=ANGLE) { nextTX = 0; - // lastTX = min_time_to_nextTX + // lastTX = sb_min_interval } } else { if ((old_course > (360-ANGLE)) && (new_course < ANGLE)) { @@ -964,7 +962,7 @@ void loop() { } old_course = new_course; } - if ((millis() Date: Sun, 18 Jul 2021 09:55:48 +0200 Subject: [PATCH 07/12] contribution update --- data_embed/index.html | 2 +- platformio.ini | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data_embed/index.html b/data_embed/index.html index 9bfba1c..3cdd548 100644 --- a/data_embed/index.html +++ b/data_embed/index.html @@ -244,7 +244,7 @@
-
Contributors in order of appearance: OE1ACM, OE3CJB, SQ9MDD, SQ5RWU, DJ1AN, M0IGA, SQ5WPR, DO2JMG, SP6VWX
+
Contributors in order of appearance:
OE1ACM, OE3CJB, SQ9MDD, SQ5RWU, DJ1AN, M0IGA, SQ5WPR, DO2JMG, SP6VWX, SQ2WB
Latest stable version: https://github.com/SQ9MDD/TTGO-T-Beam-LoRa-APRS
Licensed under: CC BY-NC-SA
diff --git a/platformio.ini b/platformio.ini index e27e2d7..7eb7f4d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -118,8 +118,8 @@ build_flags = -D T_BEAM_V1_0 -D ENABLE_WIFI -D ENABLE_BLUETOOTH - -D ENABLE_SYSLOG - -D 'SYSLOG_IP="192.168.0.102"' + ;-D ENABLE_SYSLOG + ;-D 'SYSLOG_IP="192.168.0.102"' -D DEVELOPMENT_DEBUG lib_deps = ${env.lib_deps} From 30c340e8366d4fcbb96b83086e8b87dbf78ef5ce Mon Sep 17 00:00:00 2001 From: Rysiek Labus Date: Sun, 18 Jul 2021 10:15:18 +0200 Subject: [PATCH 08/12] few comments --- platformio.ini | 51 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/platformio.ini b/platformio.ini index 7eb7f4d..0537b28 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,28 +30,27 @@ lib_deps = bblanchon/ArduinoJson build_flags = -Wl,--gc-sections,--relax - -D 'KISS_PROTOCOL' - -D 'CALLSIGN="N0CALL-0"' - -D 'DIGI_PATH="ECHO"' - -D 'FIXED_BEACON_EN' - -D 'LATIDUDE_PRESET="0000.00N"' - -D 'LONGITUDE_PRESET="00000.00E"' - -D 'APRS_SYMBOL_TABLE="/"' - -D 'APRS_SYMBOL="["' - -D 'MY_COMMENT="Lora Tracker"' - -D 'SHOW_ALT' - -D 'SHOW_BATT' - -D 'SHOW_RX_PACKET' - -D 'SHOW_RX_TIME=10000' - -D 'TXFREQ=433.775' - -D 'SPEED_1200' ; comment out to set 300baud - -D 'TXdbmW=23' - -D 'ENABLE_OLED' - -D 'ENABLE_LED_SIGNALING' - -D 'NETWORK_TNC_PORT=8001' - -D 'MAX_TIME_TO_NEXT_TX=120000L' - -D 'FIX_BEACON_INTERVAL=1800000L' - + -D 'KISS_PROTOCOL' ; leave enabled + -D 'CALLSIGN="N0CALL-0"' ; can be set from www interfeace + -D 'DIGI_PATH="WIDE1-1"' ; can be set from www interfeace + -D 'FIXED_BEACON_EN' ; can be set from www interfeace + -D 'LATIDUDE_PRESET="0000.00N"' ; can be set from www interfeace + -D 'LONGITUDE_PRESET="00000.00E"' ; can be set from www interfeace + -D 'APRS_SYMBOL_TABLE="/"' ; can be set from www interfeace + -D 'APRS_SYMBOL="["' ; can be set from www interfeace + -D 'MY_COMMENT="Lora Tracker"' ; can be set from www interfeace + -D 'SHOW_ALT' ; can be set from www interfeace + -D 'SHOW_BATT' ; can be set from www interfeace + -D 'SHOW_RX_PACKET' ; can be set from www interfeace + -D 'SHOW_RX_TIME=10000' ; can be set from www interfeace + -D 'TXFREQ=433.775' ; set operating frequency + -D 'SPEED_1200' ; comment out to set 300baud + -D 'TXdbmW=23' ; set power + -D 'ENABLE_OLED' ; can be set from www interfeace + -D 'ENABLE_LED_SIGNALING' ; can be set from www interfeace + -D 'NETWORK_TNC_PORT=8001' ; default KISS TCP port + -D 'MAX_TIME_TO_NEXT_TX=120000L' ; can be set from www interfeace + -D 'FIX_BEACON_INTERVAL=1800000L' ; can be set from www interfeace [env:ttgo-t-beam-v1.0] platform = espressif32 @ 3.0.0 @@ -120,7 +119,7 @@ build_flags = -D ENABLE_BLUETOOTH ;-D ENABLE_SYSLOG ;-D 'SYSLOG_IP="192.168.0.102"' - -D DEVELOPMENT_DEBUG -lib_deps = - ${env.lib_deps} - arcao/Syslog + ;-D DEVELOPMENT_DEBUG +;lib_deps = +; ${env.lib_deps} +; arcao/Syslog From 7bda5e68a75f6025520b21e59d1b67c53d2e1f6c Mon Sep 17 00:00:00 2001 From: "Rysiek Labus (SQ9MDD)" Date: Fri, 30 Jul 2021 10:57:19 +0200 Subject: [PATCH 09/12] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index db33853..e0f587f 100644 --- a/README.md +++ b/README.md @@ -51,3 +51,8 @@ After connection with APRX based DIGI it can be used as KISS-TNC * Select/Press Flash ESP. * Once complete, “Done! Flashing is complete!” will be shown. * any subsequent updates can be done via WWW + +## Default WiFi Password: + +Default WiFi Password is: xxxxxxxxxx +that is, 10 times x From 5dd2eec54ae75d8c51b9942845b74e0fb1a077de Mon Sep 17 00:00:00 2001 From: "Rysiek Labus (SQ9MDD)" Date: Fri, 30 Jul 2021 10:57:47 +0200 Subject: [PATCH 10/12] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e0f587f..115a3ba 100644 --- a/README.md +++ b/README.md @@ -54,5 +54,5 @@ After connection with APRX based DIGI it can be used as KISS-TNC ## Default WiFi Password: -Default WiFi Password is: xxxxxxxxxx -that is, 10 times x +* Default WiFi Password is: xxxxxxxxxx +* that is, 10 times x From 1a44bea515bafed1f17d38dff4e23bb759ef4868 Mon Sep 17 00:00:00 2001 From: gorzynsk Date: Tue, 3 Aug 2021 18:11:18 +0200 Subject: [PATCH 11/12] Allows to configure LoRa frequency and speed on the web interface --- data_embed/index.html | 16 ++++++++++++ include/preference_storage.h | 6 +++++ src/TTGO_T-Beam_LoRa_APRS.ino | 49 +++++++++++++++++++++++++++-------- src/taskWebServer.cpp | 17 +++++++++++- 4 files changed, 76 insertions(+), 12 deletions(-) diff --git a/data_embed/index.html b/data_embed/index.html index 3cdd548..46833e0 100644 --- a/data_embed/index.html +++ b/data_embed/index.html @@ -45,6 +45,22 @@
+
+
Transmission Settings
+
+
+
+ + +
+
+ + +
+
Station Settings
diff --git a/include/preference_storage.h b/include/preference_storage.h index 6499c4c..0ce5548 100644 --- a/include/preference_storage.h +++ b/include/preference_storage.h @@ -10,6 +10,12 @@ extern Preferences preferences; // MAX 15 chars for preferenece key!!! static const char *const PREF_WIFI_SSID = "wifi_ssid"; static const char *const PREF_WIFI_PASSWORD = "wifi_password"; +// LoRa settings +static const char *const PREF_LORA_FREQ_PRESET_INIT = "lora_freq_i"; +static const char *const PREF_LORA_FREQ_PRESET = "lora_freq"; +static const char *const PREF_LORA_SPEED_PRESET_INIT = "lora_speed_i"; +static const char *const PREF_LORA_SPEED_PRESET = "lora_speed"; +// Station settings static const char *const PREF_APRS_CALLSIGN = "aprs_callsign"; static const char *const PREF_APRS_RELAY_PATH = "aprs_relay_path"; static const char *const PREF_APRS_RELAY_PATH_INIT = "aprs_relay_init"; diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index e6cef63..dff2100 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -86,6 +86,10 @@ const byte TXLED = 4; //pin number for LED on TX Tracker #endif +// Variables for LoRa settings +ulong lora_speed = 1200; +double lora_freq = 433.775; + // Variables for APRS packaging String Tcall; //your Call Sign for normal position reports String aprsSymbolTable = APRS_SYMBOL_TABLE; @@ -314,7 +318,7 @@ void sendpacket(){ #endif batt_read(); prepareAPRSFrame(); - loraSend(txPower, TXFREQ, outString); //send the packet, data is in TXbuff from lora_TXStart to lora_TXEnd + loraSend(txPower, lora_freq, outString); //send the packet, data is in TXbuff from lora_TXStart to lora_TXEnd } /** @@ -331,11 +335,12 @@ void loraSend(byte lora_LTXPower, float lora_FREQ, const String &message) { int messageSize = min(message.length(), sizeof(lora_TXBUFF) - 1); message.toCharArray((char*)lora_TXBUFF, messageSize + 1, 0); - #ifdef SPEED_1200 + if(lora_speed==1200){ rf95.setModemConfig(BG_RF95::Bw125Cr47Sf512); - #else + } + else{ rf95.setModemConfig(BG_RF95::Bw125Cr45Sf4096); - #endif + } rf95.setFrequency(lora_FREQ); rf95.setTxPower(lora_LTXPower); rf95.sendAPRS(lora_TXBUFF, messageSize); @@ -499,7 +504,8 @@ void sendTelemetryFrame() { // + SETUP --------------------------------------------------------------+// void setup(){ SPI.begin(SPI_sck,SPI_miso,SPI_mosi,SPI_ss); //DO2JMG Heltec Patch - + Serial.begin(115200); + #ifdef BUZZER ledcSetup(0,1E5,12); ledcAttachPin(BUZZER,0); @@ -523,6 +529,23 @@ void setup(){ } preferences.begin("cfg", false); + + // LoRa transmission settings + + if (!preferences.getBool(PREF_LORA_FREQ_PRESET_INIT)){ + preferences.putBool(PREF_LORA_FREQ_PRESET_INIT, true); + preferences.putDouble(PREF_LORA_FREQ_PRESET, lora_freq); + } + lora_freq = preferences.getDouble(PREF_LORA_FREQ_PRESET); + + if (!preferences.getBool(PREF_LORA_SPEED_PRESET_INIT)){ + preferences.putBool(PREF_LORA_SPEED_PRESET_INIT, true); + preferences.putInt(PREF_LORA_SPEED_PRESET, lora_speed); + } + lora_speed = preferences.getInt(PREF_LORA_SPEED_PRESET); + + // APRS station settings + aprsSymbolTable = preferences.getString(PREF_APRS_SYMBOL_TABLE); if (aprsSymbolTable.isEmpty()){ preferences.putString(PREF_APRS_SYMBOL_TABLE, APRS_SYMBOL_TABLE); @@ -676,7 +699,7 @@ void setup(){ pinMode(BUTTON, INPUT_PULLUP); #endif digitalWrite(TXLED, LOW); // turn blue LED off - Serial.begin(115200); + Wire.begin(I2C_SDA, I2C_SCL); #ifdef T_BEAM_V1_0 @@ -751,12 +774,16 @@ void setup(){ #endif batt_read(); writedisplaytext("LoRa-APRS","","Init:","ADC OK!","BAT: "+String(BattVolts,1),""); - #ifdef SPEED_1200 + + if(lora_speed==1200) rf95.setModemConfig(BG_RF95::Bw125Cr47Sf512); - #else + else rf95.setModemConfig(BG_RF95::Bw125Cr45Sf4096); - #endif - rf95.setFrequency(433.775); + + Serial.printf("LoRa Speed:\t%d\n", lora_speed); + + rf95.setFrequency(lora_freq); + Serial.printf("LoRa FREQ:\t%f\n", lora_freq); rf95.setTxPower(txPower); delay(250); #ifdef KISS_PROTOCOL @@ -877,7 +904,7 @@ void loop() { if (xQueueReceive(tncToSendQueue, &TNC2DataFrame, (1 / portTICK_PERIOD_MS)) == pdPASS) { writedisplaytext("((KISSTX))","","","","",""); time_to_refresh = millis() + showRXTime; - loraSend(txPower, TXFREQ, *TNC2DataFrame); + loraSend(txPower, lora_freq, *TNC2DataFrame); delete TNC2DataFrame; } } diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index dc312bc..58c03f2 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -56,6 +56,9 @@ String jsonLineFromPreferenceBool(const char *preferenceName, bool last=false){ String jsonLineFromPreferenceInt(const char *preferenceName, bool last=false){ return String("\"") + preferenceName + "\":" + (preferences.getInt(preferenceName)) + (last ? + R"()" : + R"(,)"); } +String jsonLineFromPreferenceDouble(const char *preferenceName, bool last=false){ + return String("\"") + preferenceName + "\":" + String(preferences.getDouble(preferenceName),3) + (last ? + R"()" : + R"(,)"); +} String jsonLineFromString(const char *name, const char *value, bool last=false){ return String("\"") + name + "\":\"" + jsonEscape(value) + "\"" + (last ? + R"()" : + R"(,)"); } @@ -130,6 +133,8 @@ void handle_Cfg() { String jsonData = "{"; jsonData += String("\"") + PREF_WIFI_PASSWORD + "\": \"" + jsonEscape((preferences.getString(PREF_WIFI_PASSWORD).isEmpty() ? String("") : "*")) + R"(",)"; jsonData += jsonLineFromPreferenceString(PREF_WIFI_SSID); + jsonData += jsonLineFromPreferenceDouble(PREF_LORA_FREQ_PRESET); + jsonData += jsonLineFromPreferenceInt(PREF_LORA_SPEED_PRESET); jsonData += jsonLineFromPreferenceString(PREF_APRS_CALLSIGN); jsonData += jsonLineFromPreferenceString(PREF_APRS_RELAY_PATH); jsonData += jsonLineFromPreferenceString(PREF_APRS_SYMBOL_TABLE); @@ -178,6 +183,15 @@ void handle_ReceivedList() { } void handle_SaveAPRSCfg() { + // LoRa settings + if (server.hasArg(PREF_LORA_FREQ_PRESET)){ + preferences.putDouble(PREF_LORA_FREQ_PRESET, server.arg(PREF_LORA_FREQ_PRESET).toDouble()); + Serial.printf("FREQ saved:\t%f\n", server.arg(PREF_LORA_FREQ_PRESET).toDouble()); + } + if (server.hasArg(PREF_LORA_SPEED_PRESET)){ + preferences.putInt(PREF_LORA_SPEED_PRESET, server.arg(PREF_LORA_SPEED_PRESET).toInt()); + } + // APRS station settings if (server.hasArg(PREF_APRS_CALLSIGN) && !server.arg(PREF_APRS_CALLSIGN).isEmpty()){ preferences.putString(PREF_APRS_CALLSIGN, server.arg(PREF_APRS_CALLSIGN)); } @@ -195,7 +209,8 @@ void handle_SaveAPRSCfg() { } if (server.hasArg(PREF_APRS_LATITUDE_PRESET)){ preferences.putString(PREF_APRS_LATITUDE_PRESET, server.arg(PREF_APRS_LATITUDE_PRESET)); - } + } + // Smart Beaconing settings if (server.hasArg(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET)){ preferences.putInt(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET, server.arg(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET).toInt()); } From 8df220ad1b0c183e82f10bd73774d80324f54f7b Mon Sep 17 00:00:00 2001 From: gorzynsk Date: Tue, 10 Aug 2021 19:04:18 +0200 Subject: [PATCH 12/12] Adds angle setting to web configuration of Smart Beaconing --- data_embed/index.html | 6 +++++- include/preference_storage.h | 3 +++ src/TTGO_T-Beam_LoRa_APRS.ino | 25 +++++++++++++++---------- src/taskWebServer.cpp | 10 +++++++--- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/data_embed/index.html b/data_embed/index.html index 46833e0..2b36b5c 100644 --- a/data_embed/index.html +++ b/data_embed/index.html @@ -125,7 +125,7 @@
- +
@@ -139,6 +139,10 @@
+
+ + +
diff --git a/include/preference_storage.h b/include/preference_storage.h index 0ce5548..1d539da 100644 --- a/include/preference_storage.h +++ b/include/preference_storage.h @@ -44,6 +44,9 @@ static const char *const PREF_APRS_SB_MIN_SPEED_PRESET = "sb_min_speed"; static const char *const PREF_APRS_SB_MIN_SPEED_PRESET_INIT = "sb_min_speed_i"; static const char *const PREF_APRS_SB_MAX_SPEED_PRESET = "sb_max_speed"; static const char *const PREF_APRS_SB_MAX_SPEED_PRESET_INIT = "sb_max_speed_i"; +static const char *const PREF_APRS_SB_ANGLE_PRESET = "sb_angle"; +static const char *const PREF_APRS_SB_ANGLE_PRESET_INIT = "sb_angle_i"; + // static const char *const PREF_APRS_GPS_EN = "gps_enabled"; static const char *const PREF_APRS_GPS_EN_INIT = "gps_state_init"; diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino index dff2100..35a9328 100644 --- a/src/TTGO_T-Beam_LoRa_APRS.ino +++ b/src/TTGO_T-Beam_LoRa_APRS.ino @@ -161,6 +161,7 @@ ulong sb_min_interval = 60000L; ulong sb_max_interval = 360000L; float sb_min_speed = 0; float sb_max_speed = 30; +float sb_angle = 30; // angle to send packet at smart beaconing float average_speed[5] = {0,0,0,0,0}, average_speed_final=0; float old_course = 0, new_course = 0; @@ -179,7 +180,7 @@ ulong shutdown_countdown_timer = 0; boolean shutdown_active =true; boolean shutdown_countdown_timer_enable = false; boolean shutdown_usb_status_bef = false; -#define ANGLE 60 // angle to send packet at smart beaconing + #define ANGLE_AVGS 3 // angle averaging - x times float average_course[ANGLE_AVGS]; float avg_c_y, avg_c_x; @@ -640,6 +641,11 @@ void setup(){ } sb_max_speed = preferences.getInt(PREF_APRS_SB_MAX_SPEED_PRESET); + if (!preferences.getBool(PREF_APRS_SB_ANGLE_PRESET_INIT)){ + preferences.putBool(PREF_APRS_SB_ANGLE_PRESET_INIT, true); + preferences.putDouble(PREF_APRS_SB_ANGLE_PRESET, sb_angle); + } + sb_angle = preferences.getDouble(PREF_APRS_SB_ANGLE_PRESET); // if (!preferences.getBool(PREF_DEV_SHOW_RX_TIME_INIT)){ @@ -971,19 +977,18 @@ void loop() { if (new_course < 0) { new_course=360+new_course; } - if ((old_course < ANGLE) && (new_course > (360-ANGLE))) { - if (abs(new_course-old_course-360)>=ANGLE) { - nextTX = 0; - // lastTX = sb_min_interval + if ((old_course < sb_angle) && (new_course > (360-sb_angle))) { + if (abs(new_course-old_course-360)>=sb_angle) { + nextTX = 1; // give one second for turn to finish and then TX } } else { - if ((old_course > (360-ANGLE)) && (new_course < ANGLE)) { - if (abs(new_course-old_course+360)>=ANGLE) { - nextTX = 0; + if ((old_course > (360-sb_angle)) && (new_course < sb_angle)) { + if (abs(new_course-old_course+360)>=sb_angle) { + nextTX = 1; } } else { - if (abs(new_course-old_course)>=ANGLE) { - nextTX = 0; + if (abs(new_course-old_course)>=sb_angle) { + nextTX = 1; } } } diff --git a/src/taskWebServer.cpp b/src/taskWebServer.cpp index 58c03f2..b45f268 100644 --- a/src/taskWebServer.cpp +++ b/src/taskWebServer.cpp @@ -147,6 +147,7 @@ void handle_Cfg() { jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MAX_INTERVAL_PRESET); jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MIN_SPEED_PRESET); jsonData += jsonLineFromPreferenceInt(PREF_APRS_SB_MAX_SPEED_PRESET); + jsonData += jsonLineFromPreferenceDouble(PREF_APRS_SB_ANGLE_PRESET); jsonData += jsonLineFromPreferenceBool(PREF_APRS_SHOW_BATTERY); jsonData += jsonLineFromPreferenceBool(PREF_APRS_FIXED_BEACON_PRESET); jsonData += jsonLineFromPreferenceBool(PREF_APRS_SHOW_ALTITUDE); @@ -210,6 +211,10 @@ void handle_SaveAPRSCfg() { if (server.hasArg(PREF_APRS_LATITUDE_PRESET)){ preferences.putString(PREF_APRS_LATITUDE_PRESET, server.arg(PREF_APRS_LATITUDE_PRESET)); } + if (server.hasArg(PREF_APRS_LONGITUDE_PRESET)){ + preferences.putString(PREF_APRS_LONGITUDE_PRESET, server.arg(PREF_APRS_LONGITUDE_PRESET)); + } + // Smart Beaconing settings if (server.hasArg(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET)){ preferences.putInt(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET, server.arg(PREF_APRS_FIXED_BEACON_INTERVAL_PRESET).toInt()); @@ -226,9 +231,8 @@ void handle_SaveAPRSCfg() { if (server.hasArg(PREF_APRS_SB_MAX_SPEED_PRESET)){ preferences.putInt(PREF_APRS_SB_MAX_SPEED_PRESET, server.arg(PREF_APRS_SB_MAX_SPEED_PRESET).toInt()); } - - if (server.hasArg(PREF_APRS_LONGITUDE_PRESET)){ - preferences.putString(PREF_APRS_LONGITUDE_PRESET, server.arg(PREF_APRS_LONGITUDE_PRESET)); + if (server.hasArg(PREF_APRS_SB_ANGLE_PRESET)){ + preferences.putDouble(PREF_APRS_SB_ANGLE_PRESET, server.arg(PREF_APRS_SB_ANGLE_PRESET).toDouble()); } preferences.putBool(PREF_APRS_SHOW_BATTERY, server.hasArg(PREF_APRS_SHOW_BATTERY));