Compare commits

...

26 Commits

Author SHA1 Message Date
richonguzman 3c27e52df7 readme update for T3S3 2024-10-29 10:13:23 -03:00
richonguzman 3d5f3a4914 add Lilygo T3S3 2024-10-29 09:57:26 -03:00
richonguzman db6292ce59 added but reboots 2024-10-28 09:33:27 -03:00
richonguzman 7995d23779 cleaned 2024-10-25 15:56:03 -03:00
richonguzman 7f150bc4a0 minor letter fix 2024-10-25 15:22:24 -03:00
richonguzman ff5650f0c5 readme and build update 2024-10-25 12:50:15 -03:00
richonguzman a91f0f3f3c WIRE update 2024-10-25 11:50:57 -03:00
richonguzman c9577b6c21 more display testing 2024-10-25 11:08:00 -03:00
richonguzman 10cb7c6e45 added LightGateway 2024-10-25 10:42:15 -03:00
richonguzman 99052e594a typo fix 2024-10-23 12:09:24 -03:00
richonguzman a05917c494 update 2024-10-22 22:14:29 -03:00
richonguzman e2e935797f images update for V2.1 2024-10-21 12:26:40 -03:00
richonguzman 5ceff0064f small update to avoid sending gps = 0 2024-10-21 11:16:31 -03:00
richonguzman 8beb7c0465 readme update 2024-10-21 09:09:47 -03:00
richonguzman 112e38312d codingRate4 = 4 does not exists 2024-10-21 09:08:53 -03:00
richonguzman 5a1c6e7ed9 testing GPS 2024-10-21 08:28:35 -03:00
richonguzman 0defd5b289 added HWT with GPS 2024-10-14 17:48:14 -03:00
richonguzman cdac54c34e cleaning code 2024-10-14 17:44:01 -03:00
richonguzman 71e98487f6 readme and index update 2024-10-14 17:23:42 -03:00
richonguzman 510b5bdc59 index reads better 2024-10-14 17:15:56 -03:00
richonguzman 00db358cc3 GPS for iGate 2024-10-14 17:04:28 -03:00
richonguzman c0641986aa RxPacket freeze fix 2024-10-14 12:49:01 -03:00
richonguzman 55378bb9f3 readme Update for NTP update 2024-10-14 11:56:48 -03:00
richonguzman 79cf50a630 NTP time added 2024-10-14 11:44:22 -03:00
richonguzman 03ccd2b12e r up 2024-10-11 07:16:44 -03:00
richonguzman d5ffd26c3c double validation for DigiEcoMode start stop 2024-10-10 18:45:12 -03:00
35 changed files with 736 additions and 380 deletions
+4
View File
@@ -15,6 +15,8 @@ jobs:
chip: esp32 chip: esp32
- name: ttgo-lora32-v21_915 - name: ttgo-lora32-v21_915
chip: esp32 chip: esp32
- name: ttgo_lora32_t3s3_v1_2
chip: esp32s3
- name: heltec-lora32-v2 - name: heltec-lora32-v2
chip: esp32 chip: esp32
- name: heltec_wifi_lora_32_V3 - name: heltec_wifi_lora_32_V3
@@ -73,6 +75,8 @@ jobs:
chip: esp32c3 chip: esp32c3
- name: ESP32_C3_OctopusLab_LoRa - name: ESP32_C3_OctopusLab_LoRa
chip: esp32c3 chip: esp32c3
- name: QRPLabs_LightGateway_1_0
chip: esp32s3
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
+10 -4
View File
@@ -32,11 +32,13 @@ ____________________________________________________
(NOTE: all boards with 433-868-915 MHz versions) (NOTE: all boards with 433-868-915 MHz versions)
- TTGO Lilygo LoRa32 v2.1 / v1.6 (they work the same). - TTGO Lilygo LoRa32 T3S3 V1.2 and LoRa32 V2.1 (V1.6 is the same).
- TTGO T-Beam v1.0 , v1.1, v1.2 (also variations with SX1262 and SX1268 LoRa Modules). - TTGO T-Beam V1.0 , V1.1, V1.2 (also variations with SX1262 and SX1268 LoRa Modules).
- HELTEC V2, V3 , Wireless Stick, Wireless Stick Lite, HT-CT62, Wireless Tracker. - HELTEC V2, V3 , Wireless Stick, Wireless Stick Lite, HT-CT62, Wireless Tracker, Wireless Paper.
- QRP Labs LightGateway 1.0.
- ESP32 Wroom + SX1278 LoRa Module or Ebyte 400M30S (or 900M30S) 1W LoRa Module for a DIY Versions. - ESP32 Wroom + SX1278 LoRa Module or Ebyte 400M30S (or 900M30S) 1W LoRa Module for a DIY Versions.
@@ -50,6 +52,10 @@ ____________________________________________________
## Timeline (Versions): ## Timeline (Versions):
- 2024.10.29 Added LILYGO Lora32 T3S3 support.
- 2024.10.25 Added QRP Labs LightGateway 1.0 support.
- 2024.10.21 Boards with GPS can now send Real-GPS Beacon (also posible: GPS ambiguity of ~ 1 km).
- 2024.10.14 Received Packets in WebUI show real Local Time (NTP with GMT offset).
- 2024.10.08 New EcoMode for Remote Digirepeaters without WiFi/WiFiAP, Screen, Leds (Example: LILYGO LoRa32 uses only 24mA, with WifiAP and all was 150mA). APRS Message/Queries can start/stop this mode too. - 2024.10.08 New EcoMode for Remote Digirepeaters without WiFi/WiFiAP, Screen, Leds (Example: LILYGO LoRa32 uses only 24mA, with WifiAP and all was 150mA). APRS Message/Queries can start/stop this mode too.
- 2024.10.06 Cross Frequency Digirepeater Rules added. - 2024.10.06 Cross Frequency Digirepeater Rules added.
- 2024.09.23 Libraries Update for SDK3 - 2024.09.23 Libraries Update for SDK3
@@ -116,4 +122,4 @@ ____________________________________________________
__________________________________________ __________________________________________
# Hope You Enjoy this, 73 !! CA2RXU , Valparaiso, Chile # Hope You Enjoy this, 73! CA2RXU, Valparaiso, Chile
+3
View File
@@ -81,6 +81,9 @@
"username": "admin", "username": "admin",
"password": "" "password": ""
}, },
"ntp": {
"gmtCorrection": 0
},
"other": { "other": {
"rememberStationTime": 30, "rememberStationTime": 30,
"lowPowerMode": false, "lowPowerMode": false,
+84 -6
View File
@@ -62,11 +62,11 @@
<div class="container d-none" id="received-packets"> <div class="container d-none" id="received-packets">
<div class="row my-5 d-flex align-items-top"> <div class="row my-5 d-flex align-items-top">
<div class="col-12"> <div class="col-12">
<h3>Last 20 received packets list</h3> <h3>Last 10 received packets list</h3>
<table class="table mt-4"> <table class="table mt-4">
<thead> <thead>
<tr> <tr>
<th scope="col">Time*</th> <th scope="col">Time</th>
<th scope="col">Frame</th> <th scope="col">Frame</th>
<th scope="col">RSSI</th> <th scope="col">RSSI</th>
<th scope="col">SNR</th> <th scope="col">SNR</th>
@@ -77,7 +77,7 @@
</tbody> </tbody>
</table> </table>
<span>List refresh automatically every 15 seconds.</span><br> <span>List refresh automatically every 15 seconds.</span><br>
<small>* - For now time is measured from board boot up.</small> <small>(Local Time is NPT-Time adjusted with your GMT Offset)</small>
</div> </div>
</div> </div>
<hr /> <hr />
@@ -492,7 +492,7 @@
<label <label
for="beacon.sendViaAPRSIS" for="beacon.sendViaAPRSIS"
class="form-label" class="form-label"
>Send our beacon to >Send beacon to
APRS-IS APRS-IS
</label> </label>
</div> </div>
@@ -532,7 +532,7 @@
class="form-control" class="form-control"
required="" required=""
step="1" step="1"
min="1" min="15"
/> />
<span class="input-group-text" <span class="input-group-text"
>minutes >minutes
@@ -540,6 +540,36 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-12 mt-3">
<div class="form-check form-switch">
<input
type="checkbox"
name="beacon.gpsActive"
id="beacon.gpsActive"
class="form-check-input"
/>
<label
for="beacon.gpsActive"
class="form-label"
>Send Real-GPS Beacon <small>(Only for Boards with GPS Modules)</small>
</label>
</div>
</div>
<div class="col-12">
<div class="form-check form-switch">
<input
type="checkbox"
name="beacon.gpsAmbiguity"
id="beacon.gpsAmbiguity"
class="form-check-input"
/>
<label
for="beacon.gpsAmbiguity"
class="form-label"
>Send Real-GPS Beacon with Ambiguity <small>(~ 1 Km of Random Error)</small>
</label>
</div>
</div>
</div> </div>
</div> </div>
<hr /> <hr />
@@ -806,7 +836,6 @@
id="lora.codingRate4" id="lora.codingRate4"
required="" required=""
> >
<option value="4">4</option>
<option value="5">5</option> <option value="5">5</option>
<option value="6">6</option> <option value="6">6</option>
<option value="7">7</option> <option value="7">7</option>
@@ -1639,6 +1668,55 @@
</div> </div>
<hr /> <hr />
<div class="row my-5 d-flex align-items-top">
<div class="col-lg-3 col-sm-12">
<h5>
<svg
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
fill="currentColor"
class="bi bi-cloud-upload-fill"
viewBox="0 0 16 16"
>
<path
fill-rule="evenodd"
d="M8 0a5.53 5.53 0 0 0-3.594 1.342c-.766.66-1.321 1.52-1.464 2.383C1.266 4.095 0 5.555 0 7.318 0 9.366 1.708 11 3.781 11H7.5V5.707L5.354 7.854a.5.5 0 1 1-.708-.708l3-3a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 5.707V11h4.188C14.502 11 16 9.57 16 7.773c0-1.636-1.242-2.969-2.834-3.194C12.923 1.999 10.69 0 8 0m-.5 14.5V11h1v3.5a.5.5 0 0 1-1 0"
/>
</svg>
NTP
</h5>
<small
>Set your GMT Time Zone.
</small>
</div>
<div class="col-lg-9 col-sm-12">
<div class="col-12">
<label
for="ntp.gmtCorrection"
class="form-label"
>GMT Time Correction for accurate Local Time</label
>
<div class="input-group">
<input
type="number"
name="ntp.gmtCorrection"
id="ntp.gmtCorrection"
placeholder="0"
class="form-control"
step="1"
min="-23"
max="23"
/>
<span class="input-group-text"
>hours</span
>
</div>
</div>
</div>
</div>
<hr />
<div class="row my-5 d-flex align-items-top"> <div class="row my-5 d-flex align-items-top">
<div class="col-lg-3 col-sm-12"> <div class="col-lg-3 col-sm-12">
<h5> <h5>
+7 -5
View File
@@ -134,6 +134,9 @@ function loadSettings(settings) {
document.getElementById("beacon.sendViaAPRSIS").checked = settings.beacon.sendViaAPRSIS; document.getElementById("beacon.sendViaAPRSIS").checked = settings.beacon.sendViaAPRSIS;
document.getElementById("beacon.sendViaRF").checked = settings.beacon.sendViaRF; document.getElementById("beacon.sendViaRF").checked = settings.beacon.sendViaRF;
document.getElementById("beacon.gpsActive").checked = settings.beacon.gpsActive;
document.getElementById("beacon.gpsAmbiguity").checked = settings.beacon.gpsAmbiguity;
// Digi // Digi
document.getElementById("digi.mode").value = settings.digi.mode; document.getElementById("digi.mode").value = settings.digi.mode;
document.getElementById("digi.ecoMode").checked = settings.digi.ecoMode; document.getElementById("digi.ecoMode").checked = settings.digi.ecoMode;
@@ -208,6 +211,9 @@ function loadSettings(settings) {
document.getElementById("webadmin.username").value = settings.webadmin.username; document.getElementById("webadmin.username").value = settings.webadmin.username;
document.getElementById("webadmin.password").value = settings.webadmin.password; document.getElementById("webadmin.password").value = settings.webadmin.password;
// NTP
document.getElementById("ntp.gmtCorrection").value = settings.ntp.gmtCorrection;
// Experimental // Experimental
document.getElementById("other.backupDigiMode").checked = settings.other.backupDigiMode; document.getElementById("other.backupDigiMode").checked = settings.other.backupDigiMode;
@@ -507,13 +513,9 @@ function loadReceivedPackets(packets) {
packets.forEach((packet) => { packets.forEach((packet) => {
const element = document.createElement("tr"); const element = document.createElement("tr");
date.setTime(packet.millis);
const p = date.toUTCString().split(' ')
element.innerHTML = ` element.innerHTML = `
<td>${p[p.length-2]}</td> <td>${packet.rxTime}</td>
<td>${packet.packet}</td> <td>${packet.packet}</td>
<td>${packet.RSSI}</td> <td>${packet.RSSI}</td>
<td>${packet.SNR}</td> <td>${packet.SNR}</td>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Before

Width:  |  Height:  |  Size: 203 KiB

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

+184 -179
View File
@@ -28,6 +28,29 @@ extra_scripts =
debug_tool = esp-prog debug_tool = esp-prog
[common] [common]
build_flags =
-Werror -Wall
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
-DRADIOLIB_EXCLUDE_CC1101=1
-DRADIOLIB_EXCLUDE_NRF24=1
-DRADIOLIB_EXCLUDE_RF69=1
-DRADIOLIB_EXCLUDE_SX1231=1
-DRADIOLIB_EXCLUDE_SX1233=1
-DRADIOLIB_EXCLUDE_SI443X=1
-DRADIOLIB_EXCLUDE_RFM2X=1
-DRADIOLIB_EXCLUDE_AFSK=1
-DRADIOLIB_EXCLUDE_BELL=1
-DRADIOLIB_EXCLUDE_HELLSCHREIBER=1
-DRADIOLIB_EXCLUDE_MORSE=1
-DRADIOLIB_EXCLUDE_RTTY=1
-DRADIOLIB_EXCLUDE_SSTV=1
-DRADIOLIB_EXCLUDE_AX25=1
-DRADIOLIB_EXCLUDE_DIRECT_RECEIVE=1
-DRADIOLIB_EXCLUDE_BELL=1
-DRADIOLIB_EXCLUDE_PAGER=1
-DRADIOLIB_EXCLUDE_FSK4=1
-DRADIOLIB_EXCLUDE_APRS=1
-DRADIOLIB_EXCLUDE_LORAWAN=1
lib_deps = lib_deps =
jgromes/RadioLib @ 6.6.0 jgromes/RadioLib @ 6.6.0
mikalhart/TinyGPSPlus @ 1.0.3 mikalhart/TinyGPSPlus @ 1.0.3
@@ -40,281 +63,252 @@ lib_deps =
ayushsharma82/ElegantOTA @ 3.1.5 ayushsharma82/ElegantOTA @ 3.1.5
mathieucarbou/ESPAsyncWebServer @ 3.2.3 mathieucarbou/ESPAsyncWebServer @ 3.2.3
mathieucarbou/AsyncTCP @ 3.2.5 mathieucarbou/AsyncTCP @ 3.2.5
arduino-libraries/NTPClient @ 3.2.1
display_libs =
adafruit/Adafruit GFX Library @ 1.11.9
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ttgo-lora32-v21] [env:ttgo-lora32-v21]
board = ttgo-lora32-v21 board = ttgo-lora32-v21
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_LORA32_V2_1 -DTTGO_LORA32_V2_1
-DHAS_SX1278 -DHAS_SX1278
-DHAS_ADC_CALIBRATION -DHAS_ADC_CALIBRATION
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ttgo-lora32-v21_915] [env:ttgo-lora32-v21_915]
board = ttgo-lora32-v21 board = ttgo-lora32-v21
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_LORA32_V2_1_915 -DTTGO_LORA32_V2_1_915
-DHAS_SX1276 -DHAS_SX1276
-DHAS_ADC_CALIBRATION -DHAS_ADC_CALIBRATION
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:heltec-lora32-v2] [env:heltec-lora32-v2]
board = ttgo-lora32-v21 board = ttgo-lora32-v21
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_V2 -DHELTEC_V2
-DHAS_SX1278 -DHAS_SX1278
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:heltec_wifi_lora_32_V3] [env:heltec_wifi_lora_32_V3]
board = heltec_wifi_lora_32_V3 board = heltec_wifi_lora_32_V3
board_build.mcu = esp32s3 board_build.mcu = esp32s3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_V3 -DHELTEC_V3
-DHAS_SX1262 -DHAS_SX1262
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:heltec_wireless_stick] [env:heltec_wireless_stick]
board = esp32-s3-devkitc-1 board = esp32-s3-devkitc-1
board_build.mcu = esp32s3 board_build.mcu = esp32s3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_WS -DHELTEC_WS
-DHAS_SX1262 -DHAS_SX1262
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:heltec_wireless_stick_lite_v3] [env:heltec_wireless_stick_lite_v3]
board = esp32-s3-devkitc-1 board = esp32-s3-devkitc-1
board_build.mcu = esp32s3 board_build.mcu = esp32s3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_WSL_V3 -DHELTEC_WSL_V3
-DHAS_SX1262 -DHAS_SX1262
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
[env:heltec_wireless_stick_lite_v3_display] [env:heltec_wireless_stick_lite_v3_display]
board = esp32-s3-devkitc-1 board = esp32-s3-devkitc-1
board_build.mcu = esp32s3 board_build.mcu = esp32s3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_WSL_V3_DISPLAY -DHELTEC_WSL_V3_DISPLAY
-DHAS_SX1262 -DHAS_SX1262
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
[env:ESP32_DIY_LoRa] [env:ESP32_DIY_LoRa]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_LoRa -DESP32_DIY_LoRa
-DHAS_SX1278 -DHAS_SX1278
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ESP32_DIY_LoRa_915] [env:ESP32_DIY_LoRa_915]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_LoRa_915 -DESP32_DIY_LoRa_915
-DHAS_SX1276 -DHAS_SX1276
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ESP32_DIY_1W_LoRa] [env:ESP32_DIY_1W_LoRa]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_1W_LoRa -DESP32_DIY_1W_LoRa
-DHAS_SX1268 -DHAS_SX1268
-DHAS_1W_LORA -DHAS_1W_LORA
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ESP32_DIY_1W_LoRa_915] [env:ESP32_DIY_1W_LoRa_915]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_1W_LoRa_915 -DESP32_DIY_1W_LoRa_915
-DHAS_SX1262 -DHAS_SX1262
-DHAS_1W_LORA -DHAS_1W_LORA
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ESP32_DIY_1W_LoRa_LLCC68] [env:ESP32_DIY_1W_LoRa_LLCC68]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_1W_LoRa_LLCC68 -DESP32_DIY_1W_LoRa_LLCC68
-DHAS_LLCC68 -DHAS_LLCC68
-DHAS_1W_LORA -DHAS_1W_LORA
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ESP32_DIY_1W_LoRa_Mesh_V1_2] [env:ESP32_DIY_1W_LoRa_Mesh_V1_2]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_1W_LoRa_Mesh_V1_2 -DESP32_DIY_1W_LoRa_Mesh_V1_2
-DHAS_SX1268 -DHAS_SX1268
-DHAS_1W_LORA -DHAS_1W_LORA
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ttgo-t-beam-v1_2] [env:ttgo-t-beam-v1_2]
board = ttgo-t-beam board = ttgo-t-beam
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_Beam_V1_2 -DTTGO_T_BEAM_V1_2
-DHAS_SX1278 -DHAS_SX1278
-DHAS_AXP2101 -DHAS_AXP2101
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 -DHAS_GPS
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
lewisxhe/XPowersLib @ 0.2.4 lewisxhe/XPowersLib @ 0.2.4
[env:ttgo-t-beam-v1_2_915] [env:ttgo-t-beam-v1_2_915]
board = ttgo-t-beam board = ttgo-t-beam
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_Beam_V1_2_915 -DTTGO_T_BEAM_V1_2_915
-DHAS_SX1276 -DHAS_SX1276
-DHAS_AXP2101 -DHAS_AXP2101
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 -DHAS_GPS
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
lewisxhe/XPowersLib @ 0.2.4 lewisxhe/XPowersLib @ 0.2.4
[env:ttgo-t-beam-v1] [env:ttgo-t-beam-v1]
board = ttgo-t-beam board = ttgo-t-beam
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_Beam_V1_0 -DTTGO_T_BEAM_V1_0
-DHAS_SX1278 -DHAS_SX1278
-DHAS_AXP192 -DHAS_AXP192
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 -DHAS_GPS
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
lewisxhe/XPowersLib @ 0.2.4 lewisxhe/XPowersLib @ 0.2.4
[env:ttgo-t-beam-v1_915] [env:ttgo-t-beam-v1_915]
board = ttgo-t-beam board = ttgo-t-beam
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_Beam_V1_0_915 -DTTGO_T_BEAM_V1_0_915
-DHAS_SX1276 -DHAS_SX1276
-DHAS_AXP192 -DHAS_AXP192
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 -DHAS_GPS
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
lewisxhe/XPowersLib @ 0.2.4 lewisxhe/XPowersLib @ 0.2.4
[env:ttgo-t-beam-v1_SX1268] [env:ttgo-t-beam-v1_SX1268]
board = ttgo-t-beam board = ttgo-t-beam
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_Beam_V1_0_SX1268 -DTTGO_T_BEAM_V1_0_SX1268
-DHAS_SX1268 -DHAS_SX1268
-DHAS_AXP192 -DHAS_AXP192
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 -DHAS_GPS
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
lewisxhe/XPowersLib @ 0.2.4 lewisxhe/XPowersLib @ 0.2.4
[env:ttgo-t-beam-v1_2_SX1262] [env:ttgo-t-beam-v1_2_SX1262]
board = ttgo-t-beam board = ttgo-t-beam
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DTTGO_T_Beam_V1_2_SX1262 -DTTGO_T_BEAM_V1_2_SX1262
-DHAS_SX1262 -DHAS_SX1262
-DHAS_AXP2101 -DHAS_AXP2101
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 -DHAS_GPS
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
lewisxhe/XPowersLib @ 0.2.4 lewisxhe/XPowersLib @ 0.2.4
[env:ESP32_DIY_LoRa_A7670] [env:ESP32_DIY_LoRa_A7670]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_LoRa_A7670 -DESP32_DIY_LoRa_A7670
-DHAS_SX1278 -DHAS_SX1278
-DHAS_A7670 -DHAS_A7670
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
vshymanskyy/TinyGSM @ 0.12.0 vshymanskyy/TinyGSM @ 0.12.0
vshymanskyy/StreamDebugger @ 1.0.1 vshymanskyy/StreamDebugger @ 1.0.1
[env:ESP32_DIY_LoRa_A7670_915] [env:ESP32_DIY_LoRa_A7670_915]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_DIY_LoRa_A7670_915 -DESP32_DIY_LoRa_A7670_915
-DHAS_SX1276 -DHAS_SX1276
-DHAS_A7670 -DHAS_A7670
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
vshymanskyy/TinyGSM @ 0.12.0 vshymanskyy/TinyGSM @ 0.12.0
vshymanskyy/StreamDebugger @ 1.0.1 vshymanskyy/StreamDebugger @ 1.0.1
@@ -322,10 +316,12 @@ lib_deps =
[env:heltec_wireless_tracker] [env:heltec_wireless_tracker]
board = esp32-s3-devkitc-1 board = esp32-s3-devkitc-1
board_build.mcu = esp32s3 board_build.mcu = esp32s3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_WIRELESS_TRACKER -DHELTEC_WIRELESS_TRACKER
-DHAS_SX1262 -DHAS_SX1262
-DHAS_GPS
-DGPS_BAUDRATE=115200
-DHAS_TFT -DHAS_TFT
-D USER_SETUP_LOADED -D USER_SETUP_LOADED
-D TFT_WIDTH=80 -D TFT_WIDTH=80
@@ -351,130 +347,139 @@ build_flags =
-D USE_HSPI_PORT -D USE_HSPI_PORT
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_CDC_ON_BOOT=1
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
bodmer/TFT_eSPI @ 2.5.43 bodmer/TFT_eSPI @ 2.5.43
[env:heltec_ht-ct62] [env:heltec_ht-ct62]
board = heltec_wireless_stick_lite board = heltec_wireless_stick_lite
board_build.mcu = esp32c3 board_build.mcu = esp32c3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_HTCT62 -DHELTEC_HTCT62
-DHAS_SX1262 -DHAS_SX1262
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:heltec_wireless_paper] [env:heltec_wireless_paper]
board = esp32-s3-devkitc-1 board = esp32-s3-devkitc-1
board_build.mcu = esp32s3 board_build.mcu = esp32s3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DHELTEC_WP -DHELTEC_WP
-DHAS_SX1262 -DHAS_SX1262
-DHAS_EPAPER -DHAS_EPAPER
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
[env:OE5HWN_MeshCom] [env:OE5HWN_MeshCom]
board = esp32dev board = esp32dev
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DOE5HWN_MeshCom -DOE5HWN_MeshCom
-DHAS_SX1268 -DHAS_SX1268
-DHAS_1W_LORA -DHAS_1W_LORA
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:WEMOS-LOLIN32-OLED-DIY] [env:WEMOS-LOLIN32-OLED-DIY]
board = lolin32 board = lolin32
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DWEMOS_LOLIN32_OLED_DIY_LoRa -DWEMOS_LOLIN32_OLED_DIY_LoRa
-DHAS_SX1278 -DHAS_SX1278
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:WEMOS-D1-R32-RA02] [env:WEMOS-D1-R32-RA02]
board = wemos_d1_uno32 board = wemos_d1_uno32
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DWEMOS_D1_R32_RA02 -DWEMOS_D1_R32_RA02
-DHAS_SX1278 -DHAS_SX1278
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:WEMOS_S2_MINI_DIY_LoRa] [env:WEMOS_S2_MINI_DIY_LoRa]
board = lolin_s2_mini board = lolin_s2_mini
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DWEMOS_S2_MINI_DIY_LoRa -DWEMOS_S2_MINI_DIY_LoRa
-DHAS_SX1278 -DHAS_SX1278
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1 lib_deps =
lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:esp32c3_DIY_1W_LoRa] [env:esp32c3_DIY_1W_LoRa]
board = esp32-c3-devkitm-1 board = esp32-c3-devkitm-1
board_build.mcu = esp32c3 board_build.mcu = esp32c3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32C3_DIY_1W_LoRa -DESP32C3_DIY_1W_LoRa
-DHAS_SX1268 -DHAS_SX1268
-DHAS_1W_LORA -DHAS_1W_LORA
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_CDC_ON_BOOT=1
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:esp32c3_DIY_1W_LoRa_915] [env:esp32c3_DIY_1W_LoRa_915]
board = esp32-c3-devkitm-1 board = esp32-c3-devkitm-1
board_build.mcu = esp32c3 board_build.mcu = esp32c3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32C3_DIY_1W_LoRa_915 -DESP32C3_DIY_1W_LoRa_915
-DHAS_SX1262 -DHAS_SX1262
-DHAS_1W_LORA -DHAS_1W_LORA
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_CDC_ON_BOOT=1
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:ESP32_C3_OctopusLab_LoRa] [env:ESP32_C3_OctopusLab_LoRa]
board = esp32-c3-devkitm-1 board = esp32-c3-devkitm-1
board_build.mcu = esp32c3 board_build.mcu = esp32c3
build_flags = build_flags =
-Werror -Wall ${common.build_flags}
-DESP32_C3_OctopusLab_LoRa -DESP32_C3_OctopusLab_LoRa
-DHAS_SX1268 -DHAS_SX1268
-DRADIO_HAS_XTAL -DRADIO_HAS_XTAL
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_CDC_ON_BOOT=1
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
lib_deps = lib_deps =
${common.lib_deps} ${common.lib_deps}
adafruit/Adafruit GFX Library @ 1.11.9 ${common.display_libs}
adafruit/Adafruit SSD1306 @ 2.5.10
[env:QRPLabs_LightGateway_1_0]
board = esp32-s3-devkitc-1
board_build.mcu = esp32s3
build_flags =
${common.build_flags}
-DLIGHTGATEWAY_1_0
-DHAS_SX1268
-DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
lib_deps =
${common.lib_deps}
${common.display_libs}
[env:ttgo_lora32_t3s3_v1_2]
board = esp32-s3-devkitc-1
board_build.mcu = esp32s3
board_upload.flash_size = 4MB
build_flags =
${common.build_flags}
-DTTGO_LORA32_T3S3_V1_2
-DHAS_SX1262
-DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
lib_deps =
${common.lib_deps}
${common.display_libs}
+21 -13
View File
@@ -13,6 +13,7 @@
______________________________________________________________________________________________________________*/ ______________________________________________________________________________________________________________*/
#include <ElegantOTA.h> #include <ElegantOTA.h>
#include <TinyGPS++.h>
#include <Arduino.h> #include <Arduino.h>
#include <WiFi.h> #include <WiFi.h>
#include <vector> #include <vector>
@@ -31,6 +32,7 @@ ________________________________________________________________________________
#include "gps_utils.h" #include "gps_utils.h"
#include "web_utils.h" #include "web_utils.h"
#include "tnc_utils.h" #include "tnc_utils.h"
#include "ntp_utils.h"
#include "wx_utils.h" #include "wx_utils.h"
#include "display.h" #include "display.h"
#include "utils.h" #include "utils.h"
@@ -38,19 +40,23 @@ ________________________________________________________________________________
#include "A7670_utils.h" #include "A7670_utils.h"
#endif #endif
String versionDate = "2024.10.08"; String versionDate = "2024.10.29";
Configuration Config; Configuration Config;
WiFiClient espClient; WiFiClient espClient;
#ifdef HAS_GPS
HardwareSerial gpsSerial(1);
TinyGPSPlus gps;
#endif
uint8_t myWiFiAPIndex = 0; uint8_t myWiFiAPIndex = 0;
int myWiFiAPSize = Config.wifiAPs.size(); int myWiFiAPSize = Config.wifiAPs.size();
WiFi_AP *currentWiFi = &Config.wifiAPs[myWiFiAPIndex]; WiFi_AP *currentWiFi = &Config.wifiAPs[myWiFiAPIndex];
bool isUpdatingOTA = false; bool isUpdatingOTA = false;
uint32_t lastBatteryCheck = 0; uint32_t lastBatteryCheck = 0;
bool backUpDigiMode = false; bool backUpDigiMode = false;
bool modemLoggedToAPRSIS = false; bool modemLoggedToAPRSIS = false;
std::vector<ReceivedPacket> receivedPackets; std::vector<ReceivedPacket> receivedPackets;
@@ -64,11 +70,11 @@ void setup() {
Utils::setupDisplay(); Utils::setupDisplay();
LoRa_Utils::setup(); LoRa_Utils::setup();
Utils::validateFreqs(); Utils::validateFreqs();
GPS_Utils::generateBeacons(); GPS_Utils::setup();
#ifdef STARTUP_DELAY // (TEST) just to wait for WiFi init of Routers #ifdef STARTUP_DELAY // (TEST) just to wait for WiFi init of Routers
displayShow("", " STARTUP DELAY ...", "", "", 0); displayShow("", " STARTUP DELAY ...", "", "", 0);
delay(STARTUP_DELAY * 60 * 1000); delay(STARTUP_DELAY * 60 * 1000);
#endif #endif
#ifdef HELTEC_HTCT62 #ifdef HELTEC_HTCT62
@@ -113,6 +119,7 @@ void setup() {
#endif #endif
DIGI_Utils::checkEcoMode(); DIGI_Utils::checkEcoMode();
WIFI_Utils::setup(); WIFI_Utils::setup();
NTP_Utils::setup();
SYSLOG_Utils::setup(); SYSLOG_Utils::setup();
WX_Utils::setup(); WX_Utils::setup();
WEB_Utils::setup(); WEB_Utils::setup();
@@ -145,6 +152,7 @@ void loop() {
if (Config.aprs_is.active && (WiFi.status() == WL_CONNECTED) && !espClient.connected()) APRS_IS_Utils::connect(); if (Config.aprs_is.active && (WiFi.status() == WL_CONNECTED) && !espClient.connected()) APRS_IS_Utils::connect();
#endif #endif
NTP_Utils::update();
TNC_Utils::loop(); TNC_Utils::loop();
Utils::checkDisplayInterval(); Utils::checkDisplayInterval();
+1 -1
View File
@@ -23,7 +23,7 @@ int telemetryCounter = random(1,999);
#ifdef HAS_ADC_CALIBRATION #ifdef HAS_ADC_CALIBRATION
#include <esp_adc_cal.h> #include <esp_adc_cal.h>
#if defined(TTGO_T_LORA32_V2_1) || defined(TTGO_T_LORA32_V2_1_915) #if defined(TTGO_LORA32_V2_1) || defined(TTGO_LORA32_V2_1_915)
#define InternalBattery_ADC_Channel ADC1_CHANNEL_7 // t_lora32 pin35 #define InternalBattery_ADC_Channel ADC1_CHANNEL_7 // t_lora32 pin35
#define ExternalVoltage_ADC_Channel ADC1_CHANNEL_6 // t_lora32 pin34 #define ExternalVoltage_ADC_Channel ADC1_CHANNEL_6 // t_lora32 pin34
#endif #endif
+139 -82
View File
@@ -9,67 +9,67 @@
// LORA MODULES // LORA MODULES
#if defined(TTGO_T_LORA32_V2_1) || defined(HELTEC_V2) || defined(ESP32_DIY_LoRa) || defined(TTGO_T_Beam_V1_2) || defined(TTGO_T_Beam_V1_0) || defined(TTGO_T_LORA32_V2_1_915) || defined(ESP32_DIY_LoRa_915) || defined(TTGO_T_Beam_V1_2_915) || defined(TTGO_T_Beam_V1_0_915) #if defined(TTGO_LORA32_V2_1) || defined(HELTEC_V2) || defined(ESP32_DIY_LoRa) || defined(TTGO_T_BEAM_V1_2) || defined(TTGO_T_BEAM_V1_0) || defined(TTGO_LORA32_V2_1_915) || defined(ESP32_DIY_LoRa_915) || defined(TTGO_T_BEAM_V1_2_915) || defined(TTGO_T_BEAM_V1_0_915)
#define RADIO_SCLK_PIN 5 // GPIO5 - SX1278 SCK #define RADIO_SCLK_PIN 5 // GPIO5 - SX1278 SCK
#define RADIO_MISO_PIN 19 // GPIO19 - SX1278 MISO #define RADIO_MISO_PIN 19 // GPIO19 - SX1278 MISO
#define RADIO_MOSI_PIN 27 // GPIO27 - SX1278 MOSI #define RADIO_MOSI_PIN 27 // GPIO27 - SX1278 MOSI
#define RADIO_CS_PIN 18 // GPIO18 - SX1278 CS ---> NSS #define RADIO_CS_PIN 18 // GPIO18 - SX1278 CS ---> NSS
#define RADIO_RST_PIN 14 // GPIO14 - SX1278 RST #define RADIO_RST_PIN 14 // GPIO14 - SX1278 RST
#define RADIO_BUSY_PIN 26 // GPIO26 - SX1278 IRQ ---->DIO0 #define RADIO_BUSY_PIN 26 // GPIO26 - SX1278 IRQ ---->DIO0
#endif #endif
#if defined(HELTEC_V3) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY) || defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_WS) || defined(HELTEC_WP) #if defined(HELTEC_V3) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY) || defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_WS) || defined(HELTEC_WP)
#define RADIO_SCLK_PIN 9 // SX1262 SCK #define RADIO_SCLK_PIN 9 // SX1262 SCK
#define RADIO_MISO_PIN 11 // SX1262 MISO #define RADIO_MISO_PIN 11 // SX1262 MISO
#define RADIO_MOSI_PIN 10 // SX1262 MOSI #define RADIO_MOSI_PIN 10 // SX1262 MOSI
#define RADIO_CS_PIN 8 // SX1262 NSS #define RADIO_CS_PIN 8 // SX1262 NSS
#define RADIO_RST_PIN 12 // SX1262 RST #define RADIO_RST_PIN 12 // SX1262 RST
#define RADIO_DIO1_PIN 14 // SX1262 DIO1 #define RADIO_DIO1_PIN 14 // SX1262 DIO1
#define RADIO_BUSY_PIN 13 // SX1262 BUSY #define RADIO_BUSY_PIN 13 // SX1262 BUSY
#endif #endif
#if defined(ESP32_DIY_1W_LoRa) || defined(ESP32_DIY_1W_LoRa_915) || defined(ESP32_DIY_1W_LoRa_LLCC68) // Ebyte E22 400M30S (SX1268) or E22 900M30S (SX1262) or E220 LLCC68 #if defined(ESP32_DIY_1W_LoRa) || defined(ESP32_DIY_1W_LoRa_915) || defined(ESP32_DIY_1W_LoRa_LLCC68) // Ebyte E22 400M30S (SX1268) or E22 900M30S (SX1262) or E220 LLCC68
#define RADIO_SCLK_PIN 18 #define RADIO_SCLK_PIN 18
#define RADIO_MISO_PIN 19 #define RADIO_MISO_PIN 19
#define RADIO_MOSI_PIN 23 #define RADIO_MOSI_PIN 23
#define RADIO_CS_PIN 5 #define RADIO_CS_PIN 5
#define RADIO_RST_PIN 27 #define RADIO_RST_PIN 27
#define RADIO_DIO1_PIN 12 #define RADIO_DIO1_PIN 12
#define RADIO_BUSY_PIN 14 #define RADIO_BUSY_PIN 14
#define RADIO_RXEN 32 #define RADIO_RXEN 32
#define RADIO_TXEN 25 #define RADIO_TXEN 25
#endif #endif
#if defined(ESP32_DIY_1W_LoRa_Mesh_V1_2) // https://github.com/NanoVHF/Meshtastic-DIY/tree/main/PCB/ESP-32-devkit_EBYTE-E22/Mesh-v1.02-2LCD-FreePins #if defined(ESP32_DIY_1W_LoRa_Mesh_V1_2) // https://github.com/NanoVHF/Meshtastic-DIY/tree/main/PCB/ESP-32-devkit_EBYTE-E22/Mesh-v1.02-2LCD-FreePins
#define RADIO_SCLK_PIN 5 #define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 19 #define RADIO_MISO_PIN 19
#define RADIO_MOSI_PIN 27 #define RADIO_MOSI_PIN 27
#define RADIO_CS_PIN 18 #define RADIO_CS_PIN 18
#define RADIO_RST_PIN 23 #define RADIO_RST_PIN 23
#define RADIO_DIO1_PIN 33 #define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 32 #define RADIO_BUSY_PIN 32
#define RADIO_RXEN 14 #define RADIO_RXEN 14
#define RADIO_TXEN 13 #define RADIO_TXEN 13
#endif #endif
#ifdef WEMOS_LOLIN32_OLED_DIY_LoRa #ifdef WEMOS_LOLIN32_OLED_DIY_LoRa
#define RADIO_SCLK_PIN 15 #define RADIO_SCLK_PIN 15
#define RADIO_MISO_PIN 13 #define RADIO_MISO_PIN 13
#define RADIO_MOSI_PIN 12 #define RADIO_MOSI_PIN 12
#define RADIO_CS_PIN 14 #define RADIO_CS_PIN 14
#define RADIO_RST_PIN 2 #define RADIO_RST_PIN 2
#define RADIO_BUSY_PIN 25 #define RADIO_BUSY_PIN 25
#endif #endif
#if defined(TTGO_T_Beam_V1_0_SX1268) || defined(TTGO_T_Beam_V1_2_SX1262) #if defined(TTGO_T_BEAM_V1_0_SX1268) || defined(TTGO_T_BEAM_V1_2_SX1262)
#define RADIO_SCLK_PIN 5 #define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 19 #define RADIO_MISO_PIN 19
#define RADIO_MOSI_PIN 27 #define RADIO_MOSI_PIN 27
#define RADIO_CS_PIN 18 #define RADIO_CS_PIN 18
#define RADIO_DIO0_PIN 26 #define RADIO_DIO0_PIN 26
#define RADIO_RST_PIN 23 #define RADIO_RST_PIN 23
#define RADIO_DIO1_PIN 33 #define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 32 #define RADIO_BUSY_PIN 32
#endif #endif
#if defined(OE5HWN_MeshCom) #if defined(OE5HWN_MeshCom)
@@ -85,39 +85,39 @@
#endif #endif
#if defined(HELTEC_HTCT62) #if defined(HELTEC_HTCT62)
#define RADIO_SCLK_PIN 10 // SX1262 SCK #define RADIO_SCLK_PIN 10 // SX1262 SCK
#define RADIO_MISO_PIN 6 // SX1262 MISO #define RADIO_MISO_PIN 6 // SX1262 MISO
#define RADIO_MOSI_PIN 7 // SX1262 MOSI #define RADIO_MOSI_PIN 7 // SX1262 MOSI
#define RADIO_CS_PIN 8 // SX1262 NSS #define RADIO_CS_PIN 8 // SX1262 NSS
#define RADIO_RST_PIN 5 // SX1262 RST #define RADIO_RST_PIN 5 // SX1262 RST
#define RADIO_DIO1_PIN 3 // SX1262 DIO1 #define RADIO_DIO1_PIN 3 // SX1262 DIO1
#define RADIO_BUSY_PIN 4 // SX1262 BUSY #define RADIO_BUSY_PIN 4 // SX1262 BUSY
#endif #endif
#if defined(ESP32_DIY_LoRa_A7670) || defined(ESP32_DIY_LoRa_A7670_915) #if defined(ESP32_DIY_LoRa_A7670) || defined(ESP32_DIY_LoRa_A7670_915)
#define RADIO_SCLK_PIN 18 #define RADIO_SCLK_PIN 18
#define RADIO_MISO_PIN 19 #define RADIO_MISO_PIN 19
#define RADIO_MOSI_PIN 23 #define RADIO_MOSI_PIN 23
#define RADIO_CS_PIN 2 #define RADIO_CS_PIN 2
#define RADIO_RST_PIN 0 #define RADIO_RST_PIN 0
#define RADIO_BUSY_PIN 32 #define RADIO_BUSY_PIN 32
#define A7670_PWR_PIN 4 #define A7670_PWR_PIN 4
#define A7670_ResetPin 5 #define A7670_ResetPin 5
#define A7670_TX_PIN 26 #define A7670_TX_PIN 26
#define A7670_RX_PIN 27 #define A7670_RX_PIN 27
#endif #endif
#ifdef WEMOS_D1_R32_RA02 #ifdef WEMOS_D1_R32_RA02
#define RADIO_SCLK_PIN 18 #define RADIO_SCLK_PIN 18
#define RADIO_MISO_PIN 19 #define RADIO_MISO_PIN 19
#define RADIO_MOSI_PIN 23 #define RADIO_MOSI_PIN 23
#define RADIO_CS_PIN 5 #define RADIO_CS_PIN 5
#define RADIO_BUSY_PIN 12 #define RADIO_BUSY_PIN 12
#define RADIO_RST_PIN 13 #define RADIO_RST_PIN 13
#define RADIO_DIO1_PIN 14 #define RADIO_DIO1_PIN 14
#define OLED_SDA 21 #define OLED_SDA 21
#define OLED_SCL 22 #define OLED_SCL 22
#define OLED_RST 36 #define OLED_RST 36
#endif #endif
#if defined(ESP32C3_DIY_1W_LoRa) || defined(ESP32C3_DIY_1W_LoRa_915) #if defined(ESP32C3_DIY_1W_LoRa) || defined(ESP32C3_DIY_1W_LoRa_915)
@@ -133,17 +133,30 @@
#endif #endif
#ifdef WEMOS_S2_MINI_DIY_LoRa #ifdef WEMOS_S2_MINI_DIY_LoRa
#define RADIO_SCLK_PIN 36 #define RADIO_SCLK_PIN 36
#define RADIO_MISO_PIN 37 #define RADIO_MISO_PIN 37
#define RADIO_MOSI_PIN 35 #define RADIO_MOSI_PIN 35
#define RADIO_CS_PIN 34 #define RADIO_CS_PIN 34
#define RADIO_BUSY_PIN 38 #define RADIO_BUSY_PIN 38
#define RADIO_RST_PIN 33 #define RADIO_RST_PIN 33
#endif
#ifdef LIGHTGATEWAY_1_0
#define RADIO_VCC_PIN 21
#define RADIO_SCLK_PIN 12
#define RADIO_MISO_PIN 13
#define RADIO_MOSI_PIN 11
#define RADIO_CS_PIN 10
#define RADIO_RST_PIN 9
#define RADIO_DIO1_PIN 5
#define RADIO_BUSY_PIN 6
#define RADIO_RXEN 42
#define RADIO_TXEN 14
#endif #endif
// OLED // OLED
#if defined(TTGO_T_LORA32_V2_1) || defined(ESP32_DIY_LoRa) || defined(ESP32_DIY_1W_LoRa) || defined(TTGO_T_Beam_V1_0) || defined(TTGO_T_Beam_V1_2) || defined(TTGO_T_Beam_V1_0_SX1268) || defined(TTGO_T_Beam_V1_2_SX1262) || defined(OE5HWN_MeshCom) || defined(ESP32_DIY_LoRa_A7670) || defined(TTGO_T_LORA32_V2_1_915) || defined(ESP32_DIY_LoRa_915) || defined(TTGO_T_Beam_V1_0_915) || defined(TTGO_T_Beam_V1_2_915) || defined(ESP32_DIY_LoRa_A7670_915) || defined(ESP32_DIY_1W_LoRa_915) || defined(ESP32_DIY_1W_LoRa_LLCC68) || defined(ESP32_DIY_1W_LoRa_Mesh_V1_2) #if defined(TTGO_LORA32_V2_1) || defined(ESP32_DIY_LoRa) || defined(ESP32_DIY_1W_LoRa) || defined(TTGO_T_BEAM_V1_0) || defined(TTGO_T_BEAM_V1_2) || defined(TTGO_T_BEAM_V1_0_SX1268) || defined(TTGO_T_BEAM_V1_2_SX1262) || defined(OE5HWN_MeshCom) || defined(ESP32_DIY_LoRa_A7670) || defined(TTGO_LORA32_V2_1_915) || defined(ESP32_DIY_LoRa_915) || defined(TTGO_T_BEAM_V1_0_915) || defined(TTGO_T_BEAM_V1_2_915) || defined(ESP32_DIY_LoRa_A7670_915) || defined(ESP32_DIY_1W_LoRa_915) || defined(ESP32_DIY_1W_LoRa_LLCC68) || defined(ESP32_DIY_1W_LoRa_Mesh_V1_2)
#define OLED_SDA 21 #define OLED_SDA 21
#define OLED_SCL 22 #define OLED_SCL 22
#define OLED_RST -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define OLED_RST -1 // Reset pin # (or -1 if sharing Arduino reset pin)
@@ -167,10 +180,18 @@
#define OLED_RST -1 #define OLED_RST -1
#endif #endif
#ifdef LIGHTGATEWAY_1_0
#define OLED_SDA 3
#define OLED_SCL 4
#define OLED_RST -1
#endif
#if !defined(HELTEC_HTCT62) && !defined(HELTEC_WSL_V3) && !defined(ESP32C3_DIY_1W_LoRa) && !defined(ESP32C3_DIY_1W_LoRa_915) && !defined(WEMOS_S2_MINI_DIY_LoRa) #if !defined(HELTEC_HTCT62) && !defined(HELTEC_WSL_V3) && !defined(ESP32C3_DIY_1W_LoRa) && !defined(ESP32C3_DIY_1W_LoRa_915) && !defined(WEMOS_S2_MINI_DIY_LoRa)
#define HAS_DISPLAY #define HAS_DISPLAY
#endif #endif
// Leds and other stuff // Leds and other stuff
#ifdef HELTEC_HTCT62 #ifdef HELTEC_HTCT62
#define BATTERY_PIN 1 #define BATTERY_PIN 1
@@ -178,7 +199,7 @@
#ifdef WEMOS_S2_MINI_DIY_LoRa #ifdef WEMOS_S2_MINI_DIY_LoRa
#define INTERNAL_LED_PIN 15 #define INTERNAL_LED_PIN 15
#endif #endif
#if defined(TTGO_T_LORA32_V2_1) || defined(TTGO_T_LORA32_V2_1_915) #if defined(TTGO_LORA32_V2_1) || defined(TTGO_LORA32_V2_1_915)
#define INTERNAL_LED_PIN 25 // Green Led #define INTERNAL_LED_PIN 25 // Green Led
#define BATTERY_PIN 35 #define BATTERY_PIN 35
#endif #endif
@@ -256,6 +277,24 @@
#define RADIO_BUSY_PIN 8 #define RADIO_BUSY_PIN 8
#endif #endif
#ifdef LIGHTGATEWAY_1_0
#define BUTTON_PIN 0
#define INTERNAL_LED_PIN 16
#endif
// GPS
#if defined(TTGO_T_BEAM_V1_2) || defined(TTGO_T_BEAM_V1_2_915) || defined(TTGO_T_BEAM_V1_0) || defined(TTGO_T_BEAM_V1_0_915) || defined(TTGO_T_BEAM_V1_0_SX1268) || defined(TTGO_T_BEAM_V1_2_SX1262)
#define GPS_RX 12
#define GPS_TX 34
#endif
#if defined( HELTEC_WIRELESS_TRACKER)
#define GPS_RX 34
#define GPS_TX 33
#endif
/* (Same pins for LILYGO LoRa32 and ESP32 Wroom Dev ) /* (Same pins for LILYGO LoRa32 and ESP32 Wroom Dev )
SX1278-------------------> ESP32 ttgo-lora32-v21 and ESP32 WROOM Dev SX1278-------------------> ESP32 ttgo-lora32-v21 and ESP32 WROOM Dev
GND GND GND GND
@@ -271,4 +310,22 @@ DIO0 26
REST 14 REST 14
GND - */ GND - */
#ifdef TTGO_LORA32_T3S3_V1_2
#define RADIO_SCLK_PIN 5 // SX1262 SCK
#define RADIO_MISO_PIN 3 // SX1262 MISO
#define RADIO_MOSI_PIN 6 // SX1262 MOSI
#define RADIO_CS_PIN 7 // SX1262 NSS
#define RADIO_RST_PIN 8 // SX1262 RST
#define RADIO_DIO1_PIN 33 // SX1262 DIO1
#define RADIO_BUSY_PIN 34 // SX1262 BUSY
#define OLED_SDA 18
#define OLED_SCL 17
#define OLED_RST -1
#define INTERNAL_LED_PIN 37 // Green Led
#define BATTERY_PIN 1
#endif
#endif #endif
+15
View File
@@ -40,6 +40,9 @@ void Configuration::writeFile() {
data["beacon"]["sendViaRF"] = beacon.sendViaRF; data["beacon"]["sendViaRF"] = beacon.sendViaRF;
data["beacon"]["path"] = beacon.path; data["beacon"]["path"] = beacon.path;
data["beacon"]["gpsActive"] = beacon.gpsActive;
data["beacon"]["gpsAmbiguity"] = beacon.gpsAmbiguity;
data["digi"]["mode"] = digi.mode; data["digi"]["mode"] = digi.mode;
data["digi"]["ecoMode"] = digi.ecoMode; data["digi"]["ecoMode"] = digi.ecoMode;
@@ -100,6 +103,8 @@ void Configuration::writeFile() {
data["webadmin"]["username"] = webadmin.username; data["webadmin"]["username"] = webadmin.username;
data["webadmin"]["password"] = webadmin.password; data["webadmin"]["password"] = webadmin.password;
data["ntp"]["gmtCorrection"] = ntp.gmtCorrection;
serializeJson(data, configFile); serializeJson(data, configFile);
configFile.close(); configFile.close();
@@ -144,6 +149,9 @@ bool Configuration::readFile() {
beacon.path = data["beacon"]["path"] | "WIDE1-1"; beacon.path = data["beacon"]["path"] | "WIDE1-1";
beacon.sendViaAPRSIS = data["beacon"]["sendViaAPRSIS"] | false; beacon.sendViaAPRSIS = data["beacon"]["sendViaAPRSIS"] | false;
beacon.sendViaRF = data["beacon"]["sendViaRF"] | false; beacon.sendViaRF = data["beacon"]["sendViaRF"] | false;
beacon.gpsActive = data["beacon"]["gpsActive"] | false;
beacon.gpsAmbiguity = data["beacon"]["gpsAmbiguity"] | false;
aprs_is.active = data["aprs_is"]["active"] | false; aprs_is.active = data["aprs_is"]["active"] | false;
aprs_is.passcode = data["aprs_is"]["passcode"] | "XYZWV"; aprs_is.passcode = data["aprs_is"]["passcode"] | "XYZWV";
@@ -201,6 +209,8 @@ bool Configuration::readFile() {
webadmin.username = data["webadmin"]["username"] | "admin"; webadmin.username = data["webadmin"]["username"] | "admin";
webadmin.password = data["webadmin"]["password"] | ""; webadmin.password = data["webadmin"]["password"] | "";
ntp.gmtCorrection = data["ntp"]["gmtCorrection"] | 0;
lowPowerMode = data["other"]["lowPowerMode"] | false; lowPowerMode = data["other"]["lowPowerMode"] | false;
lowVoltageCutOff = data["other"]["lowVoltageCutOff"] | 0; lowVoltageCutOff = data["other"]["lowVoltageCutOff"] | 0;
@@ -249,6 +259,9 @@ void Configuration::init() {
beacon.sendViaAPRSIS = true; beacon.sendViaAPRSIS = true;
beacon.sendViaRF = false; beacon.sendViaRF = false;
beacon.path = "WIDE1-1"; beacon.path = "WIDE1-1";
beacon.gpsActive = false;
beacon.gpsAmbiguity = false;
digi.mode = 0; digi.mode = 0;
digi.ecoMode = false; digi.ecoMode = false;
@@ -318,6 +331,8 @@ void Configuration::init() {
webadmin.username = "admin"; webadmin.username = "admin";
webadmin.password = ""; webadmin.password = "";
ntp.gmtCorrection = 0;
Serial.println("All is Written!"); Serial.println("All is Written!");
} }
+10
View File
@@ -28,6 +28,8 @@ public:
String path; String path;
bool sendViaRF; bool sendViaRF;
bool sendViaAPRSIS; bool sendViaAPRSIS;
bool gpsActive;
bool gpsAmbiguity;
}; };
class APRS_IS { class APRS_IS {
@@ -115,6 +117,13 @@ public:
String password; String password;
}; };
class NTP {
public:
int gmtCorrection;
};
class Configuration { class Configuration {
public: public:
String callsign; String callsign;
@@ -138,6 +147,7 @@ public:
TNC tnc; TNC tnc;
OTA ota; OTA ota;
WEBADMIN webadmin; WEBADMIN webadmin;
NTP ntp;
void init(); void init();
void writeFile(); void writeFile();
+45 -40
View File
@@ -33,9 +33,11 @@
#endif #endif
#endif #endif
extern Configuration Config; extern Configuration Config;
String oldHeader, oldFirstLine, oldSecondLine, oldThirdLine, oldFourthLine, oldFifthLine, oldSixthLine;
bool displayFound = false;
String oldHeader, oldFirstLine, oldSecondLine, oldThirdLine, oldFourthLine, oldFifthLine, oldSixthLine;
void cleanTFT() { void cleanTFT() {
#ifdef HAS_TFT #ifdef HAS_TFT
@@ -67,20 +69,19 @@ void displaySetup() {
digitalWrite(OLED_RST, HIGH); digitalWrite(OLED_RST, HIGH);
#endif #endif
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { if(display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed")); displayFound = true;
for(;;); // Don't proceed, loop forever if (Config.display.turn180) {
}
if (Config.display.turn180) {
display.setRotation(2); display.setRotation(2);
} }
display.clearDisplay(); display.clearDisplay();
display.setTextColor(WHITE); display.setTextColor(WHITE);
display.setTextSize(1); display.setTextSize(1);
display.setCursor(0, 0); display.setCursor(0, 0);
display.ssd1306_command(SSD1306_SETCONTRAST); display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(1); display.ssd1306_command(1);
display.display(); display.display();
}
#endif #endif
#endif #endif
delay(1000); delay(1000);
@@ -96,7 +97,7 @@ void displayToggle(bool toggle) {
#if HAS_EPAPER #if HAS_EPAPER
// ... to be continued // ... to be continued
#else #else
display.ssd1306_command(SSD1306_DISPLAYON); if (displayFound) display.ssd1306_command(SSD1306_DISPLAYON);
#endif #endif
#endif #endif
} else { } else {
@@ -106,7 +107,7 @@ void displayToggle(bool toggle) {
#if HAS_EPAPER #if HAS_EPAPER
// ... to be continued // ... to be continued
#else #else
display.ssd1306_command(SSD1306_DISPLAYOFF); if (displayFound) display.ssd1306_command(SSD1306_DISPLAYOFF);
#endif #endif
#endif #endif
} }
@@ -160,18 +161,20 @@ void displayShow(const String& header, const String& line1, const String& line2,
#ifdef HAS_EPAPER #ifdef HAS_EPAPER
// ... to be continued // ... to be continued
#else #else
display.clearDisplay(); if (displayFound) {
display.setTextColor(WHITE); display.clearDisplay();
display.setTextSize(1); display.setTextColor(WHITE);
display.setCursor(0, 0); display.setTextSize(1);
display.println(header); display.setCursor(0, 0);
for (int i = 0; i < 3; i++) { display.println(header);
display.setCursor(0, 8 + (8 * i)); for (int i = 0; i < 3; i++) {
display.println(*lines[i]); display.setCursor(0, 8 + (8 * i));
display.println(*lines[i]);
}
display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(1);
display.display();
} }
display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(1);
display.display();
#endif #endif
#endif #endif
delay(wait); delay(wait);
@@ -198,19 +201,21 @@ void displayShow(const String& header, const String& line1, const String& line2,
#ifdef HAS_EPAPER #ifdef HAS_EPAPER
// ... to be continued // ... to be continued
#else #else
display.clearDisplay(); if (displayFound) {
display.setTextColor(WHITE); display.clearDisplay();
display.setTextSize(2); display.setTextColor(WHITE);
display.setCursor(0, 0); display.setTextSize(2);
display.println(header); display.setCursor(0, 0);
display.setTextSize(1); display.println(header);
for (int i = 0; i < 6; i++) { display.setTextSize(1);
display.setCursor(0, 16 + (8 * i)); for (int i = 0; i < 6; i++) {
display.println(*lines[i]); display.setCursor(0, 16 + (8 * i));
display.println(*lines[i]);
}
display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(1);
display.display();
} }
display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(1);
display.display();
#endif #endif
#endif #endif
delay(wait); delay(wait);
+59 -21
View File
@@ -1,13 +1,22 @@
#include <TinyGPS++.h> #include <TinyGPS++.h>
#include <WiFi.h> #include <WiFi.h>
#include "configuration.h" #include "configuration.h"
#include "boards_pinout.h"
#include "gps_utils.h" #include "gps_utils.h"
#include "display.h" #include "display.h"
#include "utils.h" #include "utils.h"
extern Configuration Config; #ifdef GPS_BAUDRATE
extern WiFiClient espClient; #define GPS_BAUD GPS_BAUDRATE
String distance, iGateBeaconPacket, iGateLoRaBeaconPacket; #else
#define GPS_BAUD 9600
#endif
extern Configuration Config;
extern WiFiClient espClient;
extern HardwareSerial gpsSerial;
extern TinyGPSPlus gps;
String distance, iGateBeaconPacket, iGateLoRaBeaconPacket;
namespace GPS_Utils { namespace GPS_Utils {
@@ -24,20 +33,32 @@ namespace GPS_Utils {
return(s); return(s);
} }
float roundToTwoDecimals(float degrees) {
return round(degrees * 100) / 100;
}
String encodeGPS(float latitude, float longitude, const String& overlay, const String& symbol) { String encodeGPS(float latitude, float longitude, const String& overlay, const String& symbol) {
String encodedData = overlay; String encodedData = overlay;
uint32_t aprs_lat, aprs_lon; uint32_t aprs_lat, aprs_lon;
aprs_lat = 900000000 - latitude * 10000000;
float processedLatitude = latitude;
float processedLongitude = longitude;
if (Config.beacon.gpsActive && Config.beacon.gpsAmbiguity) {
processedLatitude = roundToTwoDecimals(latitude);
processedLongitude = roundToTwoDecimals(longitude);
}
aprs_lat = 900000000 - processedLatitude * 10000000;
aprs_lat = aprs_lat / 26 - aprs_lat / 2710 + aprs_lat / 15384615; aprs_lat = aprs_lat / 26 - aprs_lat / 2710 + aprs_lat / 15384615;
aprs_lon = 900000000 + longitude * 10000000 / 2; aprs_lon = 900000000 + processedLongitude * 10000000 / 2;
aprs_lon = aprs_lon / 26 - aprs_lon / 2710 + aprs_lon / 15384615; aprs_lon = aprs_lon / 26 - aprs_lon / 2710 + aprs_lon / 15384615;
String Ns, Ew, helper; String Ns, Ew, helper;
if(latitude < 0) { Ns = "S"; } else { Ns = "N"; } if(processedLatitude < 0) { Ns = "S"; } else { Ns = "N"; }
if(latitude < 0) { latitude= -latitude; } if(processedLatitude < 0) { processedLatitude = -processedLatitude; }
if(longitude < 0) { Ew = "W"; } else { Ew = "E"; } if(processedLongitude < 0) { Ew = "W"; } else { Ew = "E"; }
if(longitude < 0) { longitude= -longitude; } if(processedLongitude < 0) { processedLongitude = -processedLongitude; }
char helper_base91[] = {"0000\0"}; char helper_base91[] = {"0000\0"};
int i; int i;
@@ -55,6 +76,19 @@ namespace GPS_Utils {
return encodedData; return encodedData;
} }
void generateBeaconFirstPart() {
String beaconPacket = Config.callsign;
beaconPacket += ">APLRG1";
if (Config.beacon.path.indexOf("WIDE") == 0) {
beaconPacket += ",";
beaconPacket += Config.beacon.path;
}
iGateBeaconPacket = beaconPacket;
iGateBeaconPacket += ",qAC:!";
iGateLoRaBeaconPacket = beaconPacket;
iGateLoRaBeaconPacket += ":!";
}
void generateBeacons() { void generateBeacons() {
if (Config.callsign.indexOf("NOCALL-10") != 0 && !Utils::checkValidCallsign(Config.callsign)) { if (Config.callsign.indexOf("NOCALL-10") != 0 && !Utils::checkValidCallsign(Config.callsign)) {
displayShow("***** ERROR ******", "CALLSIGN = NOT VALID!", "", "Only Rx Mode Active", 3000); displayShow("***** ERROR ******", "CALLSIGN = NOT VALID!", "", "Only Rx Mode Active", 3000);
@@ -64,19 +98,8 @@ namespace GPS_Utils {
Config.beacon.sendViaRF = false; Config.beacon.sendViaRF = false;
Config.digi.mode = 0; Config.digi.mode = 0;
Config.backupDigiMode = false; Config.backupDigiMode = false;
}
String beaconPacket = Config.callsign;
beaconPacket += ">APLRG1";
if (Config.beacon.path.indexOf("WIDE") == 0) {
beaconPacket += ",";
beaconPacket += Config.beacon.path;
} }
generateBeaconFirstPart();
iGateBeaconPacket = beaconPacket;
iGateBeaconPacket += ",qAC:!";
iGateLoRaBeaconPacket = beaconPacket;
iGateLoRaBeaconPacket += ":!";
String encodedGPS = encodeGPS(Config.beacon.latitude, Config.beacon.longitude, Config.beacon.overlay, Config.beacon.symbol); String encodedGPS = encodeGPS(Config.beacon.latitude, Config.beacon.longitude, Config.beacon.overlay, Config.beacon.symbol);
iGateBeaconPacket += encodedGPS; iGateBeaconPacket += encodedGPS;
iGateLoRaBeaconPacket += encodedGPS; iGateLoRaBeaconPacket += encodedGPS;
@@ -184,4 +207,19 @@ namespace GPS_Utils {
} }
} }
void setup() {
#ifdef HAS_GPS
if (Config.beacon.gpsActive) {
gpsSerial.begin(GPS_BAUD, SERIAL_8N1, GPS_TX, GPS_RX);
}
#endif
generateBeacons();
}
void getData() {
while (gpsSerial.available() > 0) {
gps.encode(gpsSerial.read());
}
}
} }
+5 -2
View File
@@ -5,16 +5,19 @@
namespace GPS_Utils { namespace GPS_Utils {
String getiGateLoRaBeaconPacket(); String getiGateLoRaBeaconPacket();
char *ax25_base91enc(char *s, uint8_t n, uint32_t v); char *ax25_base91enc(char *s, uint8_t n, uint32_t v);
String encodeGPS(float latitude, float longitude, const String& overlay, const String& symbol); String encodeGPS(float latitude, float longitude, const String& overlay, const String& symbol);
void generateBeaconFirstPart();
void generateBeacons(); void generateBeacons();
//double calculateDistanceCourse(double latitude, double longitude);
String decodeEncodedGPS(const String& packet); String decodeEncodedGPS(const String& packet);
String getReceivedGPS(const String& packet); String getReceivedGPS(const String& packet);
String getDistanceAndComment(const String& packet); String getDistanceAndComment(const String& packet);
void setup();
void getData();
} }
#endif #endif
+20 -8
View File
@@ -4,6 +4,7 @@
#include "aprs_is_utils.h" #include "aprs_is_utils.h"
#include "boards_pinout.h" #include "boards_pinout.h"
#include "syslog_utils.h" #include "syslog_utils.h"
#include "ntp_utils.h"
#include "display.h" #include "display.h"
#include "utils.h" #include "utils.h"
@@ -19,7 +20,12 @@ bool transmitFlag = true;
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
#endif #endif
#ifdef HAS_SX1268 #ifdef HAS_SX1268
SX1268 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN); #if defined(LIGHTGATEWAY_1_0)
SPIClass loraSPI(FSPI);
SX1268 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN, loraSPI);
#else
SX1268 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
#endif
#endif #endif
#ifdef HAS_SX1278 #ifdef HAS_SX1278
SX1278 radio = new Module(RADIO_CS_PIN, RADIO_BUSY_PIN, RADIO_RST_PIN); SX1278 radio = new Module(RADIO_CS_PIN, RADIO_BUSY_PIN, RADIO_RST_PIN);
@@ -41,7 +47,13 @@ namespace LoRa_Utils {
} }
void setup() { void setup() {
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN); #ifdef LIGHTGATEWAY_1_0
pinMode(RADIO_VCC_PIN,OUTPUT);
digitalWrite(RADIO_VCC_PIN,HIGH);
loraSPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN, RADIO_CS_PIN);
#else
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#endif
float freq = (float)Config.loramodule.rxFreq / 1000000; float freq = (float)Config.loramodule.rxFreq / 1000000;
#if defined(RADIO_HAS_XTAL) #if defined(RADIO_HAS_XTAL)
radio.XTAL = true; radio.XTAL = true;
@@ -69,7 +81,7 @@ namespace LoRa_Utils {
radio.setCodingRate(Config.loramodule.codingRate4); radio.setCodingRate(Config.loramodule.codingRate4);
radio.setCRC(true); radio.setCRC(true);
#if defined(RADIO_RXEN) && defined(RADIO_TXEN) #if (defined(RADIO_RXEN) && defined(RADIO_TXEN)) || defined(LIGHTGATEWAY_1_0) // QRP Labs LightGateway has 400M22S (SX1268)
radio.setRfSwitchPins(RADIO_RXEN, RADIO_TXEN); radio.setRfSwitchPins(RADIO_RXEN, RADIO_TXEN);
#endif #endif
@@ -175,15 +187,15 @@ namespace LoRa_Utils {
Utils::println("<--- LoRa Packet Rx : " + packet.substring(3)); Utils::println("<--- LoRa Packet Rx : " + packet.substring(3));
Utils::println("(RSSI:" + String(rssi) + " / SNR:" + String(snr) + " / FreqErr:" + String(freqError) + ")"); Utils::println("(RSSI:" + String(rssi) + " / SNR:" + String(snr) + " / FreqErr:" + String(freqError) + ")");
if (!Config.lowPowerMode) { if (!Config.lowPowerMode && !Config.digi.ecoMode) {
if (receivedPackets.size() >= 10) {
receivedPackets.erase(receivedPackets.begin());
}
ReceivedPacket receivedPacket; ReceivedPacket receivedPacket;
receivedPacket.millis = millis(); receivedPacket.rxTime = NTP_Utils::getFormatedTime();
receivedPacket.packet = packet.substring(3); receivedPacket.packet = packet.substring(3);
receivedPacket.RSSI = rssi; receivedPacket.RSSI = rssi;
receivedPacket.SNR = snr; receivedPacket.SNR = snr;
if (receivedPackets.size() >= 20) {
receivedPackets.erase(receivedPackets.begin());
}
receivedPackets.push_back(receivedPacket); receivedPackets.push_back(receivedPacket);
} }
+34
View File
@@ -0,0 +1,34 @@
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <WiFi.h>
#include "configuration.h"
#include "ntp_utils.h"
#include "time.h"
extern Configuration Config;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 0, 15 * 60 * 1000); // Update interval 15 min
namespace NTP_Utils {
void setup() {
if (WiFi.status() == WL_CONNECTED && !Config.digi.ecoMode && Config.callsign != "NOCALL-10") {
int gmt = Config.ntp.gmtCorrection * 3600;
timeClient.setTimeOffset(gmt);
timeClient.begin();
}
}
void update() {
if (WiFi.status() == WL_CONNECTED && !Config.digi.ecoMode && Config.callsign != "NOCALL-10") timeClient.update();
}
String getFormatedTime() {
if (!Config.digi.ecoMode) return timeClient.getFormattedTime();
return "DigiEcoMode Active";
}
}
+14
View File
@@ -0,0 +1,14 @@
#ifndef NTP_UTILS_H_
#define NTP_UTILS_H_
#include <Arduino.h>
namespace NTP_Utils {
void setup();
void update();
String getFormatedTime();
}
#endif
+35 -1
View File
@@ -47,6 +47,36 @@ namespace POWER_Utils {
#endif #endif
} }
void activateGPS() {
#ifdef HAS_AXP192
PMU.setLDO3Voltage(3300);
PMU.enableLDO3();
#endif
#ifdef HAS_AXP2101
PMU.setALDO3Voltage(3300);
PMU.enableALDO3();
#endif
#ifdef HELTEC_WIRELESS_TRACKER
digitalWrite(VEXT_CTRL, HIGH);
#endif
//gpsIsActive = true;
}
void deactivateGPS() {
#ifdef HAS_AXP192
PMU.disableLDO3();
#endif
#ifdef HAS_AXP2101
PMU.disableALDO3();
#endif
#ifdef HELTEC_WIRELESS_TRACKER
digitalWrite(VEXT_CTRL, LOW);
#endif
//gpsIsActive = false;
}
void activateLoRa() { void activateLoRa() {
#ifdef HAS_AXP192 #ifdef HAS_AXP192
PMU.setLDO2Voltage(3300); PMU.setLDO2Voltage(3300);
@@ -159,6 +189,10 @@ namespace POWER_Utils {
#endif #endif
#endif #endif
#ifdef HAS_GPS
if (Config.beacon.gpsActive) activateGPS();
#endif
#ifdef ADC_CTRL #ifdef ADC_CTRL
pinMode(ADC_CTRL, OUTPUT); pinMode(ADC_CTRL, OUTPUT);
#endif #endif
@@ -171,7 +205,7 @@ namespace POWER_Utils {
Wire1.begin(BOARD_I2C_SDA, BOARD_I2C_SCL); Wire1.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
#endif #endif
#if defined(HELTEC_V3) || defined(HELTEC_WS) #if defined(HELTEC_V3) || defined(HELTEC_WS) || defined(LIGHTGATEWAY_1_0) || defined(TTGO_LORA32_T3S3_V1_2)
Wire.begin(OLED_SDA, OLED_SCL); Wire.begin(OLED_SDA, OLED_SCL);
#endif #endif
+2
View File
@@ -14,6 +14,8 @@ namespace POWER_Utils {
double getBatteryVoltage(); double getBatteryVoltage();
bool isBatteryConnected(); bool isBatteryConnected();
void activateMeasurement(); void activateMeasurement();
void activateGPS();
void deactivateGPS();
void activateLoRa(); void activateLoRa();
void deactivateLoRa(); void deactivateLoRa();
bool begin(TwoWire &port); bool begin(TwoWire &port);
+2 -2
View File
@@ -51,12 +51,12 @@ namespace QUERY_Utils {
// agregar callsign para completar donde esta X callsign --> posicion // agregar callsign para completar donde esta X callsign --> posicion
Serial.println("estaciones escuchadas directo (ultimos 30 min)"); Serial.println("estaciones escuchadas directo (ultimos 30 min)");
answer.concat("?WHERE on development 73!"); answer.concat("?WHERE on development 73!");
} else if (queryQuestion.indexOf("?APRSEEM") == 0) { // Exit DigiRepeater EcoMode } else if (queryQuestion.indexOf("?APRSEEM") == 0 && Config.digi.ecoMode == true) { // Exit DigiRepeater EcoMode
answer = "DigiEcoMode:Stop"; answer = "DigiEcoMode:Stop";
Config.digi.ecoMode = false; Config.digi.ecoMode = false;
Config.display.alwaysOn = true; Config.display.alwaysOn = true;
Config.display.timeout = 10; Config.display.timeout = 10;
} else if (queryQuestion.indexOf("?APRSSEM") == 0) { // Start DigiRepeater EcoMode } else if (queryQuestion.indexOf("?APRSSEM") == 0 && Config.digi.ecoMode == false) { // Start DigiRepeater EcoMode
answer = "DigiEcoMode:Start"; answer = "DigiEcoMode:Start";
Config.digi.ecoMode = true; Config.digi.ecoMode = true;
} else if (queryQuestion.indexOf("?APRSEMS") == 0) { // DigiRepeater EcoMode Status } else if (queryQuestion.indexOf("?APRSEMS") == 0) { // DigiRepeater EcoMode Status
+26 -4
View File
@@ -1,3 +1,4 @@
#include <TinyGPS++.h>
#include <WiFi.h> #include <WiFi.h>
#include "configuration.h" #include "configuration.h"
#include "station_utils.h" #include "station_utils.h"
@@ -13,8 +14,10 @@
#include "display.h" #include "display.h"
#include "utils.h" #include "utils.h"
extern Configuration Config; extern Configuration Config;
extern WiFiClient espClient; extern WiFiClient espClient;
extern TinyGPSPlus gps;
extern String versionDate; extern String versionDate;
extern String firstLine; extern String firstLine;
extern String secondLine; extern String secondLine;
@@ -42,6 +45,8 @@ bool sendStartTelemetry = true;
bool beaconUpdate = true; bool beaconUpdate = true;
uint32_t lastBeaconTx = 0; uint32_t lastBeaconTx = 0;
uint32_t lastScreenOn = millis(); uint32_t lastScreenOn = millis();
String beaconPacket;
String secondaryBeaconPacket;
namespace Utils { namespace Utils {
@@ -106,7 +111,6 @@ namespace Utils {
fourthLine.concat(String(lastHeardStations.size())); fourthLine.concat(String(lastHeardStations.size()));
} }
void sendInitialTelemetryPackets() { void sendInitialTelemetryPackets() {
String sender = Config.callsign; String sender = Config.callsign;
for (int i = sender.length(); i < 9; i++) { for (int i = sender.length(); i < 9; i++) {
@@ -175,13 +179,19 @@ namespace Utils {
sendStartTelemetry = false; sendStartTelemetry = false;
} }
void checkBeaconInterval() { void checkBeaconInterval() {
uint32_t lastTx = millis() - lastBeaconTx; uint32_t lastTx = millis() - lastBeaconTx;
if (lastBeaconTx == 0 || lastTx >= Config.beacon.interval * 60 * 1000) { if (lastBeaconTx == 0 || lastTx >= Config.beacon.interval * 60 * 1000) {
beaconUpdate = true; beaconUpdate = true;
} }
#ifdef HAS_GPS
if (Config.beacon.gpsActive && gps.location.lat() == 0.0 && gps.location.lng() == 0.0 && Config.beacon.latitude == 0.0 && Config.beacon.longitude == 0.0) {
GPS_Utils::getData();
beaconUpdate = false;
}
#endif
if (beaconUpdate) { if (beaconUpdate) {
if (!Config.display.alwaysOn && Config.display.timeout != 0) { if (!Config.display.alwaysOn && Config.display.timeout != 0) {
displayToggle(true); displayToggle(true);
@@ -195,8 +205,20 @@ namespace Utils {
activeStations(); activeStations();
String beaconPacket = iGateBeaconPacket; beaconPacket = iGateBeaconPacket;
String secondaryBeaconPacket = iGateLoRaBeaconPacket; secondaryBeaconPacket = iGateLoRaBeaconPacket;
#ifdef HAS_GPS
if (Config.beacon.gpsActive && !Config.digi.ecoMode) {
GPS_Utils::getData();
if (gps.location.isUpdated() && gps.location.lat() != 0.0 && gps.location.lng() != 0.0) {
GPS_Utils::generateBeaconFirstPart();
String encodedGPS = GPS_Utils::encodeGPS(gps.location.lat(), gps.location.lng(), Config.beacon.overlay, Config.beacon.symbol);
beaconPacket = iGateBeaconPacket + encodedGPS;
secondaryBeaconPacket = iGateLoRaBeaconPacket + encodedGPS;
}
}
#endif
if (Config.wxsensor.active && wxModuleType != 0) { if (Config.wxsensor.active && wxModuleType != 0) {
String sensorData = WX_Utils::readDataSensor(); String sensorData = WX_Utils::readDataSensor();
beaconPacket += sensorData; beaconPacket += sensorData;
+1 -1
View File
@@ -5,7 +5,7 @@
class ReceivedPacket { class ReceivedPacket {
public: public:
long millis; String rxTime;
String packet; String packet;
int RSSI; int RSSI;
float SNR; float SNR;
+9 -4
View File
@@ -81,10 +81,10 @@ namespace WEB_Utils {
StaticJsonDocument<1536> data; StaticJsonDocument<1536> data;
for (int i = 0; i < receivedPackets.size(); i++) { for (int i = 0; i < receivedPackets.size(); i++) {
data[i]["millis"] = receivedPackets[i].millis; data[i]["rxTime"] = receivedPackets[i].rxTime;
data[i]["packet"] = receivedPackets[i].packet; data[i]["packet"] = receivedPackets[i].packet;
data[i]["RSSI"] = receivedPackets[i].RSSI; data[i]["RSSI"] = receivedPackets[i].RSSI;
data[i]["SNR"] = receivedPackets[i].SNR; data[i]["SNR"] = receivedPackets[i].SNR;
} }
String buffer; String buffer;
@@ -134,6 +134,9 @@ namespace WEB_Utils {
Config.beacon.symbol = request->getParam("beacon.symbol", true)->value(); Config.beacon.symbol = request->getParam("beacon.symbol", true)->value();
Config.beacon.path = request->getParam("beacon.path", true)->value(); Config.beacon.path = request->getParam("beacon.path", true)->value();
Config.beacon.gpsActive = request->hasParam("beacon.gpsActive", true);
Config.beacon.gpsAmbiguity = request->hasParam("beacon.gpsAmbiguity", true);
Config.digi.mode = request->getParam("digi.mode", true)->value().toInt(); Config.digi.mode = request->getParam("digi.mode", true)->value().toInt();
Config.digi.ecoMode = request->hasParam("digi.ecoMode", true); Config.digi.ecoMode = request->hasParam("digi.ecoMode", true);
@@ -208,6 +211,8 @@ namespace WEB_Utils {
Config.webadmin.password = request->getParam("webadmin.password", true)->value(); Config.webadmin.password = request->getParam("webadmin.password", true)->value();
} }
Config.ntp.gmtCorrection = request->getParam("ntp.gmtCorrection", true)->value().toInt();
Config.writeFile(); Config.writeFile();
AsyncWebServerResponse *response = request->beginResponse(302, "text/html", ""); AsyncWebServerResponse *response = request->beginResponse(302, "text/html", "");
+4 -4
View File
@@ -27,11 +27,11 @@ namespace WIFI_Utils {
if (backUpDigiMode) { if (backUpDigiMode) {
uint32_t WiFiCheck = millis() - lastBackupDigiTime; uint32_t WiFiCheck = millis() - lastBackupDigiTime;
if (WiFi.status() != WL_CONNECTED && WiFiCheck >= 15 * 60 * 1000) { if (WiFi.status() != WL_CONNECTED && WiFiCheck >= 15 * 60 * 1000) {
Serial.println("*** Stoping BackUp Digi Mode ***"); Serial.println("*** Stopping BackUp Digi Mode ***");
backUpDigiMode = false; backUpDigiMode = false;
wifiCounter = 0; wifiCounter = 0;
} else if (WiFi.status() == WL_CONNECTED) { } else if (WiFi.status() == WL_CONNECTED) {
Serial.println("*** WiFi Reconnect Success (Stoping Backup Digi Mode) ***"); Serial.println("*** WiFi Reconnect Success (Stopping Backup Digi Mode) ***");
backUpDigiMode = false; backUpDigiMode = false;
wifiCounter = 0; wifiCounter = 0;
} }
@@ -78,7 +78,7 @@ namespace WIFI_Utils {
WiFi.disconnect(); WiFi.disconnect();
delay(500); delay(500);
unsigned long start = millis(); unsigned long start = millis();
displayShow("", "Connecting to Wifi:", "", currentWiFi->ssid + " ...", 0); displayShow("", "Connecting to WiFi:", "", currentWiFi->ssid + " ...", 0);
Serial.print("\nConnecting to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ..."); Serial.print("\nConnecting to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ...");
WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str()); WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str());
while (WiFi.status() != WL_CONNECTED && wifiCounter<myWiFiAPSize) { while (WiFi.status() != WL_CONNECTED && wifiCounter<myWiFiAPSize) {
@@ -103,7 +103,7 @@ namespace WIFI_Utils {
currentWiFi = &Config.wifiAPs[myWiFiAPIndex]; currentWiFi = &Config.wifiAPs[myWiFiAPIndex];
start = millis(); start = millis();
Serial.print("\nConnecting to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ..."); Serial.print("\nConnecting to WiFi '"); Serial.print(currentWiFi->ssid); Serial.println("' ...");
displayShow("", "Connecting to Wifi:", "", currentWiFi->ssid + " ...", 0); displayShow("", "Connecting to WiFi:", "", currentWiFi->ssid + " ...", 0);
WiFi.disconnect(); WiFi.disconnect();
WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str()); WiFi.begin(currentWiFi->ssid.c_str(), currentWiFi->password.c_str());
} }
+2 -3
View File
@@ -1,11 +1,10 @@
#include "configuration.h" #include "configuration.h"
#include "gps_utils.h"
#include "wx_utils.h" #include "wx_utils.h"
#include "display.h" #include "display.h"
#define SEALEVELPRESSURE_HPA (1013.25) #define SEALEVELPRESSURE_HPA (1013.25)
#define CORRECTION_FACTOR (8.2296) // for meters #define CORRECTION_FACTOR (8.2296) // for meters
extern Configuration Config; extern Configuration Config;
extern String fifthLine; extern String fifthLine;