Merge pull request #50 from agessaman/feat/station-g3-r2-slot

feat(station-g3): add second RF slot (r2) build targets
This commit is contained in:
Adam Gessaman authored and GitHub committed 2026-09-05 14:27:23 -07:00
commit 3bacd9edcb
2 files changed
+171 -10

No files matched your search

+4
View File
@@ -211,6 +211,8 @@ pio run -e Station_G2_repeater_observer_mqtt
# Station G3 (ESP32)
pio run -e Station_G3_ESP32_repeater_observer_mqtt
pio run -e Station_G3_ESP32_room_server_observer_mqtt
pio run -e Station_G3_ESP32_r2_repeater_observer_mqtt # second RF slot
pio run -e Station_G3_ESP32_r2_room_server_observer_mqtt # second RF slot
# LilyGo T-LoRa V2.1-1.6 (TTGO LoRa32 V1.0)
pio run -e LilyGo_TLora_V2_1_1_6_repeater_observer_mqtt
@@ -245,6 +247,8 @@ Some MQTT observer builds use a non-default partition table to accommodate the l
| `Station_G2_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | 16 MB flash board |
| `Station_G3_ESP32_repeater_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | 16 MB flash board |
| `Station_G3_ESP32_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | 16 MB flash board |
| `Station_G3_ESP32_r2_repeater_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | Second RF slot; same board and layout as the slot-1 env |
| `Station_G3_ESP32_r2_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | same |
| `LilyGo_TBeam_1W_repeater_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | Set in `boards/t_beam_1w.json`; required vs implicit `default.csv` |
| `LilyGo_TBeam_1W_room_server_observer_mqtt` | `default_16MB.csv` | 16 MB | 6.25 MB | same |
+167 -10
View File
@@ -1,4 +1,7 @@
[Station_G3_ESP32]
; The motherboard has two RF daughterboard slots on separate GPIOs, mirrored by its
; "LNA P" / "LNA S" jumpers. Slot 1 is [Station_G3_ESP32], slot 2 is [Station_G3_ESP32_r2];
; the slot pins sit in their own sections so neither set of -D flags shadows the other.
[Station_G3_ESP32_common]
extends = esp32_base
board = station-g3-esp32
build_flags =
@@ -10,17 +13,8 @@ build_flags =
-D USE_SX1262
-D RADIO_CLASS=CustomSX1262
-D WRAPPER_CLASS=CustomSX1262Wrapper
-D P_LORA_DIO_1=48
-D P_LORA_NSS=11
-D P_LORA_RESET=21
-D P_LORA_BUSY=47
-D P_LORA_SCLK=12
-D P_LORA_MISO=14
-D P_LORA_MOSI=13
-D P_PA1_EN=9 ; PA PL1 Mode: LOW/open selects low level, HIGH/short selects high level.
-D P_PA1_EN_ACTIVE=HIGH
-D P_PRIMARY_LNA_EN=10 ; Primary Slot LNA Mode: LOW/open is LNA on, HIGH/short is LNA off.
-D P_PRIMARY_LNA_EN_ACTIVE=LOW
-D LORA_TX_POWER=7 ; SX1262 input power to the Station G3 PA; final output depends on PA PL1/PL2 level.
-D MAX_LORA_TX_POWER=22
; -D P_LORA_TX_LED=35
@@ -45,6 +39,48 @@ lib_deps =
adafruit/Adafruit SH110X @ ~2.1.13
adafruit/Adafruit GFX Library @ ^1.12.1
; PA PL1 is one board-level jumper shared by both slots, so P_PA1_EN stays in the base above.
[station_g3_esp32_r1_pins]
build_flags =
-D P_LORA_DIO_1=48
-D P_LORA_NSS=11
-D P_LORA_RESET=21
-D P_LORA_BUSY=47
-D P_LORA_SCLK=12
-D P_LORA_MISO=14
-D P_LORA_MOSI=13
-D P_PRIMARY_LNA_EN=10 ; Primary Slot LNA Mode: LOW/open is LNA on, HIGH/short is LNA off.
-D P_PRIMARY_LNA_EN_ACTIVE=LOW
; Slot 2 ("LNA S"). P_PRIMARY_LNA_EN keeps its name because LoRaFEMControl knows only one LNA pin.
[station_g3_esp32_r2_pins]
build_flags =
-D P_LORA_DIO_1=2
-D P_LORA_NSS=43
-D P_LORA_RESET=44
-D P_LORA_BUSY=1
-D P_LORA_SCLK=39
-D P_LORA_MISO=41
-D P_LORA_MOSI=40
-D P_PRIMARY_LNA_EN=42 ; Secondary Slot LNA Mode, same polarity as the primary slot.
-D P_PRIMARY_LNA_EN_ACTIVE=LOW
[Station_G3_ESP32]
extends = Station_G3_ESP32_common
build_flags =
${Station_G3_ESP32_common.build_flags}
${station_g3_esp32_r1_pins.build_flags}
build_src_filter = ${Station_G3_ESP32_common.build_src_filter}
lib_deps = ${Station_G3_ESP32_common.lib_deps}
[Station_G3_ESP32_r2]
extends = Station_G3_ESP32_common
build_flags =
${Station_G3_ESP32_common.build_flags}
${station_g3_esp32_r2_pins.build_flags}
build_src_filter = ${Station_G3_ESP32_common.build_src_filter}
lib_deps = ${Station_G3_ESP32_common.lib_deps}
[env:Station_G3_ESP32_repeater]
extends = Station_G3_ESP32
build_flags =
@@ -246,3 +282,124 @@ lib_deps =
JChristensen/Timezone
paulstoffregen/Time@1.6.1
0neblock/SNMP_Agent
[env:Station_G3_ESP32_r2_repeater]
extends = Station_G3_ESP32_r2
build_flags =
${Station_G3_ESP32_r2.build_flags}
-D ADVERT_NAME='"Station G3 ESP32 Repeater"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D MAX_NEIGHBOURS=50
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
build_src_filter = ${Station_G3_ESP32_r2.build_src_filter}
+<../examples/simple_repeater>
lib_deps =
${Station_G3_ESP32_r2.lib_deps}
${esp32_ota.lib_deps}
[env:Station_G3_ESP32_r2_room_server]
extends = Station_G3_ESP32_r2
build_src_filter = ${Station_G3_ESP32_r2.build_src_filter}
+<../examples/simple_room_server>
build_flags =
${Station_G3_ESP32_r2.build_flags}
-D ADVERT_NAME='"Station G3 ESP32 Room"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D ROOM_PASSWORD='"hello"'
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
lib_deps =
${Station_G3_ESP32_r2.lib_deps}
${esp32_ota.lib_deps}
[env:Station_G3_ESP32_r2_repeater_observer_mqtt]
extends = Station_G3_ESP32_r2
board_build.partitions = default_16MB.csv ; standard 16MB partition table
extra_scripts =
${esp32_base.extra_scripts}
pre:scripts/generate_cert_bundle.py
board_ssl_cert_source = adafruit-full
board_build.embed_files = src/certs/x509_crt_bundle.bin
build_flags =
${Station_G3_ESP32_r2.build_flags}
-D ADVERT_NAME='"MQTT Observer"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D MAX_NEIGHBOURS=50
-D WITH_MQTT_BRIDGE=1
-D MQTT_MAX_PACKET_SIZE=1024
-D MQTT_DEBUG=1
# -D MESH_PACKET_LOGGING=1
# -D MESH_DEBUG=1
-D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
-D ESP32_CPU_FREQ=160
-D WITH_SNMP=1
# -D WIFI_SSID='"ssid"'
# -D WIFI_PWD='"password"'
# -D MQTT_SERVER='"your-mqtt-broker.com"'
# -D MQTT_PORT=1883
# -D MQTT_USERNAME='"your-username"'
# -D MQTT_PASSWORD='"your-password"'
build_src_filter = ${Station_G3_ESP32_r2.build_src_filter}
+<helpers/bridges/MQTTBridge.cpp>
+<helpers/MQTTMessageBuilder.cpp>
+<helpers/JWTHelper.cpp>
+<helpers/SNMPAgent.cpp>
+<helpers/ui/SH1106Display.cpp>
+<../examples/simple_repeater>
lib_deps =
${Station_G3_ESP32_r2.lib_deps}
${esp32_ota.lib_deps}
elims/PsychicMqttClient@^0.2.4
bblanchon/ArduinoJson @ 7.4.3
arduino-libraries/NTPClient
JChristensen/Timezone
paulstoffregen/Time@1.6.1
0neblock/SNMP_Agent
[env:Station_G3_ESP32_r2_room_server_observer_mqtt]
extends = Station_G3_ESP32_r2
board_build.partitions = default_16MB.csv ; standard 16MB partition table
extra_scripts =
${esp32_base.extra_scripts}
pre:scripts/generate_cert_bundle.py
board_ssl_cert_source = adafruit-full
board_build.embed_files = src/certs/x509_crt_bundle.bin
build_flags =
${Station_G3_ESP32_r2.build_flags}
-D ADVERT_NAME='"Station G3 ESP32 Room Observer"'
-D ADVERT_LAT=0.0
-D ADVERT_LON=0.0
-D ADMIN_PASSWORD='"password"'
-D ROOM_PASSWORD='"hello"'
-D WITH_MQTT_BRIDGE=1
-D MAX_NEIGHBOURS=50
-D MQTT_MAX_PACKET_SIZE=1024
-D MQTT_DEBUG=1
; -D MESH_PACKET_LOGGING=1
; -D MESH_DEBUG=1
-D CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
-D ESP32_CPU_FREQ=160
-D WITH_SNMP=1
build_src_filter = ${Station_G3_ESP32_r2.build_src_filter}
+<helpers/bridges/MQTTBridge.cpp>
+<helpers/MQTTMessageBuilder.cpp>
+<helpers/JWTHelper.cpp>
+<helpers/ui/SH1106Display.cpp>
+<helpers/SNMPAgent.cpp>
+<../examples/simple_room_server>
lib_deps =
${Station_G3_ESP32_r2.lib_deps}
${esp32_ota.lib_deps}
elims/PsychicMqttClient@^0.2.4
bblanchon/ArduinoJson @ 7.4.3
arduino-libraries/NTPClient
JChristensen/Timezone
paulstoffregen/Time@1.6.1
0neblock/SNMP_Agent