Skip to content

Commit 218e28a

Browse files
committed
v2431 update also
1 parent 94ca52e commit 218e28a

9 files changed

Lines changed: 137 additions & 66 deletions

File tree

.github/workflows/build.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ jobs:
8787
chip: esp32
8888
- name: ttgo-t-lora32-v2_1_TNC_915
8989
chip: esp32
90+
- name: ttgo_lora32_t3s3_v1_2_GPS
91+
chip: esp32s3
92+
flash_size: 4MB
93+
flash_mode: dio
94+
spiffs_offset: "0x310000"
9095
- name: ESP32_DIY_LoRa_GPS
9196
chip: esp32
9297
- name: ESP32_DIY_LoRa_GPS_915

common_settings.ini

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ build_flags =
2323
-I variants/${PIOENV}
2424
lib_deps =
2525
adafruit/Adafruit BusIO @ 1.16.1
26-
adafruit/Adafruit Unified Sensor @ 1.1.14
27-
adafruit/Adafruit BME280 Library @ 2.2.4
28-
adafruit/Adafruit BMP280 Library @ 2.6.8
29-
adafruit/Adafruit BME680 Library @ 2.0.4
30-
bblanchon/ArduinoJson @ 6.21.3
26+
adafruit/Adafruit Unified Sensor @ 1.1.15
27+
adafruit/Adafruit BME280 Library @ 2.3.0
28+
adafruit/Adafruit BMP280 Library @ 3.0.0
29+
adafruit/Adafruit BME680 Library @ 2.0.6
30+
bblanchon/ArduinoJson @ 7.4.2
3131
h2zero/NimBLE-Arduino @ 1.4.1
32-
jgromes/RadioLib @ 7.1.0
33-
ESP32Async/AsyncTCP @ 3.4.9
34-
ESP32Async/ESPAsyncWebServer @ 3.9.3
32+
jgromes/RadioLib @ 7.6.0
33+
ESP32Async/AsyncTCP @ 3.4.10
34+
ESP32Async/ESPAsyncWebServer @ 3.10.0
3535
mikalhart/TinyGPSPlus @ 1.0.3
3636
paulstoffregen/Time @ 1.6.1
3737
peterus/esp-logger @ 1.0.0

platformio.ini

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ lib_ldf_mode = deep+
2222

2323
[env:esp32]
2424
extends = env
25-
platform = espressif32 @ 6.7.0
25+
platform = espressif32 @ 6.12.0
2626
board_build.partitions = huge_app.csv
2727
monitor_filters = esp32_exception_decoder
28-
board_build.embed_files =
28+
board_build.embed_files =
2929
data_embed/index.html.gz
3030
data_embed/style.css.gz
3131
data_embed/script.js.gz
3232
data_embed/bootstrap.css.gz
3333
data_embed/bootstrap.js.gz
3434
data_embed/favicon.png.gz
35-
extra_scripts =
35+
extra_scripts =
3636
pre:tools/compress.py
3737
debug_tool = esp-prog

src/LoRa_APRS_Tracker.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ ____________________________________________________________________*/
6969
#endif
7070

7171

72-
String versionDate = "2026-03-25";
73-
String versionNumber = "2.4.3";
72+
String versionDate = "2026-04-10";
73+
String versionNumber = "2.4.3.1";
7474
Configuration Config;
7575
HardwareSerial gpsSerial(1);
7676
TinyGPSPlus gps;

src/battery_utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ namespace BATTERY_Utils {
7878
double inputDivider = (1.0 / (560.0 + 100.0)) * 100.0; // The voltage divider is a 560k + 100k resistor in series, 100k on the low side.
7979
return ((voltage / inputDivider) * 1.11029) + 0.14431;
8080
#endif
81-
#if defined(TTGO_T_Beam_V0_7) || defined(TTGO_T_LORA32_V2_1_GPS) || defined(TTGO_T_LORA32_V2_1_GPS_915) || defined(TTGO_T_LORA32_V2_1_TNC) || defined(TTGO_T_LORA32_V2_1_TNC_915) || defined(ESP32_DIY_LoRa_GPS) || defined(ESP32_DIY_LoRa_GPS_915) || defined(ESP32_DIY_1W_LoRa_GPS) || defined(ESP32_DIY_1W_LoRa_GPS_915) || defined(ESP32_DIY_1W_LoRa_GPS_LLCC68) || defined(OE5HWN_MeshCom) || defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) || defined(ESP32S3_DIY_LoRa_GPS) || defined(ESP32S3_DIY_LoRa_GPS_915) || defined(TROY_LoRa_APRS) || defined(RPC_Electronics_1W_LoRa_GPS)
81+
#if defined(TTGO_T_Beam_V0_7) || defined(TTGO_T_LORA32_V2_1_GPS) || defined(TTGO_T_LORA32_V2_1_GPS_915) || defined(TTGO_T_LORA32_V2_1_TNC) || defined(TTGO_T_LORA32_V2_1_TNC_915) || defined(ESP32_DIY_LoRa_GPS) || defined(ESP32_DIY_LoRa_GPS_915) || defined(ESP32_DIY_1W_LoRa_GPS) || defined(ESP32_DIY_1W_LoRa_GPS_915) || defined(ESP32_DIY_1W_LoRa_GPS_LLCC68) || defined(OE5HWN_MeshCom) || defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) || defined(ESP32S3_DIY_LoRa_GPS) || defined(ESP32S3_DIY_LoRa_GPS_915) || defined(TROY_LoRa_APRS) || defined(RPC_Electronics_1W_LoRa_GPS) || defined(TTGO_LORA32_T3S3_V1_2_GPS)
8282
return (2 * (voltage + 0.1)) * (1 + (lora32BatReadingCorr/100)); // (2 x 100k voltage divider) 2 x voltage divider/+0.1 because ESP32 nonlinearity ~100mV ADC offset/extra correction
8383
#endif
8484
#if defined(TTGO_T_BEAM_1W)

src/configuration.cpp

Lines changed: 50 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ bool Configuration::writeFile() {
2929

3030
Serial.println("Saving config..");
3131

32-
StaticJsonDocument<3584> data;
32+
JsonDocument data;
3333
File configFile = SPIFFS.open("/tracker_conf.json", "w");
3434

3535
if (!configFile) {
@@ -138,15 +138,14 @@ bool Configuration::readFile() {
138138

139139
if (configFile) {
140140
bool needsRewrite = false;
141-
StaticJsonDocument<3584> data;
142-
141+
JsonDocument data;
143142
DeserializationError error = deserializeJson(data, configFile);
144143
if (error) {
145144
Serial.println("Failed to read file, using default configuration");
146145
}
147146

148-
if (!data["wifiAP"].containsKey("active") ||
149-
!data["wifiAP"].containsKey("password")) needsRewrite = true;
147+
if (data["wifiAP"]["active"].isNull() ||
148+
data["wifiAP"]["password"].isNull()) needsRewrite = true;
150149
wifiAP.active = data["wifiAP"]["active"] | true;
151150
wifiAP.password = data["wifiAP"]["password"] | "1234567890";
152151

@@ -168,19 +167,19 @@ bool Configuration::readFile() {
168167
beacons.push_back(bcn);
169168
}
170169

171-
if (!data["display"].containsKey("ecoMode") ||
172-
!data["display"].containsKey("timeout") ||
173-
!data["display"].containsKey("turn180") ||
174-
!data["display"].containsKey("showSymbol")) needsRewrite = true;
170+
if (data["display"]["ecoMode"].isNull() ||
171+
data["display"]["timeout"].isNull() ||
172+
data["display"]["turn180"].isNull() ||
173+
data["display"]["showSymbol"].isNull()) needsRewrite = true;
175174
display.ecoMode = data["display"]["ecoMode"] | false;
176175
display.timeout = data["display"]["timeout"] | 4;
177176
display.turn180 = data["display"]["turn180"] | false;
178177
display.showSymbol = data["display"]["showSymbol"] | true;
179178

180-
if (!data["bluetooth"].containsKey("active") ||
181-
!data["bluetooth"].containsKey("deviceName") ||
182-
!data["bluetooth"].containsKey("useBLE") ||
183-
!data["bluetooth"].containsKey("useKISS")) needsRewrite = true;
179+
if (data["bluetooth"]["active"].isNull() ||
180+
data["bluetooth"]["deviceName"].isNull() ||
181+
data["bluetooth"]["useBLE"].isNull() ||
182+
data["bluetooth"]["useKISS"].isNull()) needsRewrite = true;
184183
bluetooth.active = data["bluetooth"]["active"] | false;
185184
bluetooth.deviceName = data["bluetooth"]["deviceName"] | "LoRaTracker";
186185
#ifdef HAS_BT_CLASSIC
@@ -203,42 +202,42 @@ bool Configuration::readFile() {
203202
loraTypes.push_back(loraType);
204203
}
205204

206-
if (!data["battery"].containsKey("sendVoltage") ||
207-
!data["battery"].containsKey("voltageAsTelemetry") ||
208-
!data["battery"].containsKey("sendVoltageAlways") ||
209-
!data["battery"].containsKey("monitorVoltage") ||
210-
!data["battery"].containsKey("sleepVoltage")) needsRewrite = true;
205+
if (data["battery"]["sendVoltage"].isNull() ||
206+
data["battery"]["voltageAsTelemetry"].isNull() ||
207+
data["battery"]["sendVoltageAlways"].isNull() ||
208+
data["battery"]["monitorVoltage"].isNull() ||
209+
data["battery"]["sleepVoltage"].isNull()) needsRewrite = true;
211210
battery.sendVoltage = data["battery"]["sendVoltage"] | false;
212211
battery.voltageAsTelemetry = data["battery"]["voltageAsTelemetry"] | false;
213212
battery.sendVoltageAlways = data["battery"]["sendVoltageAlways"] | false;
214213
battery.monitorVoltage = data["battery"]["monitorVoltage"] | false;
215214
battery.sleepVoltage = data["battery"]["sleepVoltage"] | 2.9;
216215

217-
if (!data["telemetry"].containsKey("active") ||
218-
!data["telemetry"].containsKey("sendTelemetry") ||
219-
!data["telemetry"].containsKey("temperatureCorrection")) needsRewrite = true;
216+
if (data["telemetry"]["active"].isNull() ||
217+
data["telemetry"]["sendTelemetry"].isNull() ||
218+
data["telemetry"]["temperatureCorrection"].isNull()) needsRewrite = true;
220219
telemetry.active = data["telemetry"]["active"] | false;
221220
telemetry.sendTelemetry = data["telemetry"]["sendTelemetry"] | false;
222221
telemetry.temperatureCorrection = data["telemetry"]["temperatureCorrection"] | 0.0;
223222

224-
if (!data["winlink"].containsKey("password")) needsRewrite = true;
223+
if (data["winlink"]["password"].isNull()) needsRewrite = true;
225224
winlink.password = data["winlink"]["password"] | "NOPASS";
226225

227-
if (!data["notification"].containsKey("ledTx") ||
228-
!data["notification"].containsKey("ledTxPin") ||
229-
!data["notification"].containsKey("ledMessage") ||
230-
!data["notification"].containsKey("ledMessagePin") ||
231-
!data["notification"].containsKey("buzzerActive") ||
232-
!data["notification"].containsKey("buzzerPinTone") ||
233-
!data["notification"].containsKey("buzzerPinVcc") ||
234-
!data["notification"].containsKey("bootUpBeep") ||
235-
!data["notification"].containsKey("txBeep") ||
236-
!data["notification"].containsKey("messageRxBeep") ||
237-
!data["notification"].containsKey("stationBeep") ||
238-
!data["notification"].containsKey("lowBatteryBeep") ||
239-
!data["notification"].containsKey("shutDownBeep") ||
240-
!data["notification"].containsKey("ledFlashlight") ||
241-
!data["notification"].containsKey("ledFlashlightPin")) needsRewrite = true;
226+
if (data["notification"]["ledTx"].isNull() ||
227+
data["notification"]["ledTxPin"].isNull() ||
228+
data["notification"]["ledMessage"].isNull() ||
229+
data["notification"]["ledMessagePin"].isNull() ||
230+
data["notification"]["buzzerActive"].isNull() ||
231+
data["notification"]["buzzerPinTone"].isNull() ||
232+
data["notification"]["buzzerPinVcc"].isNull() ||
233+
data["notification"]["bootUpBeep"].isNull() ||
234+
data["notification"]["txBeep"].isNull() ||
235+
data["notification"]["messageRxBeep"].isNull() ||
236+
data["notification"]["stationBeep"].isNull() ||
237+
data["notification"]["lowBatteryBeep"].isNull() ||
238+
data["notification"]["shutDownBeep"].isNull() ||
239+
data["notification"]["ledFlashlight"].isNull() ||
240+
data["notification"]["ledFlashlightPin"].isNull()) needsRewrite = true;
242241
notification.ledTx = data["notification"]["ledTx"] | false;
243242
notification.ledTxPin = data["notification"]["ledTxPin"]| 13;
244243
notification.ledMessage = data["notification"]["ledMessage"] | false;
@@ -255,26 +254,26 @@ bool Configuration::readFile() {
255254
notification.ledFlashlight = data["notification"]["ledFlashlight"] | false;
256255
notification.ledFlashlightPin = data["notification"]["ledFlashlightPin"] | 14;
257256

258-
if (!data["pttTrigger"].containsKey("active") ||
259-
!data["pttTrigger"].containsKey("reverse") ||
260-
!data["pttTrigger"].containsKey("preDelay") ||
261-
!data["pttTrigger"].containsKey("postDelay") ||
262-
!data["pttTrigger"].containsKey("io_pin")) needsRewrite = true;
257+
if (data["pttTrigger"]["active"].isNull() ||
258+
data["pttTrigger"]["reverse"].isNull() ||
259+
data["pttTrigger"]["preDelay"].isNull() ||
260+
data["pttTrigger"]["postDelay"].isNull() ||
261+
data["pttTrigger"]["io_pin"].isNull()) needsRewrite = true;
263262
ptt.active = data["pttTrigger"]["active"] | false;
264263
ptt.reverse = data["pttTrigger"]["reverse"] | false;
265264
ptt.preDelay = data["pttTrigger"]["preDelay"] | 0;
266265
ptt.postDelay = data["pttTrigger"]["postDelay"] | 0;
267266
ptt.io_pin = data["pttTrigger"]["io_pin"] | 4;
268267

269-
if (!data["other"].containsKey("simplifiedTrackerMode") ||
270-
!data["other"].containsKey("sendCommentAfterXBeacons") ||
271-
!data["other"].containsKey("path") ||
272-
!data["other"].containsKey("nonSmartBeaconRate") ||
273-
!data["other"].containsKey("rememberStationTime") ||
274-
!data["other"].containsKey("standingUpdateTime") ||
275-
!data["other"].containsKey("sendAltitude") ||
276-
!data["other"].containsKey("disableGPS") ||
277-
!data["other"].containsKey("email")) needsRewrite = true;
268+
if (data["other"]["simplifiedTrackerMode"].isNull() ||
269+
data["other"]["sendCommentAfterXBeacons"].isNull() ||
270+
data["other"]["path"].isNull() ||
271+
data["other"]["nonSmartBeaconRate"].isNull() ||
272+
data["other"]["rememberStationTime"].isNull() ||
273+
data["other"]["standingUpdateTime"].isNull() ||
274+
data["other"]["sendAltitude"].isNull() ||
275+
data["other"]["disableGPS"].isNull() ||
276+
data["other"]["email"].isNull()) needsRewrite = true;
278277
simplifiedTrackerMode = data["other"]["simplifiedTrackerMode"] | false;
279278
sendCommentAfterXBeacons = data["other"]["sendCommentAfterXBeacons"] | 10;
280279
path = data["other"]["path"] | "WIDE1-1";

src/menu_utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ namespace MENU_Utils {
825825

826826
if (batteryConnected) {
827827
String batteryVoltage = BATTERY_Utils::getBatteryInfoVoltage();
828-
#if defined(TTGO_T_Beam_V0_7) || defined(TTGO_T_LORA32_V2_1_GPS) || defined(TTGO_T_LORA32_V2_1_GPS_915) || defined(TTGO_T_LORA32_V2_1_TNC) || defined(TTGO_T_LORA32_V2_1_TNC_915) || defined(HELTEC_V3_GPS) || defined(HELTEC_V3_TNC) || defined(HELTEC_V3_2_GPS) || defined(HELTEC_V3_2_TNC) || defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_WSL_V3_GPS_DISPLAY) || defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) || defined(LIGHTTRACKER_PLUS_1_0)
828+
#if defined(TTGO_T_Beam_V0_7) || defined(TTGO_T_LORA32_V2_1_GPS) || defined(TTGO_T_LORA32_V2_1_GPS_915) || defined(TTGO_T_LORA32_V2_1_TNC) || defined(TTGO_T_LORA32_V2_1_TNC_915) || defined(HELTEC_V3_GPS) || defined(HELTEC_V3_TNC) || defined(HELTEC_V3_2_GPS) || defined(HELTEC_V3_2_TNC) || defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_WSL_V3_GPS_DISPLAY) || defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS) || defined(LIGHTTRACKER_PLUS_1_0) || defined(TTGO_LORA32_T3S3_V1_2_GPS)
829829
sixthRowMainMenu = "Battery: ";
830830
sixthRowMainMenu += batteryVoltage;
831831
sixthRowMainMenu += "V ";
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/* Copyright (C) 2025 Ricardo Guzman - CA2RXU
2+
*
3+
* This file is part of LoRa APRS iGate.
4+
*
5+
* LoRa APRS iGate is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* LoRa APRS iGate is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with LoRa APRS iGate. If not, see <https://www.gnu.org/licenses/>.
17+
*/
18+
19+
#ifndef BOARD_PINOUT_H_
20+
#define BOARD_PINOUT_H_
21+
22+
// LoRa Radio
23+
#define HAS_SX1262
24+
#define HAS_TCXO
25+
#define RADIO_SCLK_PIN 5
26+
#define RADIO_MISO_PIN 3
27+
#define RADIO_MOSI_PIN 6
28+
#define RADIO_CS_PIN 7
29+
#define RADIO_RST_PIN 8
30+
#define RADIO_DIO1_PIN 33
31+
#define RADIO_BUSY_PIN 34
32+
#define RADIO_WAKEUP_PIN RADIO_DIO1_PIN
33+
#define GPIO_WAKEUP_PIN GPIO_SEL_33
34+
35+
// Display
36+
#undef OLED_SDA
37+
#undef OLED_SCL
38+
#undef OLED_RST
39+
40+
#define OLED_SDA 18
41+
#define OLED_SCL 17
42+
#define OLED_RST -1
43+
44+
// GPS
45+
#define GPS_RX 42
46+
#define GPS_TX 46
47+
48+
// OTHER
49+
#define BUTTON_PIN 0
50+
51+
#define BATTERY_PIN 1
52+
53+
#endif
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[env:ttgo_lora32_t3s3_v1_2_GPS]
2+
extends = env:esp32
3+
board = esp32-s3-devkitc-1
4+
board_build.mcu = esp32s3
5+
board_upload.flash_size = 4MB
6+
build_flags =
7+
${common.build_flags}
8+
${common.usb_flags}
9+
-D RADIOLIB_EXCLUDE_LR11X0=1
10+
-D RADIOLIB_EXCLUDE_SX127X=1
11+
-D RADIOLIB_EXCLUDE_SX128X=1
12+
-D TTGO_LORA32_T3S3_V1_2_GPS
13+
lib_deps =
14+
${common.lib_deps}

0 commit comments

Comments
 (0)