Compare commits

...

48 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
richonguzman 2f0f991785 readme2 2024-10-09 11:46:45 -03:00
richonguzman 975b140c73 readme1 2024-10-09 11:45:01 -03:00
richonguzman f2abe34af1 readme Update Digi Eco Mode 2024-10-08 12:25:09 -03:00
richonguzman a786d83b9e Queries for DigiEcoMode 2024-10-08 12:19:22 -03:00
richonguzman bf0a0d6e4c EcoMode Digi 2024-10-08 11:04:36 -03:00
richonguzman d08e5b1b27 ready for testing LowPowerDigi 2024-10-08 01:22:10 -03:00
richonguzman f387e03b53 testing LowPowerDigi 2024-10-08 01:03:58 -03:00
richonguzman 16215f9e56 minor update for Internal Battery Sleep 2024-10-07 11:10:19 -03:00
richonguzman ce01d0aa4d minor white spaces kill 2024-10-07 09:39:31 -03:00
richonguzman b0a05f89f6 readme update 2024-10-06 23:35:51 -03:00
richonguzman 58d8736969 test for Killed Wifi Active 2024-10-06 23:23:22 -03:00
richonguzman df9060d906 testing not active 2024-10-06 23:02:10 -03:00
richonguzman 2bd6844d89 WiFiAP Active switch added 2024-10-06 22:59:58 -03:00
richonguzman 0a79b6459b added initial corrections to WiFiAP 2024-10-06 22:30:44 -03:00
richonguzman d5eb32a38b cross digi rules added 2024-10-06 11:37:25 -03:00
richonguzman d6c5741fde cross digi added 2024-10-06 11:36:37 -03:00
richonguzman 1063a82294 se viene thirdParty 2024-10-05 20:25:29 -03:00
richonguzman 6913b6b89f ahora a probar thirdParty 2024-10-05 20:23:58 -03:00
richonguzman 42c990f5cf !thirdParty con o sin path 2024-10-05 20:21:36 -03:00
richonguzman a17900e4d0 bme into wxsensor 2024-10-05 08:48:08 -03:00
richonguzman 3fd819bd4e not encoded telemetry as default 2024-09-25 11:23:38 -03:00
richonguzman 640166a50b update for wiki 2024-09-23 17:41:05 -03:00
45 changed files with 1045 additions and 592 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
+16 -5
View File
@@ -7,6 +7,8 @@ This firmware is for using ESP32 based boards with LoRa Modules and GPS to live
__(This iGate Firmware works with all LoRa Tracker Firmwares (specially this <a href="https://github.com/richonguzman/LoRa_APRS_Tracker" target="_blank">LoRa APRS Tracker Firmware</a>))__ __(This iGate Firmware works with all LoRa Tracker Firmwares (specially this <a href="https://github.com/richonguzman/LoRa_APRS_Tracker" target="_blank">LoRa APRS Tracker Firmware</a>))__
<br /> <br />
____________________________________________________
## You can support this project to continue to grow: ## You can support this project to continue to grow:
[<img src="https://github.com/richonguzman/LoRa_APRS_Tracker/blob/main/images/github-sponsors.png">](https://github.com/sponsors/richonguzman) [<img src="https://github.com/richonguzman/LoRa_APRS_Tracker/blob/main/images/paypalme.png">](http://paypal.me/richonguzman) [<img src="https://github.com/richonguzman/LoRa_APRS_Tracker/blob/main/images/github-sponsors.png">](https://github.com/sponsors/richonguzman) [<img src="https://github.com/richonguzman/LoRa_APRS_Tracker/blob/main/images/paypalme.png">](http://paypal.me/richonguzman)
@@ -14,7 +16,8 @@ __(This iGate Firmware works with all LoRa Tracker Firmwares (specially this <a
<br /> <br />
# WEB FLASHER/INSTALLER is <a href="https://richonguzman.github.io/lora-igate-web-flasher/installer.html" target="_blank">here</a> # WEB FLASHER/INSTALLER is <a href="https://richonguzman.github.io/lora-igate-web-flasher/installer.html" target="_blank">here</a>
<br />
____________________________________________________
# WIKI # WIKI
@@ -29,11 +32,13 @@ __(This iGate Firmware works with all LoRa Tracker Firmwares (specially this <a
(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.
@@ -47,6 +52,12 @@ __(This iGate Firmware works with all LoRa Tracker Firmwares (specially this <a
## 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.06 Cross Frequency Digirepeater Rules added.
- 2024.09.23 Libraries Update for SDK3 - 2024.09.23 Libraries Update for SDK3
- 2024.09.23 Added Enconded Telemetry for Battery (+ External Voltage) in Station GPS Beacon Packet. - 2024.09.23 Added Enconded Telemetry for Battery (+ External Voltage) in Station GPS Beacon Packet.
- 2024.08.23 Wemos S2 Mini DIY LoRa added. - 2024.08.23 Wemos S2 Mini DIY LoRa added.
@@ -111,4 +122,4 @@ __(This iGate Firmware works with all LoRa Tracker Firmwares (specially this <a
__________________________________________ __________________________________________
# Hope You Enjoy this, 73 !! CA2RXU , Valparaiso, Chile # Hope You Enjoy this, 73! CA2RXU, Valparaiso, Chile
+8 -4
View File
@@ -3,7 +3,7 @@
"wifi": { "wifi": {
"autoAP": { "autoAP": {
"password": "1234567890", "password": "1234567890",
"powerOff": 10 "timeout": 10
}, },
"AP": [] "AP": []
}, },
@@ -28,7 +28,8 @@
"objectsToRF": false "objectsToRF": false
}, },
"digi": { "digi": {
"mode": 0 "mode": 0,
"ecoMode": false
}, },
"lora": { "lora": {
"txFreq": 433775000, "txFreq": 433775000,
@@ -48,7 +49,7 @@
"battery": { "battery": {
"sendInternalVoltage": false, "sendInternalVoltage": false,
"monitorInternalVoltage": false, "monitorInternalVoltage": false,
"internalSleepVoltage": 3.0, "internalSleepVoltage": 2.9,
"sendExternalVoltage": false, "sendExternalVoltage": false,
"externalVoltagePin": 34, "externalVoltagePin": 34,
"monitorExternalVoltage": false, "monitorExternalVoltage": false,
@@ -57,7 +58,7 @@
"voltageDividerR2": 27.0, "voltageDividerR2": 27.0,
"sendVoltageAsTelemetry": true "sendVoltageAsTelemetry": true
}, },
"bme": { "wxsensor": {
"active": false, "active": false,
"heightCorrection": 0, "heightCorrection": 0,
"temperatureCorrection": 0.0 "temperatureCorrection": 0.0
@@ -80,6 +81,9 @@
"username": "admin", "username": "admin",
"password": "" "password": ""
}, },
"ntp": {
"gmtCorrection": 0
},
"other": { "other": {
"rememberStationTime": 30, "rememberStationTime": 30,
"lowPowerMode": false, "lowPowerMode": false,
+118 -25
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 />
@@ -585,6 +615,21 @@
</option> </option>
</select> </select>
</div> </div>
<div class="col-12 mt-5">
<div class="form-check form-switch">
<input
type="checkbox"
name="digi.ecoMode"
id="digi.ecoMode"
class="form-check-input"
/>
<label
for="digi.ecoMode"
class="form-label"
>Eco Mode<small> This will disable WiFi, Display, Leds and lower CPU Speed for Low Power Digirepeater. (<strong>Caution:</strong> Active means No WebUI Configuration, so <strong>ONLY</strong> activate this for Remote Digirepeater)</small></label
>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -791,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>
@@ -1012,7 +1056,7 @@
placeholder="3.0" placeholder="3.0"
class="form-control" class="form-control"
step="0.1" step="0.1"
min="3.0" min="2.9"
max="3.7" max="3.7"
/> />
<span class="input-group-text" <span class="input-group-text"
@@ -1135,7 +1179,7 @@
d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 0 1 .707.707m2.122 2.122a4 4 0 0 0 0 5.656.5.5 0 1 1-.708.708 5 5 0 0 1 0-7.072.5.5 0 0 1 .708.708m5.656-.708a.5.5 0 0 1 .708 0 5 5 0 0 1 0 7.072.5.5 0 1 1-.708-.708 4 4 0 0 0 0-5.656.5.5 0 0 1 0-.708m2.122-2.12a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.313.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707zM6 8a2 2 0 1 1 2.5 1.937V15.5a.5.5 0 0 1-1 0V9.937A2 2 0 0 1 6 8" d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 0 1 .707.707m2.122 2.122a4 4 0 0 0 0 5.656.5.5 0 1 1-.708.708 5 5 0 0 1 0-7.072.5.5 0 0 1 .708.708m5.656-.708a.5.5 0 0 1 .708 0 5 5 0 0 1 0 7.072.5.5 0 1 1-.708-.708 4 4 0 0 0 0-5.656.5.5 0 0 1 0-.708m2.122-2.12a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.313.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707zM6 8a2 2 0 1 1 2.5 1.937V15.5a.5.5 0 0 1-1 0V9.937A2 2 0 0 1 6 8"
/> />
</svg> </svg>
Telemetry WX Telemetry
</h5> </h5>
<small>Define Wx telemetry</small> <small>Define Wx telemetry</small>
</div> </div>
@@ -1145,12 +1189,12 @@
<div class="form-check form-switch"> <div class="form-check form-switch">
<input <input
type="checkbox" type="checkbox"
name="bme.active" name="wxsensor.active"
id="bme.active" id="wxsensor.active"
class="form-check-input" class="form-check-input"
/> />
<label <label
for="bme.active" for="wxsensor.active"
class="form-label" class="form-label"
><b>Activate Wx Telemetry</b> ><b>Activate Wx Telemetry</b>
<small <small
@@ -1162,14 +1206,14 @@
</div> </div>
<div class="row mt-3"> <div class="row mt-3">
<div class="col-6"> <div class="col-6">
<label for="bme.heightCorrection" class="form-label" <label for="wxsensor.heightCorrection" class="form-label"
>Height Correction (Above Sea-Level)</label >Height Correction (Above Sea-Level)</label
> >
<div class="input-group"> <div class="input-group">
<input <input
type="number" type="number"
name="bme.heightCorrection" name="wxsensor.heightCorrection"
id="bme.heightCorrection" id="wxsensor.heightCorrection"
placeholder="0" placeholder="0"
class="form-control" class="form-control"
step="1" step="1"
@@ -1181,14 +1225,14 @@
</div> </div>
</div> </div>
<div class="col-6"> <div class="col-6">
<label for="bme.temperatureCorrection" class="form-label" <label for="wxsensor.temperatureCorrection" class="form-label"
>Temperature Correction</label >Temperature Correction</label
> >
<div class="input-group"> <div class="input-group">
<input <input
type="number" type="number"
name="bme.temperatureCorrection" name="wxsensor.temperatureCorrection"
id="bme.temperatureCorrection" id="wxsensor.temperatureCorrection"
placeholder="0.0" placeholder="0.0"
class="form-control" class="form-control"
step="0.1" step="0.1"
@@ -1453,10 +1497,10 @@
d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0" d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0"
/> />
</svg> </svg>
Auto AP WiFi Auto AP
</h5> </h5>
<small <small
>Add your password and power off timeout to >Add your password and WiFi AP timeout to
auto access point. Auto AP will start if auto access point. Auto AP will start if
there is no WiFi connection. Timeout will there is no WiFi connection. Timeout will
count from startup or last client count from startup or last client
@@ -1481,24 +1525,24 @@
</div> </div>
<div class="col-12 mt-3"> <div class="col-12 mt-3">
<label <label
for="wifi.autoAP.powerOff" for="wifi.autoAP.timeout"
class="form-label" class="form-label"
>Power off timeout >WiFi AP timeout to search again for available WiFi's
<small>(in minutes)</small></label <small>(in minutes)</small></label
> >
<input <input
type="number" type="number"
name="wifi.autoAP.powerOff" name="wifi.autoAP.timeout"
id="wifi.autoAP.powerOff" id="wifi.autoAP.timeout"
class="form-control" class="form-control"
placeholder="15" placeholder="10"
required="" required=""
step="1" step="1"
min="0" min="0"
/> />
<div class="form-text"> <div class="form-text">
Set to <strong>0</strong> if you don't Set to <strong>0</strong> if you don't
want this option. want WiFi AP to stop.
</div> </div>
</div> </div>
</div> </div>
@@ -1624,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>
+14 -11
View File
@@ -134,8 +134,12 @@ 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;
// LoRa // LoRa
document.getElementById("lora.txFreq").value = settings.lora.txFreq; document.getElementById("lora.txFreq").value = settings.lora.txFreq;
@@ -168,10 +172,10 @@ function loadSettings(settings) {
document.getElementById("battery.externalSleepVoltage").value = settings.battery.externalSleepVoltage.toFixed(1); document.getElementById("battery.externalSleepVoltage").value = settings.battery.externalSleepVoltage.toFixed(1);
document.getElementById("battery.sendVoltageAsTelemetry").checked = settings.battery.sendVoltageAsTelemetry; document.getElementById("battery.sendVoltageAsTelemetry").checked = settings.battery.sendVoltageAsTelemetry;
// TELEMETRY BME/WX // TELEMETRY WX SENSOR
document.getElementById("bme.active").checked = settings.bme.active; document.getElementById("wxsensor.active").checked = settings.wxsensor.active;
document.getElementById("bme.heightCorrection").value = settings.bme.heightCorrection; document.getElementById("wxsensor.heightCorrection").value = settings.wxsensor.heightCorrection;
document.getElementById("bme.temperatureCorrection").value = settings.bme.temperatureCorrection.toFixed(1); document.getElementById("wxsensor.temperatureCorrection").value = settings.wxsensor.temperatureCorrection.toFixed(1);
// SYSLOG // SYSLOG
document.getElementById("syslog.active").checked = settings.syslog.active; document.getElementById("syslog.active").checked = settings.syslog.active;
@@ -196,7 +200,7 @@ function loadSettings(settings) {
// WiFi Auto AP // WiFi Auto AP
document.getElementById("wifi.autoAP.password").value = settings.wifi.autoAP.password; document.getElementById("wifi.autoAP.password").value = settings.wifi.autoAP.password;
document.getElementById("wifi.autoAP.powerOff").value = settings.wifi.autoAP.powerOff; document.getElementById("wifi.autoAP.timeout").value = settings.wifi.autoAP.timeout;
// OTA // OTA
document.getElementById("ota.username").value = settings.ota.username; document.getElementById("ota.username").value = settings.ota.username;
@@ -207,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;
@@ -242,7 +249,7 @@ document.getElementById('reboot').addEventListener('click', function (e) {
showToast("Your device will be rebooted in a while"); showToast("Your device will be rebooted in a while");
}); });
const bmeCheckbox = document.querySelector("input[name='bme.active']"); const wxsensorCheckbox = document.querySelector("input[name='wxsensor.active']");
const stationModeSelect = document.querySelector("select[name='stationMode']"); const stationModeSelect = document.querySelector("select[name='stationMode']");
@@ -506,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: 110 KiB

After

Width:  |  Height:  |  Size: 198 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}
+26 -17
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>
@@ -29,28 +30,33 @@ ________________________________________________________________________________
#include "wifi_utils.h" #include "wifi_utils.h"
#include "digi_utils.h" #include "digi_utils.h"
#include "gps_utils.h" #include "gps_utils.h"
#include "bme_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 "display.h" #include "display.h"
#include "utils.h" #include "utils.h"
#ifdef HAS_A7670 #ifdef HAS_A7670
#include "A7670_utils.h" #include "A7670_utils.h"
#endif #endif
String versionDate = "2024.09.23"; 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
@@ -111,9 +117,11 @@ void setup() {
Config.loramodule.rxActive = false; Config.loramodule.rxActive = false;
} }
#endif #endif
DIGI_Utils::checkEcoMode();
WIFI_Utils::setup(); WIFI_Utils::setup();
NTP_Utils::setup();
SYSLOG_Utils::setup(); SYSLOG_Utils::setup();
BME_Utils::setup(); WX_Utils::setup();
WEB_Utils::setup(); WEB_Utils::setup();
TNC_Utils::setup(); TNC_Utils::setup();
#ifdef HAS_A7670 #ifdef HAS_A7670
@@ -123,7 +131,7 @@ void setup() {
} }
void loop() { void loop() {
WIFI_Utils::checkIfAutoAPShouldPowerOff(); WIFI_Utils::checkAutoAPTimeout();
if (isUpdatingOTA) { if (isUpdatingOTA) {
ElegantOTA.loop(); ElegantOTA.loop();
@@ -136,7 +144,7 @@ void loop() {
thirdLine = Utils::getLocalIP(); thirdLine = Utils::getLocalIP();
WIFI_Utils::checkWiFi(); // Always use WiFi, not related to IGate/Digi mode WIFI_Utils::checkWiFi();
#ifdef HAS_A7670 #ifdef HAS_A7670
if (Config.aprs_is.active && !modemLoggedToAPRSIS) A7670_Utils::APRS_IS_connect(); if (Config.aprs_is.active && !modemLoggedToAPRSIS) A7670_Utils::APRS_IS_connect();
@@ -144,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();
+3 -2
View File
@@ -71,7 +71,7 @@ namespace APRS_IS_Utils {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
wifiState = "OK"; wifiState = "OK";
} else { } else {
if (backUpDigiMode) { if (backUpDigiMode || Config.digi.ecoMode) {
wifiState = "--"; wifiState = "--";
} else { } else {
wifiState = "AP"; wifiState = "AP";
@@ -138,7 +138,8 @@ namespace APRS_IS_Utils {
//Serial.println(ackMessage); //Serial.println(ackMessage);
String addToBuffer = Config.callsign; String addToBuffer = Config.callsign;
addToBuffer += ">APLRG1,RFONLY"; addToBuffer += ">APLRG1";
if (!thirdParty) addToBuffer += ",RFONLY";
if (Config.beacon.path != "") { if (Config.beacon.path != "") {
addToBuffer += ","; addToBuffer += ",";
addToBuffer += Config.beacon.path; addToBuffer += Config.beacon.path;
+1 -3
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
@@ -222,7 +222,6 @@ namespace BATTERY_Utils {
} }
} }
String generateEncodedTelemetryBytes(float value, bool firstBytes, byte voltageType) { // 0 = internal battery(0-4,2V) , 1 = external battery(0-15V) String generateEncodedTelemetryBytes(float value, bool firstBytes, byte voltageType) { // 0 = internal battery(0-4,2V) , 1 = external battery(0-15V)
String encodedBytes; String encodedBytes;
int tempValue; int tempValue;
@@ -251,7 +250,6 @@ namespace BATTERY_Utils {
return encodedBytes; return encodedBytes;
} }
String generateEncodedTelemetry() { String generateEncodedTelemetry() {
String telemetry = "|"; String telemetry = "|";
telemetry += generateEncodedTelemetryBytes(telemetryCounter, true, 0); telemetry += generateEncodedTelemetryBytes(telemetryCounter, true, 0);
+2 -2
View File
@@ -14,8 +14,8 @@ namespace BATTERY_Utils {
void checkIfShouldSleep(); // ???? void checkIfShouldSleep(); // ????
void startupBatteryHealth(); void startupBatteryHealth();
String generateEncodedTelemetryBytes(float value, bool firstBytes, byte voltageType); String generateEncodedTelemetryBytes(float value, bool firstBytes, byte voltageType);
String generateEncodedTelemetry(); String generateEncodedTelemetry();
} }
-23
View File
@@ -1,23 +0,0 @@
#ifndef BME_UTILS_H_
#define BME_UTILS_H_
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_BME680.h>
#include "Adafruit_Si7021.h"
#include <Arduino.h>
namespace BME_Utils {
void getWxModuleAddres();
void setup();
String generateTempString(const float bmeTemp);
String generateHumString(const float bmeHum);
String generatePresString(const float bmePress);
String readDataSensor();
}
#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
+34 -16
View File
@@ -18,7 +18,7 @@ void Configuration::writeFile() {
} }
data["wifi"]["autoAP"]["password"] = wifiAutoAP.password; data["wifi"]["autoAP"]["password"] = wifiAutoAP.password;
data["wifi"]["autoAP"]["powerOff"] = wifiAutoAP.powerOff; data["wifi"]["autoAP"]["timeout"] = wifiAutoAP.timeout;
data["callsign"] = callsign; data["callsign"] = callsign;
@@ -40,7 +40,11 @@ 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["lora"]["rxFreq"] = loramodule.rxFreq; data["lora"]["rxFreq"] = loramodule.rxFreq;
data["lora"]["txFreq"] = loramodule.txFreq; data["lora"]["txFreq"] = loramodule.txFreq;
@@ -68,9 +72,9 @@ void Configuration::writeFile() {
data["battery"]["sendVoltageAsTelemetry"] = battery.sendVoltageAsTelemetry; data["battery"]["sendVoltageAsTelemetry"] = battery.sendVoltageAsTelemetry;
data["bme"]["active"] = bme.active; data["wxsensor"]["active"] = wxsensor.active;
data["bme"]["heightCorrection"] = bme.heightCorrection; data["wxsensor"]["heightCorrection"] = wxsensor.heightCorrection;
data["bme"]["temperatureCorrection"] = bme.temperatureCorrection; data["wxsensor"]["temperatureCorrection"] = wxsensor.temperatureCorrection;
data["syslog"]["active"] = syslog.active; data["syslog"]["active"] = syslog.active;
data["syslog"]["server"] = syslog.server; data["syslog"]["server"] = syslog.server;
@@ -99,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();
@@ -129,7 +135,7 @@ bool Configuration::readFile() {
} }
wifiAutoAP.password = data["wifi"]["autoAP"]["password"] | "1234567890"; wifiAutoAP.password = data["wifi"]["autoAP"]["password"] | "1234567890";
wifiAutoAP.powerOff = data["wifi"]["autoAP"]["powerOff"] | 10; wifiAutoAP.timeout = data["wifi"]["autoAP"]["timeout"] | 10;
callsign = data["callsign"] | "NOCALL-10"; callsign = data["callsign"] | "NOCALL-10";
rememberStationTime = data["other"]["rememberStationTime"] | 30; rememberStationTime = data["other"]["rememberStationTime"] | 30;
@@ -143,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";
@@ -153,6 +162,7 @@ bool Configuration::readFile() {
aprs_is.objectsToRF = data["aprs_is"]["objectsToRF"] | false; aprs_is.objectsToRF = data["aprs_is"]["objectsToRF"] | false;
digi.mode = data["digi"]["mode"] | 0; digi.mode = data["digi"]["mode"] | 0;
digi.ecoMode = data["digi"]["ecoMode"] | false;
loramodule.txFreq = data["lora"]["txFreq"] | 433775000; loramodule.txFreq = data["lora"]["txFreq"] | 433775000;
loramodule.rxFreq = data["lora"]["rxFreq"] | 433775000; loramodule.rxFreq = data["lora"]["rxFreq"] | 433775000;
@@ -169,7 +179,7 @@ bool Configuration::readFile() {
battery.sendInternalVoltage = data["battery"]["sendInternalVoltage"] | false; battery.sendInternalVoltage = data["battery"]["sendInternalVoltage"] | false;
battery.monitorInternalVoltage = data["battery"]["monitorInternalVoltage"] | false; battery.monitorInternalVoltage = data["battery"]["monitorInternalVoltage"] | false;
battery.internalSleepVoltage = data["battery"]["internalSleepVoltage"] | 3.0; battery.internalSleepVoltage = data["battery"]["internalSleepVoltage"] | 2.9;
battery.sendExternalVoltage = data["battery"]["sendExternalVoltage"] | false; battery.sendExternalVoltage = data["battery"]["sendExternalVoltage"] | false;
battery.externalVoltagePin = data["battery"]["externalVoltagePin"] | 34; battery.externalVoltagePin = data["battery"]["externalVoltagePin"] | 34;
@@ -178,11 +188,11 @@ bool Configuration::readFile() {
battery.voltageDividerR1 = data["battery"]["voltageDividerR1"] | 100.0; battery.voltageDividerR1 = data["battery"]["voltageDividerR1"] | 100.0;
battery.voltageDividerR2 = data["battery"]["voltageDividerR2"] | 27.0; battery.voltageDividerR2 = data["battery"]["voltageDividerR2"] | 27.0;
battery.sendVoltageAsTelemetry = data["battery"]["sendVoltageAsTelemetry"] | true; battery.sendVoltageAsTelemetry = data["battery"]["sendVoltageAsTelemetry"] | false;
bme.active = data["bme"]["active"] | false; wxsensor.active = data["wxsensor"]["active"] | false;
bme.heightCorrection = data["bme"]["heightCorrection"] | 0; wxsensor.heightCorrection = data["wxsensor"]["heightCorrection"] | 0;
bme.temperatureCorrection = data["bme"]["temperatureCorrection"] | 0.0; wxsensor.temperatureCorrection = data["wxsensor"]["temperatureCorrection"] | 0.0;
syslog.active = data["syslog"]["active"] | false; syslog.active = data["syslog"]["active"] | false;
syslog.server = data["syslog"]["server"] | "192.168.0.100"; syslog.server = data["syslog"]["server"] | "192.168.0.100";
@@ -199,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;
@@ -234,7 +246,7 @@ void Configuration::init() {
wifiAPs.push_back(wifiap); wifiAPs.push_back(wifiap);
wifiAutoAP.password = "1234567890"; wifiAutoAP.password = "1234567890";
wifiAutoAP.powerOff = 15; wifiAutoAP.timeout = 10;
callsign = "N0CALL-10"; callsign = "N0CALL-10";
@@ -247,8 +259,12 @@ 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;
tnc.enableServer = false; tnc.enableServer = false;
tnc.enableSerial = false; tnc.enableSerial = false;
@@ -279,9 +295,9 @@ void Configuration::init() {
syslog.server = "192.168.0.100"; syslog.server = "192.168.0.100";
syslog.port = 514; syslog.port = 514;
bme.active = false; wxsensor.active = false;
bme.heightCorrection = 0; wxsensor.heightCorrection = 0;
bme.temperatureCorrection = 0.0; wxsensor.temperatureCorrection = 0.0;
ota.username = ""; ota.username = "";
ota.password = ""; ota.password = "";
@@ -290,7 +306,7 @@ void Configuration::init() {
battery.sendInternalVoltage = false; battery.sendInternalVoltage = false;
battery.monitorInternalVoltage = false; battery.monitorInternalVoltage = false;
battery.internalSleepVoltage = 3.0; battery.internalSleepVoltage = 2.9;
battery.sendExternalVoltage = false; battery.sendExternalVoltage = false;
battery.externalVoltagePin = 34; battery.externalVoltagePin = 34;
@@ -315,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!");
} }
+14 -3
View File
@@ -14,7 +14,7 @@ public:
class WiFi_Auto_AP { class WiFi_Auto_AP {
public: public:
String password; String password;
int powerOff; int timeout;
}; };
class BEACON { class BEACON {
@@ -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 {
@@ -44,6 +46,7 @@ public:
class DIGI { class DIGI {
public: public:
int mode; int mode;
bool ecoMode;
}; };
@@ -80,7 +83,7 @@ public:
bool sendVoltageAsTelemetry; bool sendVoltageAsTelemetry;
}; };
class BME { class WXSENSOR {
public: public:
bool active; bool active;
int heightCorrection; int heightCorrection;
@@ -114,6 +117,13 @@ public:
String password; String password;
}; };
class NTP {
public:
int gmtCorrection;
};
class Configuration { class Configuration {
public: public:
String callsign; String callsign;
@@ -132,11 +142,12 @@ public:
LoraModule loramodule; LoraModule loramodule;
Display display; Display display;
BATTERY battery; BATTERY battery;
BME bme; WXSENSOR wxsensor;
SYSLOG syslog; SYSLOG syslog;
TNC tnc; TNC tnc;
OTA ota; OTA ota;
WEBADMIN webadmin; WEBADMIN webadmin;
NTP ntp;
void init(); void init();
void writeFile(); void writeFile();
+69 -30
View File
@@ -25,31 +25,52 @@ extern bool backUpDigiMode;
namespace DIGI_Utils { namespace DIGI_Utils {
String buildPacket(const String& path, const String& packet, bool thirdParty) { String buildPacket(const String& path, const String& packet, bool thirdParty, bool crossFreq) {
String packetToRepeat = packet.substring(0, packet.indexOf(",") + 1); if (!crossFreq) {
String tempPath = path; String packetToRepeat = packet.substring(0, packet.indexOf(",") + 1);
String tempPath = path;
if (path.indexOf("WIDE1-1") != -1 && (Config.digi.mode == 2 || Config.digi.mode == 3)) { if (path.indexOf("WIDE1-1") != -1 && (Config.digi.mode == 2 || Config.digi.mode == 3)) {
tempPath.replace("WIDE1-1", Config.callsign + "*"); tempPath.replace("WIDE1-1", Config.callsign + "*");
} else if (path.indexOf("WIDE2-") != -1 && Config.digi.mode == 3) { } else if (path.indexOf("WIDE2-") != -1 && Config.digi.mode == 3) {
if (path.indexOf("*") != 1) { if (path.indexOf(",WIDE1*") != -1) {
tempPath.remove(path.indexOf("*"), 1); tempPath.remove(path.indexOf(",WIDE1*"), 7);
}
if (path.indexOf("*") != -1) {
tempPath.remove(path.indexOf("*"), 1);
}
if (path.indexOf("WIDE2-1") != -1) {
tempPath.replace("WIDE2-1", Config.callsign + "*");
} else if (path.indexOf("WIDE2-2") != -1) {
tempPath.replace("WIDE2-2", Config.callsign + "*,WIDE2-1");
} else {
return "";
}
} }
if (path.indexOf("WIDE2-1") != -1) { packetToRepeat += tempPath;
tempPath.replace("WIDE2-1", Config.callsign + "*"); if (thirdParty) {
} else if (path.indexOf("WIDE2-2") != -1) { packetToRepeat += APRS_IS_Utils::checkForStartingBytes(packet.substring(packet.indexOf(":}")));
tempPath.replace("WIDE2-2", Config.callsign + "*,WIDE2-1");
} else { } else {
return ""; packetToRepeat += APRS_IS_Utils::checkForStartingBytes(packet.substring(packet.indexOf(":")));
} }
return packetToRepeat;
} else { // CrossFreq Digirepeater
String suffix = thirdParty ? ":}" : ":";
String packetToRepeat = packet.substring(0, packet.indexOf(suffix));
String terms[] = {",WIDE1*", ",WIDE2*", "*"};
for (String term : terms) {
int index = packetToRepeat.indexOf(term);
if (index != -1) {
packetToRepeat.remove(index, term.length());
}
}
packetToRepeat += ",";
packetToRepeat += Config.callsign;
packetToRepeat += "*";
packetToRepeat += APRS_IS_Utils::checkForStartingBytes(packet.substring(packet.indexOf(suffix)));
return packetToRepeat;
} }
packetToRepeat += tempPath;
if (thirdParty) {
packetToRepeat += APRS_IS_Utils::checkForStartingBytes(packet.substring(packet.indexOf(":}")));
} else {
packetToRepeat += APRS_IS_Utils::checkForStartingBytes(packet.substring(packet.indexOf(":")));
}
return packetToRepeat;
} }
String generateDigiRepeatedPacket(const String& packet, bool thirdParty){ String generateDigiRepeatedPacket(const String& packet, bool thirdParty){
@@ -62,24 +83,34 @@ namespace DIGI_Utils {
} }
if (temp.indexOf(",") > 2) { // checks for path if (temp.indexOf(",") > 2) { // checks for path
const String& path = temp.substring(temp.indexOf(",") + 1); // after tocall const String& path = temp.substring(temp.indexOf(",") + 1); // after tocall
if ((Config.digi.mode == 2 || backUpDigiMode) && path.indexOf("WIDE1-1") != - 1) { if (Config.digi.mode == 2 || backUpDigiMode) {
return buildPacket(path, packet, thirdParty); if (path.indexOf("WIDE1-1") != - 1) {
return buildPacket(path, packet, thirdParty, false);
} else if (path.indexOf("WIDE1-1") == -1 && (abs(Config.loramodule.txFreq - Config.loramodule.rxFreq) >= 125000)) { // CrossFreq Digi
return buildPacket(path, packet, thirdParty, true);
} else {
return "";
}
} else if (Config.digi.mode == 3) { } else if (Config.digi.mode == 3) {
int wide1Index = path.indexOf("WIDE1-1"); if (path.indexOf("WIDE1-1") != -1 || path.indexOf("WIDE2-") != -1) {
int wide2Index = path.indexOf("WIDE2-"); int wide1Index = path.indexOf("WIDE1-1");
int wide2Index = path.indexOf("WIDE2-");
if (wide1Index != -1 && wide2Index != -1 && wide1Index < wide2Index) { // WIDE1-1 && WIDE2-n // WIDE1-1 && WIDE2-n / only WIDE1-1 / only WIDE2-n
return buildPacket(path, packet, thirdParty); if ((wide1Index != -1 && wide2Index != -1 && wide1Index < wide2Index) || (wide1Index != -1 && wide2Index == -1) || (wide1Index == -1 && wide2Index != -1)) {
} else if (wide1Index != -1 && wide2Index == -1) { // only WIDE1-1 return buildPacket(path, packet, thirdParty, false);
return buildPacket(path, packet, thirdParty); }
} else if (wide1Index == -1 && wide2Index != -1) { // only WIDE2-n return "";
return buildPacket(path, packet, thirdParty); } else if (path.indexOf("WIDE1-1") == -1 && path.indexOf("WIDE2-") == -1 && (abs(Config.loramodule.txFreq - Config.loramodule.rxFreq) >= 125000)) { // CrossFreq Digi
return buildPacket(path, packet, thirdParty, true);
} else { } else {
return ""; return "";
} }
} else { } else {
return ""; return "";
} }
} else if (temp.indexOf(",") == -1 && (Config.digi.mode == 2 || backUpDigiMode || Config.digi.mode == 3) && (abs(Config.loramodule.txFreq - Config.loramodule.rxFreq) >= 125000)) {
return buildPacket("", packet, thirdParty, true);
} else { } else {
return ""; return "";
} }
@@ -133,4 +164,12 @@ namespace DIGI_Utils {
} }
} }
void checkEcoMode() {
if (Config.digi.ecoMode) {
Config.display.alwaysOn = false;
Config.display.timeout = 0;
setCpuFrequencyMhz(10);
}
}
} }
+2 -1
View File
@@ -6,9 +6,10 @@
namespace DIGI_Utils { namespace DIGI_Utils {
String buildPacket(const String& path, const String& packet, bool thirdParty); String buildPacket(const String& path, const String& packet, bool thirdParty, bool crossFreq);
String generateDigiRepeatedPacket(const String& packet, bool thirdParty); String generateDigiRepeatedPacket(const String& packet, bool thirdParty);
void processLoRaPacket(const String& packet); void processLoRaPacket(const String& packet);
void checkEcoMode();
} }
+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
+23 -11
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
@@ -116,9 +128,9 @@ namespace LoRa_Utils {
if (Config.loramodule.txFreq != Config.loramodule.rxFreq) { if (Config.loramodule.txFreq != Config.loramodule.rxFreq) {
changeFreqTx(); changeFreqTx();
} }
#ifdef INTERNAL_LED_PIN #ifdef INTERNAL_LED_PIN
digitalWrite(INTERNAL_LED_PIN, HIGH); if (!Config.digi.ecoMode) digitalWrite(INTERNAL_LED_PIN, HIGH);
#endif #endif
int state = radio.transmit("\x3c\xff\x01" + newPacket); int state = radio.transmit("\x3c\xff\x01" + newPacket);
transmitFlag = true; transmitFlag = true;
@@ -133,7 +145,7 @@ namespace LoRa_Utils {
Utils::println(String(state)); Utils::println(String(state));
} }
#ifdef INTERNAL_LED_PIN #ifdef INTERNAL_LED_PIN
digitalWrite(INTERNAL_LED_PIN, LOW); if (!Config.digi.ecoMode) digitalWrite(INTERNAL_LED_PIN, LOW);
#endif #endif
if (Config.loramodule.txFreq != Config.loramodule.rxFreq) { if (Config.loramodule.txFreq != Config.loramodule.rxFreq) {
changeFreqRx(); changeFreqRx();
@@ -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);
+11
View File
@@ -3,6 +3,7 @@
#include "query_utils.h" #include "query_utils.h"
#include "lora_utils.h" #include "lora_utils.h"
extern Configuration Config; extern Configuration Config;
extern std::vector<LastHeardStation> lastHeardStations; extern std::vector<LastHeardStation> lastHeardStations;
extern String versionDate; extern String versionDate;
@@ -50,6 +51,16 @@ 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 && Config.digi.ecoMode == true) { // Exit DigiRepeater EcoMode
answer = "DigiEcoMode:Stop";
Config.digi.ecoMode = false;
Config.display.alwaysOn = true;
Config.display.timeout = 10;
} else if (queryQuestion.indexOf("?APRSSEM") == 0 && Config.digi.ecoMode == false) { // Start DigiRepeater EcoMode
answer = "DigiEcoMode:Start";
Config.digi.ecoMode = true;
} else if (queryQuestion.indexOf("?APRSEMS") == 0) { // DigiRepeater EcoMode Status
answer = (Config.digi.ecoMode) ? "DigiEcoMode:ON" : "DigiEcoMode:OFF";
} }
String queryAnswer = Config.callsign; String queryAnswer = Config.callsign;
+14 -3
View File
@@ -3,6 +3,7 @@
#include "aprs_is_utils.h" #include "aprs_is_utils.h"
#include "configuration.h" #include "configuration.h"
#include "lora_utils.h" #include "lora_utils.h"
#include "display.h"
#include "utils.h" #include "utils.h"
#include <vector> #include <vector>
@@ -100,11 +101,16 @@ namespace STATION_Utils {
} }
void processOutputPacketBuffer() { void processOutputPacketBuffer() {
int timeToWait = 3 * 1000; // 3 segs between packet Tx and also Rx ??? int timeToWait = 3 * 1000; // 3 segs between packet Tx and also Rx ???
uint32_t lastRx = millis() - lastRxTime; uint32_t lastRx = millis() - lastRxTime;
uint32_t lastTx = millis() - lastTxTime; uint32_t lastTx = millis() - lastTxTime;
bool saveNewDigiEcoModeConfig = false;
if (outputPacketBuffer.size() > 0 && lastTx > timeToWait && lastRx > timeToWait) { if (outputPacketBuffer.size() > 0 && lastTx > timeToWait && lastRx > timeToWait) {
LoRa_Utils::sendNewPacket(outputPacketBuffer[0]); LoRa_Utils::sendNewPacket(outputPacketBuffer[0]);
if (outputPacketBuffer[0].indexOf("DigiEcoMode:Start") != -1 || outputPacketBuffer[0].indexOf("DigiEcoMode:Stop") != -1) {
saveNewDigiEcoModeConfig = true;
shouldSleepLowVoltage = true; // to make sure all packets in outputPacketBuffer are sended before restart.
}
outputPacketBuffer.erase(outputPacketBuffer.begin()); outputPacketBuffer.erase(outputPacketBuffer.begin());
lastTxTime = millis(); lastTxTime = millis();
} }
@@ -115,6 +121,11 @@ namespace STATION_Utils {
delay(4000); delay(4000);
} }
} }
if (saveNewDigiEcoModeConfig) {
Config.writeFile();
displayToggle(false);
ESP.restart();
}
} }
void addToOutputPacketBuffer(const String& packet) { void addToOutputPacketBuffer(const String& packet) {
+9 -7
View File
@@ -22,7 +22,7 @@ String inputSerialBuffer = "";
namespace TNC_Utils { namespace TNC_Utils {
void setup() { void setup() {
if (Config.tnc.enableServer) { if (Config.tnc.enableServer && !Config.digi.ecoMode) {
tncServer.stop(); tncServer.stop();
tncServer.begin(); tncServer.begin();
} }
@@ -133,12 +133,14 @@ namespace TNC_Utils {
} }
void loop() { void loop() {
if (Config.tnc.enableServer) { if (!Config.digi.ecoMode) {
checkNewClients(); if (Config.tnc.enableServer) {
readFromClients(); checkNewClients();
} readFromClients();
if (Config.tnc.enableSerial) { }
readFromSerial(); if (Config.tnc.enableSerial) {
readFromSerial();
}
} }
} }
} }
+36 -11
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"
@@ -9,12 +10,14 @@
#include "lora_utils.h" #include "lora_utils.h"
#include "wifi_utils.h" #include "wifi_utils.h"
#include "gps_utils.h" #include "gps_utils.h"
#include "bme_utils.h" #include "wx_utils.h"
#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 {
@@ -70,7 +75,9 @@ namespace Utils {
} }
String getLocalIP() { String getLocalIP() {
if (!WiFiConnected) { if (Config.digi.ecoMode) {
return "** WiFi AP Killed **";
} else if (!WiFiConnected) {
return "IP : 192.168.4.1"; return "IP : 192.168.4.1";
} else if (backUpDigiMode) { } else if (backUpDigiMode) {
return "- BACKUP DIGI MODE -"; return "- BACKUP DIGI MODE -";
@@ -85,6 +92,7 @@ namespace Utils {
digitalWrite(INTERNAL_LED_PIN,HIGH); digitalWrite(INTERNAL_LED_PIN,HIGH);
#endif #endif
Serial.println("\nStarting Station: " + Config.callsign + " Version: " + versionDate); Serial.println("\nStarting Station: " + Config.callsign + " Version: " + versionDate);
Serial.println((Config.digi.ecoMode) ? "(DigiEcoMode: ON)" : "(DigiEcoMode: OFF)");
displayShow(" LoRa APRS", "", "", " ( iGATE & DIGI )", "", "" , " CA2RXU " + versionDate, 4000); displayShow(" LoRa APRS", "", "", " ( iGATE & DIGI )", "", "" , " CA2RXU " + versionDate, 4000);
#ifdef INTERNAL_LED_PIN #ifdef INTERNAL_LED_PIN
digitalWrite(INTERNAL_LED_PIN,LOW); digitalWrite(INTERNAL_LED_PIN,LOW);
@@ -103,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++) {
@@ -172,19 +179,25 @@ 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);
} }
if (sendStartTelemetry && Config.battery.sendVoltageAsTelemetry && !Config.bme.active && (Config.battery.sendInternalVoltage || Config.battery.sendExternalVoltage)) { if (sendStartTelemetry && Config.battery.sendVoltageAsTelemetry && !Config.wxsensor.active && (Config.battery.sendInternalVoltage || Config.battery.sendExternalVoltage)) {
sendInitialTelemetryPackets(); sendInitialTelemetryPackets();
} }
@@ -192,13 +205,25 @@ namespace Utils {
activeStations(); activeStations();
String beaconPacket = iGateBeaconPacket; beaconPacket = iGateBeaconPacket;
String secondaryBeaconPacket = iGateLoRaBeaconPacket; secondaryBeaconPacket = iGateLoRaBeaconPacket;
if (Config.bme.active && wxModuleType != 0) { #ifdef HAS_GPS
String sensorData = BME_Utils::readDataSensor(); 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) {
String sensorData = WX_Utils::readDataSensor();
beaconPacket += sensorData; beaconPacket += sensorData;
secondaryBeaconPacket += sensorData; secondaryBeaconPacket += sensorData;
} else if (Config.bme.active && wxModuleType == 0) { } else if (Config.wxsensor.active && wxModuleType == 0) {
beaconPacket += ".../...g...t..."; beaconPacket += ".../...g...t...";
secondaryBeaconPacket += ".../...g...t..."; secondaryBeaconPacket += ".../...g...t...";
} }
@@ -253,7 +278,7 @@ namespace Utils {
} }
#endif #endif
if (Config.battery.sendVoltageAsTelemetry && !Config.bme.active && (Config.battery.sendInternalVoltage || Config.battery.sendExternalVoltage)){ if (Config.battery.sendVoltageAsTelemetry && !Config.wxsensor.active && (Config.battery.sendInternalVoltage || Config.battery.sendExternalVoltage)){
String encodedTelemetry = BATTERY_Utils::generateEncodedTelemetry(); String encodedTelemetry = BATTERY_Utils::generateEncodedTelemetry();
beaconPacket += encodedTelemetry; beaconPacket += encodedTelemetry;
secondaryBeaconPacket += encodedTelemetry; secondaryBeaconPacket += encodedTelemetry;
+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;
+38 -30
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;
@@ -110,10 +110,10 @@ namespace WEB_Utils {
} }
Config.callsign = request->getParam("callsign", true)->value(); Config.callsign = request->getParam("callsign", true)->value();
Config.wifiAutoAP.password = request->getParam("wifi.autoAP.password", true)->value();
Config.wifiAutoAP.powerOff = request->getParam("wifi.autoAP.powerOff", true)->value().toInt();
Config.wifiAutoAP.password = request->getParam("wifi.autoAP.password", true)->value();
Config.wifiAutoAP.timeout = request->getParam("wifi.autoAP.timeout", true)->value().toInt();
Config.aprs_is.active = request->hasParam("aprs_is.active", true); Config.aprs_is.active = request->hasParam("aprs_is.active", true);
Config.aprs_is.passcode = request->getParam("aprs_is.passcode", true)->value(); Config.aprs_is.passcode = request->getParam("aprs_is.passcode", true)->value();
@@ -134,8 +134,12 @@ 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.loramodule.txFreq = request->getParam("lora.txFreq", true)->value().toInt(); Config.loramodule.txFreq = request->getParam("lora.txFreq", true)->value().toInt();
@@ -148,11 +152,11 @@ namespace WEB_Utils {
Config.loramodule.rxActive = request->hasParam("lora.rxActive", true); Config.loramodule.rxActive = request->hasParam("lora.rxActive", true);
Config.display.alwaysOn = request->hasParam("display.alwaysOn", true); Config.display.alwaysOn = request->hasParam("display.alwaysOn", true);
if (!Config.display.alwaysOn) { if (!Config.display.alwaysOn) {
Config.display.timeout = request->getParam("display.timeout", true)->value().toInt(); Config.display.timeout = request->getParam("display.timeout", true)->value().toInt();
} }
Config.display.turn180 = request->hasParam("display.turn180", true); Config.display.turn180 = request->hasParam("display.turn180", true);
Config.battery.sendInternalVoltage = request->hasParam("battery.sendInternalVoltage", true); Config.battery.sendInternalVoltage = request->hasParam("battery.sendInternalVoltage", true);
@@ -162,18 +166,18 @@ namespace WEB_Utils {
Config.battery.sendExternalVoltage = request->hasParam("battery.sendExternalVoltage", true); Config.battery.sendExternalVoltage = request->hasParam("battery.sendExternalVoltage", true);
if (Config.battery.sendExternalVoltage) { if (Config.battery.sendExternalVoltage) {
Config.battery.externalVoltagePin = request->getParam("battery.externalVoltagePin", true)->value().toInt(); Config.battery.externalVoltagePin = request->getParam("battery.externalVoltagePin", true)->value().toInt();
Config.battery.voltageDividerR1 = request->getParam("battery.voltageDividerR1", true)->value().toFloat(); Config.battery.voltageDividerR1 = request->getParam("battery.voltageDividerR1", true)->value().toFloat();
Config.battery.voltageDividerR2 = request->getParam("battery.voltageDividerR2", true)->value().toFloat(); Config.battery.voltageDividerR2 = request->getParam("battery.voltageDividerR2", true)->value().toFloat();
} }
Config.battery.monitorExternalVoltage = request->hasParam("battery.monitorExternalVoltage", true); Config.battery.monitorExternalVoltage = request->hasParam("battery.monitorExternalVoltage", true);
Config.battery.externalSleepVoltage = request->getParam("battery.externalSleepVoltage", true)->value().toFloat(); Config.battery.externalSleepVoltage = request->getParam("battery.externalSleepVoltage", true)->value().toFloat();
Config.battery.sendVoltageAsTelemetry = request->hasParam("battery.sendVoltageAsTelemetry", true); Config.battery.sendVoltageAsTelemetry = request->hasParam("battery.sendVoltageAsTelemetry", true);
Config.bme.active = request->hasParam("bme.active", true); Config.wxsensor.active = request->hasParam("wxsensor.active", true);
Config.bme.heightCorrection = request->getParam("bme.heightCorrection", true)->value().toInt(); Config.wxsensor.heightCorrection = request->getParam("wxsensor.heightCorrection", true)->value().toInt();
Config.bme.temperatureCorrection = request->getParam("bme.temperatureCorrection", true)->value().toFloat(); Config.wxsensor.temperatureCorrection = request->getParam("wxsensor.temperatureCorrection", true)->value().toFloat();
if (Config.bme.active) { if (Config.wxsensor.active) {
Config.beacon.symbol = "_"; Config.beacon.symbol = "_";
} }
@@ -207,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", "");
@@ -258,23 +264,25 @@ namespace WEB_Utils {
} }
void setup() { void setup() {
server.on("/", HTTP_GET, handleHome); if (!Config.digi.ecoMode) {
server.on("/status", HTTP_GET, handleStatus); server.on("/", HTTP_GET, handleHome);
server.on("/received-packets.json", HTTP_GET, handleReceivedPackets); server.on("/status", HTTP_GET, handleStatus);
server.on("/configuration.json", HTTP_GET, handleReadConfiguration); server.on("/received-packets.json", HTTP_GET, handleReceivedPackets);
server.on("/configuration.json", HTTP_POST, handleWriteConfiguration); server.on("/configuration.json", HTTP_GET, handleReadConfiguration);
server.on("/action", HTTP_POST, handleAction); server.on("/configuration.json", HTTP_POST, handleWriteConfiguration);
server.on("/style.css", HTTP_GET, handleStyle); server.on("/action", HTTP_POST, handleAction);
server.on("/script.js", HTTP_GET, handleScript); server.on("/style.css", HTTP_GET, handleStyle);
server.on("/bootstrap.css", HTTP_GET, handleBootstrapStyle); server.on("/script.js", HTTP_GET, handleScript);
server.on("/bootstrap.js", HTTP_GET, handleBootstrapScript); server.on("/bootstrap.css", HTTP_GET, handleBootstrapStyle);
server.on("/favicon.png", HTTP_GET, handleFavicon); server.on("/bootstrap.js", HTTP_GET, handleBootstrapScript);
server.on("/favicon.png", HTTP_GET, handleFavicon);
OTA_Utils::setup(&server); // Include OTA Updater for WebServer OTA_Utils::setup(&server); // Include OTA Updater for WebServer
server.onNotFound(handleNotFound); server.onNotFound(handleNotFound);
server.begin(); server.begin();
}
} }
} }
+33 -31
View File
@@ -23,33 +23,35 @@ uint32_t lastBackupDigiTime = millis();
namespace WIFI_Utils { namespace WIFI_Utils {
void checkWiFi() { void checkWiFi() {
if (backUpDigiMode) { if (!Config.digi.ecoMode) {
uint32_t WiFiCheck = millis() - lastBackupDigiTime; if (backUpDigiMode) {
if (WiFi.status() != WL_CONNECTED && WiFiCheck >= 15 * 60 * 1000) { uint32_t WiFiCheck = millis() - lastBackupDigiTime;
Serial.println("*** Stoping BackUp Digi Mode ***"); if (WiFi.status() != WL_CONNECTED && WiFiCheck >= 15 * 60 * 1000) {
backUpDigiMode = false; Serial.println("*** Stopping BackUp Digi Mode ***");
wifiCounter = 0; backUpDigiMode = false;
} else if (WiFi.status() == WL_CONNECTED) { wifiCounter = 0;
Serial.println("*** WiFi Reconnect Success (Stoping Backup Digi Mode) ***"); } else if (WiFi.status() == WL_CONNECTED) {
backUpDigiMode = false; Serial.println("*** WiFi Reconnect Success (Stopping Backup Digi Mode) ***");
wifiCounter = 0; backUpDigiMode = false;
wifiCounter = 0;
}
} }
}
if (!backUpDigiMode && (WiFi.status() != WL_CONNECTED) && ((millis() - previousWiFiMillis) >= 30 * 1000) && !WiFiAutoAPStarted) { if (!backUpDigiMode && (WiFi.status() != WL_CONNECTED) && ((millis() - previousWiFiMillis) >= 30 * 1000) && !WiFiAutoAPStarted) {
Serial.print(millis()); Serial.print(millis());
Serial.println("Reconnecting to WiFi..."); Serial.println("Reconnecting to WiFi...");
WiFi.disconnect(); WiFi.disconnect();
WIFI_Utils::startWiFi();//WiFi.reconnect(); WIFI_Utils::startWiFi();//WiFi.reconnect();
previousWiFiMillis = millis(); previousWiFiMillis = millis();
if (Config.backupDigiMode) { if (Config.backupDigiMode) {
wifiCounter++; wifiCounter++;
} }
if (wifiCounter >= 2) { if (wifiCounter >= 2) {
Serial.println("*** Starting BackUp Digi Mode ***"); Serial.println("*** Starting BackUp Digi Mode ***");
backUpDigiMode = true; backUpDigiMode = true;
lastBackupDigiTime = millis(); lastBackupDigiTime = millis();
}
} }
} }
} }
@@ -58,7 +60,7 @@ namespace WIFI_Utils {
WiFi.mode(WIFI_MODE_NULL); WiFi.mode(WIFI_MODE_NULL);
WiFi.mode(WIFI_AP); WiFi.mode(WIFI_AP);
WiFi.softAP(Config.callsign + " AP", Config.wifiAutoAP.password); WiFi.softAP(Config.callsign + "-AP", Config.wifiAutoAP.password);
WiFiAutoAPTime = millis(); WiFiAutoAPTime = millis();
WiFiAutoAPStarted = true; WiFiAutoAPStarted = true;
@@ -76,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) {
@@ -101,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());
} }
@@ -131,14 +133,14 @@ namespace WIFI_Utils {
} }
} }
void checkIfAutoAPShouldPowerOff() { void checkAutoAPTimeout() {
if (WiFiAutoAPStarted && Config.wifiAutoAP.powerOff > 0) { if (WiFiAutoAPStarted && Config.wifiAutoAP.timeout > 0) {
if (WiFi.softAPgetStationNum() > 0) { if (WiFi.softAPgetStationNum() > 0) {
WiFiAutoAPTime = 0; WiFiAutoAPTime = 0;
} else { } else {
if (WiFiAutoAPTime == 0) { if (WiFiAutoAPTime == 0) {
WiFiAutoAPTime = millis(); WiFiAutoAPTime = millis();
} else if ((millis() - WiFiAutoAPTime) > Config.wifiAutoAP.powerOff * 60 * 1000) { } else if ((millis() - WiFiAutoAPTime) > Config.wifiAutoAP.timeout * 60 * 1000) {
Serial.println("Stopping auto AP"); Serial.println("Stopping auto AP");
WiFiAutoAPStarted = false; WiFiAutoAPStarted = false;
@@ -151,7 +153,7 @@ namespace WIFI_Utils {
} }
void setup() { void setup() {
startWiFi(); if (!Config.digi.ecoMode) startWiFi();
btStop(); btStop();
} }
+1 -1
View File
@@ -9,7 +9,7 @@ namespace WIFI_Utils {
void checkWiFi(); void checkWiFi();
void startAutoAP(); void startAutoAP();
void startWiFi(); void startWiFi();
void checkIfAutoAPShouldPowerOff(); void checkAutoAPTimeout();
void setup(); void setup();
} }
+28 -30
View File
@@ -1,10 +1,10 @@
#include "bme_utils.h"
#include "configuration.h" #include "configuration.h"
#include "gps_utils.h" #include "wx_utils.h"
#include "display.h" #include "display.h"
#define SEALEVELPRESSURE_HPA (1013.25)
#define CORRECTION_FACTOR (8.2296) // for meters #define SEALEVELPRESSURE_HPA (1013.25)
#define CORRECTION_FACTOR (8.2296) // for meters
extern Configuration Config; extern Configuration Config;
extern String fifthLine; extern String fifthLine;
@@ -27,7 +27,7 @@ Adafruit_Si7021 sensor = Adafruit_Si7021();
namespace BME_Utils { namespace WX_Utils {
void getWxModuleAddres() { void getWxModuleAddres() {
uint8_t err, addr; uint8_t err, addr;
@@ -53,7 +53,7 @@ namespace BME_Utils {
} }
void setup() { void setup() {
if (Config.bme.active) { if (Config.wxsensor.active) {
getWxModuleAddres(); getWxModuleAddres();
if (wxModuleAddress != 0x00) { if (wxModuleAddress != 0x00) {
bool wxModuleFound = false; bool wxModuleFound = false;
@@ -129,8 +129,8 @@ namespace BME_Utils {
} }
} }
String generateTempString(const float bmeTemp) { String generateTempString(const float sensorTemp) {
String strTemp = String((int)bmeTemp); String strTemp = String((int)sensorTemp);
switch (strTemp.length()) { switch (strTemp.length()) {
case 1: case 1:
return "00" + strTemp; return "00" + strTemp;
@@ -143,15 +143,15 @@ namespace BME_Utils {
} }
} }
String generateHumString(const float bmeHum) { String generateHumString(const float sensorHum) {
String strHum = String((int)bmeHum); String strHum = String((int)sensorHum);
switch (strHum.length()) { switch (strHum.length()) {
case 1: case 1:
return "0" + strHum; return "0" + strHum;
case 2: case 2:
return strHum; return strHum;
case 3: case 3:
if ((int)bmeHum == 100) { if ((int)sensorHum == 100) {
return "00"; return "00";
} else { } else {
return "-99"; return "-99";
@@ -161,9 +161,9 @@ namespace BME_Utils {
} }
} }
String generatePresString(const float bmePress) { String generatePresString(const float sensorPres) {
String strPress = String((int)bmePress); String strPress = String((int)sensorPres);
String decPress = String(int((bmePress - int(bmePress)) * 10)); String decPress = String(int((sensorPres - int(sensorPres)) * 10));
switch (strPress.length()) { switch (strPress.length()) {
case 1: case 1:
return "000" + strPress + decPress; return "000" + strPress + decPress;
@@ -213,14 +213,12 @@ namespace BME_Utils {
break; break;
} }
String wx;
if (isnan(newTemp) || isnan(newHum) || isnan(newPress)) { if (isnan(newTemp) || isnan(newHum) || isnan(newPress)) {
Serial.println("BME/BMP/Si7021 Module data failed"); Serial.println("BME/BMP/Si7021 Module data failed");
wx = ".../...g...t...";
fifthLine = ""; fifthLine = "";
return wx; return ".../...g...t...";
} else { } else {
String tempStr = generateTempString(((newTemp + Config.bme.temperatureCorrection) * 1.8) + 32); String tempStr = generateTempString(((newTemp + Config.wxsensor.temperatureCorrection) * 1.8) + 32);
String humStr; String humStr;
if (wxModuleType == 1 || wxModuleType == 3 || wxModuleType == 4) { if (wxModuleType == 1 || wxModuleType == 3 || wxModuleType == 4) {
@@ -233,30 +231,30 @@ namespace BME_Utils {
if (wxModuleAddress == 4) { if (wxModuleAddress == 4) {
presStr = "....."; presStr = ".....";
} else { } else {
presStr = generatePresString(newPress + (Config.bme.heightCorrection/CORRECTION_FACTOR)); presStr = generatePresString(newPress + (Config.wxsensor.heightCorrection/CORRECTION_FACTOR));
} }
fifthLine = "BME-> "; fifthLine = "BME-> ";
fifthLine += String(int(newTemp + Config.bme.temperatureCorrection)); fifthLine += String(int(newTemp + Config.wxsensor.temperatureCorrection));
fifthLine += "C "; fifthLine += "C ";
fifthLine += humStr; fifthLine += humStr;
fifthLine += "% "; fifthLine += "% ";
fifthLine += presStr.substring(0,4); fifthLine += presStr.substring(0,4);
fifthLine += "hPa"; fifthLine += "hPa";
wx = ".../...g...t"; String wxPayload = ".../...g...t";
wx += tempStr; wxPayload += tempStr;
wx += "h"; wxPayload += "h";
wx += humStr; wxPayload += humStr;
wx += "b"; wxPayload += "b";
wx += presStr; wxPayload += presStr;
if (wxModuleType == 3) { if (wxModuleType == 3) {
wx += "Gas: "; wxPayload += "Gas: ";
wx += String(newGas); wxPayload += String(newGas);
wx += "Kohms"; wxPayload += "Kohms";
} }
return wx; return wxPayload;
} }
} }
+23
View File
@@ -0,0 +1,23 @@
#ifndef WX_UTILS_H_
#define WX_UTILS_H_
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_BME680.h>
#include "Adafruit_Si7021.h"
#include <Arduino.h>
namespace WX_Utils {
void getWxModuleAddres();
void setup();
String generateTempString(const float sensorTemp);
String generateHumString(const float sensorHum);
String generatePresString(const float sensorPres);
String readDataSensor();
}
#endif